hi John,

John Henry wrote:
> Anybody willing to help?
>   
I struggled the past few days with the same problem,
and with the help of Werner Bruhin (wxPython list) I found a solution.
I had 2 problems:
  - not finding mpl datapath
  - matplotlib insisted on installing backends that were distorted on my 
system

The first problem was solved with the following script:
it has some special parts
- remove the distro and build directories before running setup
- a special matplot part, ensuring mpl-data is copied and installed
- a lot of excludes for matplotlib ( which doesn't seem to work :-( )

Kill_Distro = True
MatPlotLib_Wanted = True

from distutils.core import setup
import py2exe
import sys
subdirs = [ '..\\P24_support', '..\\P24_pictures', 
'..\\P24_Lib_Extensions' ]
for subdir in subdirs:
  if not ( subdir in sys.path) : sys.path.append ( subdir )

from file_support import *

import shutil
import glob


# ***********************************************************************
# Some suggests that old build/dist should be cleared
# ***********************************************************************
dist_paths =  [ 'D:\\Data_Python\\P24_PyLab_Works\\build',
                'D:\\Data_Python\\P24_PyLab_Works\\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' )

  data_files.append ( ( r'mpl-data', glob.glob (
    r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\*.*' )))
  data_files.append ( ( r'mpl-data', glob.glob (
    
r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\matplotlibrc' )))
  data_files.append ( ( r'mpl-data\\images', glob.glob (
    r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\images\\*.*' )))
  data_files.append ( ( r'mpl-data\\fonts\\afm', glob.glob (
    
r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\fonts\\afm\\*.*' )))
  data_files.append ( ( r'mpl-data\\fonts\\pdfcorefonts', glob.glob (
    
r'P:\\Python\\Lib\\site-packages\\matplotlib\\mpl-data\\fonts\\pdfcorefonts\\*.*'
 
)))
  data_files.append ( ( r'mpl-data\\fonts\\ttf', glob.glob (
    
r'P:\\Python\\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 = ['PyLab_Works.py']  ,
  options = {
   'py2exe' : {
      'includes'     : includes,
      'excludes'     : excludes,
      'dll_excludes' : dll_excludes,
      'packages'     : packages,
               }},
  data_files = data_files
      )

import subprocess
result = subprocess.call (
  [ 'P:\Program Files\Inno Setup 4\ISCC.exe',
    'D:\Data_Python\P24_PyLab_Works\PyLab_Works.iss'])

if (result==0) and Kill_Distro :
  for path in dist_paths :
    if File_Exists ( path ) :
      shutil.rmtree ( path )


Thé essential issue is not to use pylab to do the imports for you,
but perform your own imports,
this might be a lot of work: in my case the import looks like this
(I don't include numerix, because I use numpy),
so in my program to distribute, I use this :

import matplotlib
matplotlib.use('WXAgg')
from matplotlib.backends.backend_wxagg \
  import Toolbar,  FigureManager
from matplotlib.backends.backend_wxagg \
  import FigureCanvasWxAgg as FigureCanvas
from matplotlib        import rcParams, mlab, cm
from matplotlib.mlab   import meshgrid
from matplotlib.figure import Figure
from matplotlib.axes   import Subplot


hope this might help you somewhat,
cheers,
Stef
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to