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: matplotlib-users@lists.sourceforge.net
> 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
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to