Я пытаюсь создать автономное приложение с использованием py2exe, которое зависит от matplotlib и numpy. Код приложения заключается в следующем:bundle_files = 1 с помощью py2exe с использованием matplotlib
import numpy as np
import pylab as plt
plt.figure()
a = np.random.random((16,16))
plt.imshow(a,interpolation='nearest')
plt.show()
код py2exe (модифицированный из http://www.py2exe.org/index.cgi/MatPlotLib) установки заключается в следующем:
from distutils.core import setup
import py2exe
import sys
sys.argv.append('py2exe')
opts = {
'py2exe': {"bundle_files" : 3,
"includes" : [ "matplotlib.backends",
"matplotlib.backends.backend_qt4agg",
"pylab", "numpy",
"matplotlib.backends.backend_tkagg"],
'excludes': ['_gtkagg', '_tkagg', '_agg2',
'_cairo', '_cocoaagg',
'_fltkagg', '_gtk', '_gtkcairo', ],
'dll_excludes': ['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll']
}
}
setup(console=[{"script" : "matplotlib_test.py"}],
zipfile=None,options=opts)
Теперь, когда bundle_files установлен = 3 или отсутствует, все работает отлично , но полученный exe не может быть распределен на машине, которая не настроена с той же версией Python и т. д. Если я устанавливаю bundle_files = 1, он создает достаточно большой exe-файл, который должен иметь все в комплекте, но он не запускается локально или распределены. В этом случае я создаю все на машине под управлением Windows 7 с Python 2.6.6 и пытаюсь запустить локально и на машине XP с установленным Python 2.6.4.
Ошибки, которые я получаю при запуске на машине XP, кажутся странными, поскольку без связывания я не получаю ошибок в Win 7. С пакетом Win 7 не сообщает информацию о трассировке, поэтому я не могу быть уверен, что ошибки одна и та же. В любом случае, здесь сообщение об ошибке на XP:
Traceback (most recent call last):
File "matplotlib_test.py", line 2, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "pylab.pyc", line 1, in <module>
File "zipextimporter.pyc", line 82, in load_module
File "matplotlib\__init__.pyc", line 709, in <module>
File "matplotlib\__init__.pyc", line 627, in rc_params
File "matplotlib\__init__.pyc", line 565, in matplotlib_fname
File "matplotlib\__init__.pyc", line 240, in wrapper
File "matplotlib\__init__.pyc", line 439, in _get_configdir
RuntimeError: Failed to create C:\Documents and Settings\mnfienen/.matplotlib; c
onsider setting MPLCONFIGDIR to a writable directory for matplotlib configuratio
n data
Большое спасибо заранее, если кто-нибудь может мне точку в направлении, которое будет исправить это!
EDIT 1:
Я последовал совету Уильяма и исправили проблему с MPLCONFIGDIR, но теперь получить новую ошибку:
:Traceback (most recent call last):
File "matplotlib\__init__.pyc", line 479, in _get_data_path
RuntimeError: Could not find the matplotlib data files
EDIT 2: Я исправил проблему файлов данных с помощью:
data_files=matplotlib.get_py2exe_datafiles()
Это приводит к новой ошибке:
Traceback (most recent call last):
File "matplotlib_test.py", line 5, in <module>
import matplotlib.pyplot as plt
File "matplotlib\pyplot.pyc", line 78, in <module>
File "matplotlib\backends\__init__.pyc", line 25, in pylab_setup
ImportError: No module named backend_wxagg
Благодаря Уильям. Итак, я попытался изменить MPLCONFIGDIR, но это была красная селедка. Оказывается, даже базовый тест .py код не будет запускаться на машине XP без MPLCONFIGDIR, установленной в место для записи, но теперь я получаю новую ошибку. См. Редактирование в исходном вопросе выше ..... – mishaF
Похоже, что это более серьезная проблема, чем казалось сначала. Для вашей новой текущей ошибки вы можете попробовать добавить «matplotlib.backends.backend_tkagg» в свой список включений, но что-то говорит мне, что есть более простое более полное решение, плавающее вокруг =/ – William
Забавно-я попробовал поставить «matplotlib.backends.backend_tkagg «исключает, но не включает. Я согласен, подумал, там где-то есть большая рыба, чтобы жарить. – mishaF