j'utilise python2.4 et matplotlib 0.90
j'ai déjà réalisé avec succès des executables avec py2exe de programmes en python.

Le pb vient lorsque je veux faire un executable d'un programme faisant appel à la bibliothèque 'matplotlib'.
soit par exemple le programme 'camembert1' suivant qui trace deux "camemberts" pour des statistiques:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#programme camembert1
from pylab import *
 
figure(1, figsize=(10,10)) #taille de la figure 1 qui contient le camembert: 10 * 10 cm
ax = axes([0, 0, 0.5, 0.5])# on place les axes en bas à gauche (0,0)
 
figtext(0.8,0.8,'titre general',color='r',size='16',rotation=45)#coordonnées relatives en %
 
labels = 'Figures reussies', 'Figures mal maitrisees', 'Figuresnonreussies','possible'
part1=60; part2=60; part3=120; part4=20
fracs = [part1,part2,part3,part4]
title('titre1', fontsize=20)
figure(1)
pie(fracs, labels=labels)
 
figure(1, figsize=(10,10))
ax = axes([0.6, 0, 0.2, 0.2]) # on va placer l'axe à 60 % de la largeur de page
title('titre2', fontsize=20)
 
explode=(0.08, 0.05, 0.05, 0.05) #on présente le camembert explosé avec espace
pie(fracs, explode=explode, labels=labels,autopct='%1.2f%%', shadow=True)
savefig('pie_demo') #on sauvegarde au format bmp l'image du camembert
show()
-------------------------------------------
je veux faire un camembert1.exe qui fonctionne

1) essai avec setup.py contenant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
#setup.py
from distutils.core import setup
import py2exe
setup(windows=["camembert1.py"])
py2exe génère bien un fichier exe dans le répertoire dist mais il y a
une erreur lorsque je lance l'exe. le fichier log créé mentionne:

Traceback (most recent call last):
File "camembert1.py", line 3, in ?
File "pylab.pyc", line 1, in ?
File "matplotlib\__init__.pyc", line 729, in ?
File "matplotlib\__init__.pyc", line 273, in wrapper
File "matplotlib\__init__.pyc", line 360, in _get_data_path
RuntimeError: Could not find the matplotlib data files

Il n'arrive donc pas à trouver les data files.
j'ai rechargé 'matplotlib' ainsi que 'numpy' pour vérifier si ce n'était pas un pb d'installation.
Mêmes messages d'erreur en lançant le nouvel executable
Je précise que j'ai procédé à l'instatallation standard sous :
C : Python24 des différents packages.
et je suis sous windows Xp.

j'ai cherché sur le net et le site :
http///www.py2exe.org/index.cgi/MatPlotLib
Ce site mentionne bien le pb d'une incompatibilité entre Py2exe et Matplotlib.
J'ai essayé les solutions proposées:

1) modification de mon setup.py en:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
from distutils.core import setup
import py2exe
import matplotlib
setup(
    console=['camembert1.py'],
    options={
             'py2exe': {
                        'packages' : ['matplotlib', 'pytz'],
                       }
            },
    data_files=[matplotlib.get_py2exe_datafiles()]
)
Résultat:
impossible de générer d'executable
Détail: en mode dos (invite de commande) je tape:
C:\Python24>python setup.py py2exe <-ce que je tape

ce que j'obtiens en mode 'invite de commande' comme réponse:
Traceback<most recent call last>:
File setup.py", line 12, in ?
data_files=[matplotlib.get_py2exe_datafiles<>]
Files "C:\Python24\Lib\site-packages\matplotlib\__init__.py", line 369, in get__
py2exe_datafiles
mplfiles.remove(os.sep.join([get_data_path(),'Matplotlib.nib']))
ValueError: list.remove(x): x not in list
si j'essaye de mettre dans le setup.py:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from distutils.core import setup
import py2exe
 
from distutils.filelist import findall
import os
import matplotlib
matplotlibdatadir = matplotlib.get_data_path()
matplotlibdata = findall(matplotlibdatadir)
matplotlibdata_files = []
for f in matplotlibdata:
    dirname = os.path.join('matplotlibdata', f[len(matplotlibdatadir)+1:])
    matplotlibdata_files.append((os.path.split(dirname)[0], [f]))
 
 
setup(
    console=['camembert1.py'],
    options={
             'py2exe': {
                        'packages' : ['matplotlib', 'pytz'],
                       }
            },
    data_files=matplotlibdata_files
)
le résultat est presque parfait, mais à la fin du traitement j'obtiens un message d'erreur dans ma fenêtre dos:
*** finding dlls needed ***
error: libgdk-win32-2.0-0.dll: No such file or directory
faut il que je me procure ce fichier dll? et ou faut il le placer précisemment?

si vous avez des idées, car moi je me casse les dents sur ce pb d'executable impossible avec py2exe pour un programme python utilisant matplotlib.

Merci d'avance pour vos conseils éclairés
je précise que je suis un débutant en python, n'hésitez pas à me parler petit "nègre"