bundle_files = 1使用matplotlib使用py2exe失败

mis*_*haF 5 python py2exe matplotlib

我正在尝试使用依赖于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()
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

现在,当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
Run Code Online (Sandbox Code Playgroud)

非常感谢,如果有人能指出我将解决这个问题的方向!

编辑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
Run Code Online (Sandbox Code Playgroud)

编辑2:我通过使用以下方法修复了数据文件问题:

 data_files=matplotlib.get_py2exe_datafiles()
Run Code Online (Sandbox Code Playgroud)

这会导致新的错误:

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
Run Code Online (Sandbox Code Playgroud)

Wil*_*iam 1

好吧,Misha Fienen,我想它似乎无法写入您的用户文件夹,您可能已经知道了。只是在黑暗中刺探,但您是否尝试过测试如果您遵循建议并将 MPLCONFIGDIR 更改为更基本的内容(例如“C:\matlibplotcfg\”)会发生什么?