Импорт matplotlib.pyplot и BeautifulSoup с помощью cxFreeze

Я пытаюсь скомпилировать исполняемый файл для моего скрипта Python, используя cxFreeze. Из многих библиотек, которые мне нужно импортировать для моего скрипта, две не работают с cxFreeze. В частности, рассмотрим следующий сценарий test.py:

print('matplotlib.pyplot')
import matplotlib.pyplot

скомпилировав это с помощью cxFreeze и запустив, вы получите следующий результат:

matplotlib cxFreeze проблема

отдельно следующий скрипт test.py:

print('BeautifulSoup from bs4')
from bs4 import BeautifulSoup

после компиляции с помощью cxFreeze выдает следующий вывод: BeautifulSoup cxFreeze проблема

Мой файл setup.py для cxFreeze выглядит следующим образом:

import sys
from cx_Freeze import setup, Executable

setup(
    name = "myname",
    version = "1.0",
    description = "some description",
    executables = [Executable("test.py", base = None)]    
)

Я использую Python 3.3 x86 и использую 32-битную версию cxFreeze (самую последнюю) в Windows 7.

У меня проблемы с поиском этой проблемы. Во-первых, каталог "C:\Python\32-bit..." не существует на моем компьютере, поэтому мне непонятно, почему cxFreeze пытается туда заглянуть. Кто-нибудь знает, как подойти к этому, или, возможно, уже имел дело с этой проблемой?


person Sergiy    schedule 08.03.2014    source источник


Ответы (1)


Немного покопавшись, я смог решить проблему. Для тех, кто может столкнуться с той же проблемой, вот что решило ее для меня:

Что касается проблемы с matplotlib: мне просто нужно было явно указать cxFreeze, чтобы он включал matplotlib.backends.backend_tkagg. Мой установочный файл в итоге выглядел так:

import sys
from cx_Freeze import setup, Executable
packages = ['matplotlib.backends.backend_tkagg']

setup(
    name = "myname",
    version = "1.0",
    description = "some description",
    options = {'build_exe': {'packages':packages}},
    executables = [Executable("test.py", base = None)]    
)

Что касается проблемы BeautifulSoup: в Интернете есть несколько сообщений, посвященных этой проблеме: cx_freeze sre_constants.error повторять нечего, https://bitbucket.org/anthony_tuininga/cx_freeze/issue/59/sre_constantserror-nothing-to-repeat. Соответствующий вывод: что-то не так со сборкой cxFreeze 4.3.2, которая вызывает эту проблему. Я просто использовал cxFreeze 4.3.1 для создания своего приложения, и проблема была решена. Также возможно восстановить 4.3.2 локально и решить проблему, но я не пробовал это решение.

person Sergiy    schedule 10.03.2014
comment
+1 Вам также потребуется явно включить файлы данных matplotlib, если вы хотите использовать панели инструментов по умолчанию и т. д. По сути, вы хотите иметь ключ/значение "include_files":[(matplotlib.get_data_path(), "mpl-data") в дополнение к 'packages' в build_exe. Не слишком сильно включать мой собственный ответ, но если это поможет, см.: stackoverflow.com/questions/22021297/ - person Joe Kington; 10.03.2014