For the record, here is what I'm using to wrap matplotlib in py2exe.
Since I'm using the wx backend I've excluded Tkinter.
Since numerix uses __import__, py2exe wasn't clever enough to find the
numerix extensions, and had to be listed explicitly. Similarly
for backends.
I'm not picking up the 14Mb of timezone info that I don't need. Maybe
want packages = ['pytz'] if your applications need it.
I haven't addressed mpl-data yet.
- Paul
myapp.py
···
On Tue, Oct 02, 2007 at 10:42:13AM -0400, Paul Kienzle wrote:
As I was building a py2exe distribution of matplotlib, I noticed the
function get_py2exe_datafiles() in __init__.py that is not noted on
the FAQ. Before I update the FAQ, can you all tell me your best
practices recommendations for wrapping matplotlib?In particular, is there a way I can store the matplotlib data directly
in the exe so that install is simply a matter of copying an exe file
rather than a whole directory?Technically this should be feasible --- freetype can load fonts
from memory or directly from the zip file given the proper driver,
and the various images should be similarly readable.
========
import pylab
pylab.plot(range(10),range(10))
pylab.show()
setup.py
from distutils.core import setup
import sys, os, py2exe
# data_files: List of datafiles that need to be explicitly included
# e.g., [('target/relative/path', ['file','list'])]
# excludes: List of modules to exclude (takes precedence over includes)
# dll_excludes: List of dlls to exclude
# includes: List of modules to include
# packages: List of packages to include
data_files =
excludes = [ 'numarray', 'Numeric', 'Tkinter', ]
dll_excludes = # dlls to exclude
includes = [ 'matplotlib', 'wx', 'numpy', ]
packages = # May want 'wx' in packages if creating a generic environment
# Explicit package rules
if 'matplotlib' in includes:
import matplotlib
data_files += matplotlib.get_py2exe_datafiles()
includes += ['matplotlib.numerix.'+pkg for pkg in
['ma','mlab','fft','linear_algebra','npyma','random_array']]
includes += ['matplotlib.backends.backend_'+pkg for pkg in
['wx','wxagg','pdf','ps','svg','agg','agg2','emf']]
# Don't include anything explicitly excluded
includes = [x for x in includes if x not in excludes]
# Include the C/C++ runtime (there should be a way of putting these beside
# the python dll in the executable, but for now I put them in the executable
# directory. Note: the C++ runtime might be in the wx package instead of the
# python directory.
pythonpath = os.path.dirname(sys.executable)
c_runtime = pythonpath+"/MSVCR71.DLL"
cpp_runtime = pythonpath+"/MSVCP71.DLL"
data_files += [('.',[c_runtime,cpp_runtime])]
# End of configuration
py2exe_opts = dict(includes=includes, excludes=excludes,
skip_archive=0, compressed=1,
dll_excludes=dll_excludes, packages=packages,
bundle_files=1, optimize=2)
setup(
options = dict(py2exe=py2exe_opts),
windows= ['myapp.py'], # Could be console=, depending on your app
data_files = data_files,
#zipfile = None, # Bundle library.zip with the executable
)