Ok, I know what the problem is. I was using a sample
setup.py posted by Stef and in his setup, he created a
"mpl-data" subdirectory under "dist" to store all of
the data files use by matplotlib. That's why
matplotlib couldn't find it without a set statement.
After changing the name to "matplotlibdata",
everything works.
I also made changes to every one of the matplotlibrc
file I found in the installed copy of matplotlib to
invoke WXAgg - instead of TkAgg.
So for completeless, may be this will benefit other
matplotlib users, here's my py2exe script - tested
using python 2.3, latest wxpython and so forth.
Let say you wish to create an exe of the sample
multicolor.py program. Place multicolor.py in a
test\multicolor directory, and a copy of the following
script, have py2exe installed, and then just run it.
You will end up with a dist subdirectory under
test\multicolor and that's where you'll find
multicolor.exe.
#====================
Kill_Distro = True
MatPlotLib_Wanted = True
def File_Exists( path ):
res=os.path.isdir(path)
if res==True:
return res
return os.path.isfile(path)
from distutils.core import setup
import py2exe
import sys
import os
import shutil
import glob
homedir= r"E:\test\Matplotlib\multicolor"
python = r"c:\Python25" # Name of python directory
if File_Exists(python)==False:
python = r"c:\Python23" # Name of python directory
#
***********************************************************************
# Some suggests that old build/dist should be cleared
#
***********************************************************************
dist_paths = [ homedir+'\\build',
homedir+'\\dist' ]
for path in dist_paths :
if File_Exists ( path ) :
shutil.rmtree ( path )
#
***********************************************************************
#
***********************************************************************
#
***********************************************************************
data_files = []
packages = []
includes = []
excludes = []
dll_excludes = []
data_files.append ( ( '', glob.glob ( 'templates_*.*'
) ) )
#
***********************************************************************
# For MatPlotLib
#
***********************************************************************
if MatPlotLib_Wanted :
import matplotlib
includes.append ( 'matplotlib.numerix.random_array' )
packages.append ( 'matplotlib' )
packages.append ( 'pytz' )
def mpl_data_files(destpath, path):
mpl_data=[]
for x in glob.glob (path+'\\*.*' ):
if os.path.isdir(x):
mpl_data_files(destpath+'\\'+os.path.split(x)[1],
x)
elif os.path.isfile(x):
mpl_data.append(x)
data_files.append ( ( destpath, mpl_data))
mpl_data_files(r'matplotlibdata',
python+r'\Lib\site-packages\matplotlib\mpl-data')
data_files.append ( ( r'matplotlibdata', glob.glob (
python+r'\Lib\site-packages\matplotlib\mpl-data\matplotlibrc'
)))
data_files.append ( ( r'matplotlibdata\images',
glob.glob (
python+r'\Lib\site-packages\matplotlib\mpl-data\images\*.*'
)))
data_files.append ( ( r'matplotlibdata\fonts\afm',
glob.glob (
python+r'\Lib\site-packages\matplotlib\mpl-data\fonts\afm\*.*'
)))
data_files.append ( (
r'matplotlibdata\fonts\pdfcorefonts', glob.glob (
python+r'\Lib\site-packages\matplotlib\mpl-data\fonts\pdfcorefonts\*.*')))
data_files.append ( ( r'matplotlibdata\fonts\ttf',
glob.glob (
python+r'\Lib\site-packages\matplotlib\mpl-data\fonts\ttf\*.*'
)))
excludes.append ( '_gtkagg')
excludes.append ( '_tkagg' )
excludes.append ( '_agg2' )
excludes.append ( '_cairo' )
excludes.append ( '_cocoaagg' )
excludes.append ( '_fltkagg' )
excludes.append ( '_gtk' )
excludes.append ( '_gtkcairo')
excludes.append ( 'backend_qt' )
excludes.append ( 'backend_qt4')
excludes.append ( 'backend_qt4agg' )
excludes.append ( 'backend_qtagg' )
excludes.append ( 'backend_cairo' )
excludes.append ( 'backend_cocoaagg' )
excludes.append ( 'Tkconstants' )
excludes.append ( 'Tkinter' )
excludes.append ( 'tcl' )
excludes.append ( "_imagingtk" )
excludes.append ( "PIL._imagingtk" )
excludes.append ( "ImageTk" )
excludes.append ( "PIL.ImageTk" )
excludes.append ( "FixTk" )
dll_excludes.append ( 'libgdk-win32-2.0-0.dll' )
dll_excludes.append ( 'libgdk_pixbuf-2.0-0.dll' )
dll_excludes.append ( 'libgobject-2.0-0.dll')
dll_excludes.append ( 'tcl84.dll' )
dll_excludes.append ( 'tk84.dll' )
dll_excludes.append ( 'tclpip84.dll' )
#
***********************************************************************
# seems not to be found (imported in brick.py)
#includes.append ( 'PyLab_Works_properties' )
#
***********************************************************************
#
***********************************************************************
# If run without args, build executables, in quiet
mode.
if len(sys.argv) == 1:
sys.argv.append("py2exe")
setup (
windows = ['multicolor.py'] ,
options = {
'py2exe' : {
'includes' : includes,
'excludes' : excludes,
'dll_excludes' : dll_excludes,
'packages' : packages,
}
},
data_files = data_files
)
result=0
#import subprocess
#result = subprocess.call (
# [ 'c:\Program Files\Inno Setup 4\ISCC.exe',
# homedir+'\\multicolor.iss'])
dist_paths = [ homeDir+'\\build',]
if (result==0) and Kill_Distro :
for path in dist_paths :
if File_Exists ( path ) :
shutil.rmtree ( path )
> -----Original Message-----
> From: Werner F. Bruhin
[mailto:[EMAIL PROTECTED]
> Sent: Wednesday, February 20, 2008 5:24 AM
> To: [EMAIL PROTECTED]
> Cc: [email protected]
> Subject: Re: [Matplotlib-users] MatPlotLib + Py2exe,
backend problems ...
>
>
> Hi,
>
> [EMAIL PROTECTED] wrote:
> > I *finally* got this to work!!!
> >
> > Thanks to Werner's message, I found the culpit:
the
> matplotlibrc file
> > copied to the dist directory contains the TkAgg
backend.
> All I had to
> > do is to change *that* file to say:
> >
> > backend : WXAgg
> >
> > Note that it's not the matplotlibrc in the
installed
> > copy - but the one in the resulting dist
directory.
> >
> > In addition, I have to do a:
> >
> > set MATPLOTLIBDATA=.\mpl-data
> >
> You shouldn't need to do this. Note in
> matplotlib.__init__.py, it looks
> at a different folder if it is frozen by py2exe or
py2app or ...:
> # py2exe zips pure python, so still need special
check
> if getattr(sys,'frozen',None):
> path =
os.path.join(os.path.split(sys.path[0])[0],
> 'matplotlibdata')
>
> So, if you use the sample setup.py I posted a while
ago here
> and on the
> wxPython list it will create the matplotlibdata
folder in your
> distribution (basically a copy of your mpl-data
folder) folder.
> > before I start the exe file. I don't know why
this is necessary
> > because the code for _get_data_path appears to
look at that
> directory
> > by default but if I don't set this, it can't find
the data files.
> >
> > In any event, it works now - after bumping head
for 2
> > weeks!
> >
> Hope the wall wasn't to hard, I always try this or
the wxPython list
> after a day or two ;-) .
>
> See you
> Werner
>
--
John Henry
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Matplotlib-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users