Differences between revisions 16 and 18 (spanning 2 versions)
Revision 16 as of 2005-10-28 20:29:26
Size: 1844
Editor: ppp45-adsl-27
Comment: procedure does not finish happily here
Revision 18 as of 2006-02-28 06:20:09
Size: 2716
Editor: h-66-134-92-2
Comment: Updated for newer versions of matplotlib
Deletions are marked like this. Additions are marked like this.
Line 33: Line 33:
== WARNING ==
if you end up with
= 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.
Line 36: Line 41:
  File "pytz\__init__.pyo", line 53, in timezone
KeyError: 'UTC'
#!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
)
Line 39: Line 66:
in your log file then see http://sourceforge.net/tracker/index.php?func=detail&aid=1036920&group_id=79122&atid=555590

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 )

MatPlotLib (last edited 2018-10-31 15:57:34 by JimmyRetzlaff)