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

Déploiement/Installation Python Discussion :

inno, cx_freeze, matplotlib data files


Sujet :

Déploiement/Installation Python

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Points : 18
    Points
    18
    Par défaut inno, cx_freeze, matplotlib data files
    Bonjour,

    J'ai créé un exécutable à partir de cx_freeze sur du code python. Il fonctionne correctement. J'ai voulu ensuite créer un fichier d'installation avec INNO. Tout se passe très bien jusqu'à ce que je le lance, une fois le programme installé. J'obtiens alors l'erreur :

    "RuntimeError: Could not find the matplotlib data files: "
    voir l'image de fenetre DOS jointe :
    Nom : inno_erreur.png
Affichages : 387
Taille : 18,9 Ko

    J'ai cherché assez longuement sur internet mais je ne trouve rien de décisif pour le moment.

    Je suis revenu au fichier setup.py de cx_freeze. Voici son contenu:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    # Python 2.7
    # 02/2011
     
    import sys, os
    from cx_Freeze import setup, Executable
    import matplotlib
     
    #############################################################################
    # préparation des options
     
    # chemins de recherche des modules
     
    path='D:\\IceSat\\tests\\test_executable\\test_GLASDataExtraction'
     
    if os.path.exists(path):
        print "exist"
     
    if path in sys.path:
        print "OK"
    else:
        print "insert"
        sys.path.append(path)
     
     
    path = sys.path + ["package_interface", "package_traitement"]
     
    ##build_exe_options = { 'packages': ['scipy'],
    ##                     "include_files": [('C:\\Python27\\Lib\\site-packages\\scipy\\special\\_ufuncs.pyd','_ufuncs.pyd')]}
     
     
    # options d'inclusion/exclusion des modules
    ##includes = ["sip", "matplotlib"]
    includes = ["sip"]
    ##excludes = ["tk","tcl"]
    excludes = []
    ##packages = ["scipy", "scipy.signal", "scipy.special", "matplotlib", "matplotlib.mpl-data"]
    ##packages = ["scipy", "scipy.signal", "scipy.special", "matplotlib",  "matplotlib.backends"]
    ##packages = ["scipy", "scipy.signal", "scipy.special", "matplotlib"]
    packages = ["scipy", "scipy.signal", "scipy.special"]
    ##packages = ["scipy", "scipy.signal", "scipy.special", "matplotlib", "matplotlib.backends", "matplotlib.mpl-data"]
     
     ### construction du dictionnaire des options
    options = {"path": path,
               "includes": includes,
               "excludes": excludes,
               "packages": packages,
    ##           "include_files": includefiles,
               "include_files":[(matplotlib.get_data_path(),"mpl-data")]
    ##           "include_files":[(matplotlib.get_data_path(),"HDE")]
    ####           "include_files":[matplotlib.get_data_path(),"C:\\Python27\\Lib\site-packages\\matplotlib\\mpl-data"]
    ##           "bin_path_includes": binpathincludes
               }
     
     
    # création du setup
    setup(
        name = "GLASDataExtraction",
        version = "1",
        description = "Extraction et analyse de data GLAS",
        author = "Henri",
        options = {"build_exe": options},
    ##    executables = [cible_1]
        executables=[Executable("main.py")]
        )

    J'ai mis beaucoup de choses en commentaires dans mon fichier, car j'ai testé différentes options, je cherche la version la plus simple qui n'impacte pas le contenu du build créé.

    Dans mon répertoire exe... contenu dans le build créé par cx_freeze , j'ai le fichier library.zip avec entre autres packages matplotlib, mais pas mpl-data qui ne semble pas être un package de matplotlib (il n'existe pas de __init__.py pour mpl-data). J'ai aussi d'autres fichiers .pyd et 4 répertoires: imageformats, mpl-data, tcl, tk. mpl-data est donc bien présent avec son contenu.

    Puis je créé mon fichier d'installation avec INNO et je lance l'installation sur Program Files (x86). Le répertoire de mon programme est créé là avec quelques répertoires et pas mal de fichiers, dont ceux de mpl-data.

    Quand je lance ensuite mon application j'ai donc le message d'erreur:

    "RuntimeError: Could not find the matplotlib data files".

    Il y a beaucoup de référence à cette erreur en ce qui concerne py2exe mais rien en ce qui concerne cx_freeze.

    Pourriez-vous m'aider s'il vous plait ? Merci !

    ma configuration :
    WINDOWS 7 64 bits
    python 2.7 64 bits
    cx_freeze 4.3.3
    inno 5.5.5
    pyqt4

  2. #2
    Expert éminent

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Points : 8 442
    Points
    8 442
    Par défaut
    Salut,

    J'ai deja eu ce genre d'erreur, mais c'était lié à mes icones (message: "...zip...").

    Je n'ai personnellement jamais trouvé l'origine de mes ennuis. Pour l'instant, je me contente de ne plus mettre d'icone, en attendant de recoder mon soft.

    Quand tu as la solution, pourrais tu ajouter un lien vers ce fil sur la discussion: http://www.developpez.net/forums/d13...reeze-windows/

    C'est un post que j'avais ouvert pour centraliser ce qui concerne cx_freeze. Merci.

    Concernant ton erreur, on voit que le soucis est clairement lié au chemin d'accès. Il faut savoir que realiser un exe avec cx_freeze effectue ce qu'on appelle un ..."freeze". Du coup, la façon de concevoir le chemin n'est plus le même. Pour cette raison, j'ai créé un petit script (dispo dans le lien que je t'ai donné plus haut) qui permet d'obtenir le chemin correct quel que soit l'OS, et surtout, sous Windows, selon le cas ou on freeze ou non.

    Essaie d'integrer cette section de code dans ton soft et reessaie pour voir.
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quelques idées sur le sujet.

    - Concernant l'erreur après traitement par innosetup: je suis très étonné de cette erreur: innosetup a dû travailler uniquement sur la version exe "standalone" du programme, et il n'y a vraiment aucune raison que pendant l'exécution du programme installé, il aille encore chercher des infos dans le C:\Python27. Il y a manifestement un problème de construction avec cx_freeze: il ne devrait plus y avoir de relation avec le Python installé.

    - En ce qui me concerne, j'utilise un setup.py assez complet que je fais évoluer au fur et à mesure de mes applications. J'ai mis à jour mon tuto récemment concernant Windows et PyQt4: http://python.jpvweb.com/mesrecettes..._pyqt4_windows.

    - Concernant library.zip: dans mon setup.py, je désactive systématiquement cette possibilité parce que j'ai déjà rencontré des problèmes avec. Quand en particulier un module appelle un fichier non-py (une icône par exemple) dans le même répertoire, ça ne marche pas parce qu'en passant dans le library.zip, le chemin d'accès devient faux.

    - Concernant les icônes: il faut bien distinguer:
    ==> l’icône qui est chargé par PyQt4 pour être affichée dans la fenêtre: elle doit être recopiée par l'option "include_files" parce que cx_freeze ne recopie automatiquement que les fichiers python.
    ==> et l’icône qui est chargé dans l'exe: elle doit être mentionnée dans l'option "icon=..." de l'executable.

    - Concernant les icônes encore: quand on a un programme comportant une 1ère fenêtre qui en appelle beaucoup d'autres, il est plus simple de dire au lancement de cette 1ère fenêtre que toutes les fenêtres du programmes devront avoir la même icône. On fait ça avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon('icone.png'))
    ...
    - Concernant les programmes PyQt4: il est important de demander à cx_freeze dans le setup.py la recopie des informations de traduction ainsi que des plugins avec "include_files", et d'en tenir compte dans le code Python (voir mon tuto)

    - Concernant le choix des versions 64 bits: quand on prend Python 64bits, il est important de n'y ajouter que des modules externes 64 bits. A noter que la version Python 32 bits fonctionne très bien sur Windows 64 bits.

    [Edit] et pour se débarrasser des problèmes de chemin d'accès à des petites images comme les icônes, il y a un moyen radical: les intégrer au code source. Si ça intéresse quelqu'un, je peux développer.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2011
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 22
    Points : 18
    Points
    18
    Par défaut changement du code iss de inno pour l'import de mpl-data de matplotlib
    Deusyss et Tyrtamos, merci pour vos posts !
    J'ai mis le problème en résolu car j'ai trouvé une solution qui me convient :
    dans le fichier iss de Inno, j'ai, pour l'import de mpl-data :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \build\exe.win-amd64-2.7\mpl-data\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
    et si je précise mpl-data dans le DestDir, j'obtiens le même chemin relatif entre l'exe du freeze et les fichiers de mpl-data pour le freeze et pour l'installation après inno :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \build\exe.win-amd64-2.7\mpl-data\*"; DestDir: "{app}\mpl-data\"; Flags: ignoreversion recursesubdirs createallsubdirs
    Et ça marche.
    Deusyss as-tu tenté cette manip pour tes icones ?
    A noter que je n'ai pas de soucis à mettre mes fichiers .py dans des packages, contrairement à ce que tu écris dans tonn billet deusyss (si j'ai bien compris) :
    " il est apparus que les fichiers python devaient se situés à la racine du dossier projet pour ne pas poser probleme. "
    Dans mon setup de cx_freeze 'ai ajouté deux répertoires dans mon path dans lesquels j'ai mis mes fichiers .py , ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    path = sys.path + ["package_interface", "package_traitement"]
    Je retrouve ces deux répertoires dans library.zip après cx_freeze . Mais bon, je n'appelle pas de fichier autre que .py dedans, alors ça marche (référence à ce qu'a écrit Tyrtamos).
    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie Data File Raw Device --> File en Aix 5.3 / 9i
    Par Merilka dans le forum Administration
    Réponses: 4
    Dernier message: 12/09/2007, 11h48
  2. [SQL Server] - Organisation des Data Files
    Par nicolas23 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/05/2007, 18h29
  3. ORA-01110: data file
    Par david_12 dans le forum Oracle
    Réponses: 2
    Dernier message: 02/04/2007, 16h53
  4. Réponses: 2
    Dernier message: 30/08/2005, 14h11
  5. Problème d'index avec load data file
    Par bruno782 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/03/2005, 12h11

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