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.
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 ======== 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 ) ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel