1733
Comment: YES! it works
|
3215
|
Deletions are marked like this. | Additions are marked like this. |
Line 35: | Line 35: |
= Update for newer versions of matplotlib = Recent versions of matplotlib (this is tested with 0.87) have changed the location where data files are found. Here is a sample setup.py that works with simple matplotlib samples. It produces massive distributions - more work needs to be done on how to exclude unused backends. {{{ #!python from distutils.core import setup import py2exe from distutils.filelist import findall import os import matplotlib matplotlibdatadir = matplotlib.get_data_path() matplotlibdata = findall(matplotlibdatadir) matplotlibdata_files = [] for f in matplotlibdata: dirname = os.path.join('matplotlibdata', f[len(matplotlibdatadir)+1:]) matplotlibdata_files.append((os.path.split(dirname)[0], [f])) setup( console=['test.py'], options={ 'py2exe': { 'packages' : ['matplotlib', 'pytz'], } }, data_files=matplotlibdata_files ) }}} = Updating _sort confusion = If you're using numarray and numpy together, be aware that they both have a _sort, and py2exe gets them confused. After py2exe creates the dist directotry, copy numpy/core/_sort.pyd and numarray/sort.pyd to their respective locations in the dist. If you get an error that numarray module has no functionDict in numarraycore.py at line 176, then you'll know that py2exe confused the _sort modules that are in both numpy and numarray and need to do this step. |
Introduction
[http://matplotlib.sf.net MatPlotLib] is a module to produce nice-looking plots in Python using a wide variety of back-end packages, at least one of which is likely to be available for your system. This ability to do things in a generic fashion makes this a simple system to use, but it gets complicated if you wish to distribute an executable instead of scripts. This page describes what I had to do to make matplotlib work with py2exe.
Special content for setup.py to use matplotlib
1 # We need to import the glob module to search for all files.
2 import glob
3
4 # We need to exclude matplotlib backends not being used by this executable. You may find
5 # that you need different excludes to create a working executable with your chosen backend.
6 # We also need to include matplotlib.numerix.random_array
7 opts = {
8 'py2exe': { 'includes': 'matplotlib.numerix.random_array',
9 'excludes': ['_gtkagg', '_tkagg'],
10 'dll_excludes': ['libgdk-win32-2.0-0.dll',
11 'libgobject-2.0-0.dll']
12 }
13 }
14
15 # Additional data files are required by matplotlib. Note that the glob.glob routine
16 # doesn't seem to pick up the .matplotlib resource file, so I copy that separately.
17 # Do the same if you need to
18 setup(
19 data_files = [(r'matplotlibdata', glob.glob(r'c:\python24\share\matplotlib\*')),
20 (r'matplotlibdata', [r'c:\python24\share\matplotlib\.matplotlibrc'])],
21 name = 'demo',
22 description = 'MatPlotLib Demo Program',
23 console = ['demo.py']
24 )
Copying PyTZ folder
Now copy pytz folder from C:\Python24\Lib\site-packages to your dist/ folder and you're done!
Update for newer versions of matplotlib
Recent versions of matplotlib (this is tested with 0.87) have changed the location where data files are found. Here is a sample setup.py that works with simple matplotlib samples. It produces massive distributions - more work needs to be done on how to exclude unused backends.
1 from distutils.core import setup
2 import py2exe
3
4 from distutils.filelist import findall
5 import os
6 import matplotlib
7 matplotlibdatadir = matplotlib.get_data_path()
8 matplotlibdata = findall(matplotlibdatadir)
9 matplotlibdata_files = []
10 for f in matplotlibdata:
11 dirname = os.path.join('matplotlibdata', f[len(matplotlibdatadir)+1:])
12 matplotlibdata_files.append((os.path.split(dirname)[0], [f]))
13
14
15 setup(
16 console=['test.py'],
17 options={
18 'py2exe': {
19 'packages' : ['matplotlib', 'pytz'],
20 }
21 },
22 data_files=matplotlibdata_files
23 )
Updating _sort confusion
If you're using numarray and numpy together, be aware that they both have a _sort, and py2exe gets them confused. After py2exe creates the dist directotry, copy numpy/core/_sort.pyd and numarray/sort.pyd to their respective locations in the dist.
If you get an error that numarray module has no functionDict in numarraycore.py at line 176, then you'll know that py2exe confused the _sort modules that are in both numpy and numarray and need to do this step.