IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Py2exe Python Discussion :

[Matplotlib] Pb entre Matplotlib et py2exe


Sujet :

Py2exe Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 12
    Points : 11
    Points
    11
    Par défaut [Matplotlib] Pb entre Matplotlib et py2exe
    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"

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ohtoulouse Voir le message
    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:




    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:

    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:


    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"
    Moi j'ai eu un problème similaire avec py2exe d'un programme Python qui utilisait PyQt. Comme je débute aussi j'ai pas cherché et j'ai abandonné l'idée de créer des exécutables Python.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Il vous suffit d'exclure ces DLLs problématiques.
    en pylab 0.9 ajouter par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                                 'libgdk_pixbuf-2.0-0.dll',
                                 'wxmsw26uh_vc.dll']

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 78
    Points
    78
    Par défaut
    Tu peux faire comme ceux-ci:

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    from distutils.core import setup
    import py2exe
    import sys
    import glob
     
    if len(sys.argv)==1:
        sys.argv.append("py2exe")
     
    # We need to exclude matplotlib backends not being used by this executable.  You may find
    # that you need different excludes to create a working executable with your chosen backend.
    # We also need to include include various numerix libraries that the other functions call.
     
    opts = {'py2exe': { "includes" : 
    ["matplotlib.backends","matplotlib.backends.backend_qt4agg","matplotlib.figure","pylab","numpy","matplotlib.numerix.fft","matplotlib.numerix.linear_algebra","matplotlib.numerix.random_array","matplotlib.backends.backend_wxagg"],
     
                     'excludes': ['_gtkagg', '_tkagg', '_agg2', '_cairo', '_cocoaagg',
                                  '_fltkagg', '_gtk', '_gtkcairo'],
     
                     'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                      'libgobject-2.0-0.dll'],
     
                    'compressed' : 1 ,'optimize': 2, "ascii" : 1, "bundle_files" :1,
                   }
            }
     
    # Save matplotlib-data to mpl-data ( It is located in the matplotlib\mpl-data
    # folder and the compiled programs will look for it in \mpl-data
    # note: using matplotlib.get_mpldata_info
    data_files=[(r'mpl-data',glob.glob(r'C:\Python25\Lib\site-packages\matplotlib\mpl-data\*.*')),
                         # Because matplotlibrc does not have an extension, glob does not find it (at least I think that's why)
                         # So add it manually here:
                       (r'mpl-data',[r'C:\Python25\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
                       (r'mpl-data\images',glob.glob(r'C:\Python25\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
                       (r'mpl-data\fonts',glob.glob(r'C:\Python25\Lib\site-packages\matplotlib\mpl-data\fonts\*.*')),
    ]
     
    # for console program use 'console = [{"script" : "scriptname.py"}]
    setup(name="nom",version="1.0",description="description",author="toi",windows=[{"script" : "ton_fichier.py"}], options=opts,   data_files=data_files, zipfile=None)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    J'ai actuellement le même problème que toi.
    Est ce que tu a trouvé d'ou ca vennait ?

    Cdt,
    Guillaume

Discussions similaires

  1. Probleme py2exe avec matplotlib
    Par HelloThury dans le forum Py2exe
    Réponses: 5
    Dernier message: 19/02/2015, 10h01
  2. Réponses: 0
    Dernier message: 26/08/2014, 22h25
  3. wxPython, MatPlotlib et Py2exe
    Par Ggamer dans le forum Py2exe
    Réponses: 0
    Dernier message: 27/08/2009, 09h07
  4. [matplotlib] Texte et matplotlib
    Par jkalzsmu dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 12/06/2008, 01h58
  5. wxPython + MatPlotLib + py2exe
    Par bibile dans le forum Py2exe
    Réponses: 1
    Dernier message: 05/08/2005, 23h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo