【发布时间】:2011-01-24 22:13:31
【问题描述】:
我正在尝试使用依赖于 matplotlib 和 numpy 的 py2exe 创建一个独立的应用程序。应用程序的代码是这样的:
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 文件,该文件必须捆绑所有内容,但无法在本地运行或分发。在这种情况下,我正在使用 Python 2.6.6 的 Windows 7 机器上创建所有内容,并尝试在本地和安装了 Python 2.6.4 的 XP 机器上运行。
我在 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
如果有人能指出可以解决此问题的方向,请提前非常感谢!
编辑 1:
我按照 William 的建议修复了 MPLCONFIGDIR 的问题,但现在得到一个新错误:
:Traceback (most recent call last):
File "matplotlib\__init__.pyc", line 479, in _get_data_path
RuntimeError: Could not find the matplotlib data files
编辑 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
【问题讨论】:
标签: python matplotlib py2exe