bundle_files = 1 fails with py2exe using matplotlib

I am trying to create a standalone application using py2exe that depends on matplotlib and numpy. The code of the application is this:

import numpy as np
import pylab as plt

plt.figure()
a = np.random.random((16,16))
plt.imshow(a,interpolation='nearest')
plt.show()

The setup code for py2exe (modified from http://www.py2exe.org/index.cgi/MatPlotLib) is this:

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)

Now, when bundle_files is set = 3 or is absent, all works fine, but the resulting exe cannot be distributed to a machine that is not configured with the same version of Python, etc. If I set bundle_files = 1, it creates a suitably large exe file that must have everything bundled, but it fails to run locally or distributed. In this case, I'm creating everything on a Windows 7 machine with Python 2.6.6 and trying to run locally and on an XP machine with Python 2.6.4 installed.

The errors I get when running on the XP machine seem strange since, without bundling, I get no errors on Win 7. With bundling, Win 7 does not report the traceback information, so I cannot be sure the errors are the same. In any case, here's the error message on XP:

Traceback (most recent call last):
  File "matplotlib_test.py", line 2, in 
  File "zipextimporter.pyc", line 82, in load_module
  File "pylab.pyc", line 1, in 
  File "zipextimporter.pyc", line 82, in load_module
  File "matplotlib\__init__.pyc", line 709, in 
  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

Many thanks in advance if anyone can point me in a direction that will fix this!

EDIT 1:

I followed William's advice and fixed the problem with MPLCONFIGDIR, but now get a new error:

: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: I fixed the data files problem by using:

 data_files=matplotlib.get_py2exe_datafiles()

This leads to a new error:

Traceback (most recent call last):
  File "matplotlib_test.py", line 5, in 
    import matplotlib.pyplot as plt
  File "matplotlib\pyplot.pyc", line 78, in 
  File "matplotlib\backends\__init__.pyc", line 25, in pylab_setup
ImportError: No module named backend_wxagg

5
задан mishaF 25 January 2011 в 03:15
поделиться