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 :

[pyinstaller] comment compiler un environnement python incluant des import de modules


Sujet :

Déploiement/Installation Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [pyinstaller] comment compiler un environnement python incluant des import de modules
    Bonnjour,

    j'ai besoin de compiler mon outil developpé en python afin de le faire tourner sur plusieurs plateformes (Solaris, Lunix...) sans possibilité d'installer python.

    J'ai trouvé pyinstaller et suivi le tutoriel fourni mais je n'ai pas trouvé d'information sur mon cas de figure.


    L'executable généré crash car les modules (que j'ai développé et non ceux de python) ne sont pas importé, donc probablement pas packagés.

    Le code suivant est celui du script principal.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        try:
            TOOLS_ROOT = os.environ['TOOLS_ROOT']
            sys.path.append(TOOLS_ROOT)
        except KeyError:
            print 'TOOLS_ROOT is undefined. Please set it.'
            sys.exit(1)
     
        import lib.globals
        from lib.parserLib import Architecture
        import thread
        import threading
        ...

    Voici mon arborescence fichier de mon outil

    /tool/__init__.py
    analyzer.py
    lib/__init__.py
    globals.py
    parserLib.py

    Donc quelques questions:

    - comment se passer de la déclaration de la variable d'environnement global TOOLS_ROOT qui définit le root de mon script analyzer.py ?
    Voici la sortie d'erreur de l'executable si je ne déclare pas cette variable

    vmintegration:~/pyinstaller-1.4/analyzer# ./dist/analyzer
    TOOLS_ROOT is undefined. Please set it.
    vmintegration:~/pyinstaller-1.4/analyzer#
    - comment indiquer à pyinstaller qu'il faut packager les modules importés dans mes fichier python ?
    Voici la sortied d'erreur de l'executable si je décalre TOOLS_ROOT (avec une valeur arbitraire car non utile normalement)

    vmintegration:~/pyinstaller-1.4/analyzer# export TOOLS_ROOT=`pwd`
    vmintegration:~/pyinstaller-1.4/analyzer# ./dist/analyzer
    Traceback (most recent call last):
    File "<string>", line 21, in <module>
    File "/root/pyinstaller-1.4/iu.py", line 455, in importHook
    raise ImportError, "No module named %s" % fqname
    ImportError: No module named lib
    - comment integrer des arguments à la ligne de commande si besoin est ?
    Voici la sortie d'erreur de l'executable si le TOOLS_ROOT est défini au véritable chemin de mon script et que l'executable est lancé sur ma machine de dev
    vmintegration:~/pyinstaller-1.4/analyzer# export TOOLS_ROOT=/home/stephane/tool
    vmintegration:~/pyinstaller-1.4/analyzer# ./dist/analyzer
    ERROR : Arg <opt> missing in command line ****
    Voici le contenu du fichier warnlogs si cela peut aider.
    W: no module named AES (delayed, conditional import by archive)
    W: no module named sgi (delayed import by pty)
    W: no module named lib (top-level import by __main__)
    W: no module named report (top-level import by __main__)
    W: no module named org (top-level import by copy)
    W: no module named _emx_link (conditional import by os)
    W: __all__ is built strangely at line 0 - __future__ (/usr/lib/python2.5/__future__.pyc)
    W: delayed __import__ hack detected at line 0 - encodings (/usr/lib/python2.5/encodings/__init__.pyc)
    W: delayed __import__ hack detected at line 0 - optparse (/usr/lib/python2.5/optparse.pyc)
    W: delayed eval hack detected at line 0 - os (/usr/lib/python2.5/os.pyc)
    W: __all__ is built strangely at line 0 - tokenize (/usr/lib/python2.5/tokenize.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (/root/pyinstaller-1.4/iu.pyc)
    W: delayed conditional exec statement detected at line 0 - iu (/root/pyinstaller-1.4/iu.pyc)
    W: delayed eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed conditional eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed conditional eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed conditional eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed conditional eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed conditional eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed conditional eval hack detected at line 0 - __main__ (/home/stephane/python/script/analyzer.py)
    W: delayed eval hack detected at line 0 - gettext (/usr/lib/python2.5/gettext.pyc)
    W: delayed conditional eval hack detected at line 0 - warnings (/usr/lib/python2.5/warnings.pyc)
    W: delayed conditional __import__ hack detected at line 0 - warnings (/usr/lib/python2.5/warnings.pyc)
    Voici l contenue de mon fichier .spec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # -*- mode: python -*-
    a = Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), '/home/stephane/python/script/analyzer.py'],
    pathex=['/root/pyinstaller-1.4'])
    pyz = PYZ(a.pure)
    exe = EXE( pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    name=os.path.join('dist', 'analyzer'),
    debug=False,
    strip=False,
    upx=True,
    console=1 )

    merci d'avance pour votre aide.
    J'ai lu pas mal de documentation sur pyinstaller mais rien de très clair qui me permettre de résoudre mon soucis.

    Cordialement

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 327
    Points : 257
    Points
    257
    Par défaut
    Bonjour,

    Désolé mais je ne pourrai pas règler votre probleme car je ne connais pas trop pyinstaller, en revanche, si cela peut vous avancer, si vous cherchez seulement a créer un système portable, cxFreeze est franchement pas mal

    Bon courage à vous...

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

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    j'ai donc basculer sur cx-freeze pour essayer.

    J'ai installer cx-freeze
    j'ai ensuite créer un fichier setup.py que j'ai placé dans mon repertoire /tools/

    Pour rappel, voici mon arborescence

    /tool/__init__.py
    analyzer.py

    lib/__init__.py
    globals.py
    parserLib.py

    report/
    ...
    ...

    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
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
    import sys, os
    from cx_Freeze import setup, Executable
    #############################################################################
    # preparation des options
    path = sys.path
    path.append(os.path.join("..", "lib"))
    path.append(os.path.join("..", "report"))
    includes = ["argParser", "globals", "parserLib", "utils", "csvAccess", "reportAccess", "htmlAccess", "mailAccess"]
    excludes = []
    packages = []
    options = {"path": path,
               "includes": includes,
               "excludes": excludes,
               "packages": packages
               }
    #############################################################################
    # preparation des cibles
    base = None
    if sys.platform == "win32":
        base = "Win32GUI"
    cible_1 = Executable(
        script = "analyzer.py",
        base = base,
        compress = True,
        icon = None,
        )
    #############################################################################
    # creation du setup
    setup(
        name = "test_cx_freeze",
        version = "0.1",
        description = "simple test de cx_freeze avec PyQt4",
        author = "Tyrtamos",
        options = {"build_exe": options},
        executables = [cible_1]
        )

    dans mon script je fais des import type from lib.globals...utilisant les fichiers __init__.py pour transformer mes repertoire en module.

    Lorsque je lance le setup.py build j'ai des erreurs et surtout j'ai toujours les même problématique lorsque je démarre mon script

    ...
    m unicodedata /usr/lib/python2.5/lib-dynload/unicodedata.so
    m urllib /usr/lib/python2.5/urllib.py
    m urlparse /usr/lib/python2.5/urlparse.py
    m utils ../lib/utils.py
    m uu /usr/lib/python2.5/uu.py
    m warnings
    m zipimport
    m zlib /usr/lib/python2.5/lib-dynload/zlib.so

    Missing modules:
    ? _md5 imported from hashlib
    ? _sha imported from hashlib
    ? _sha256 imported from hashlib
    ? _sha512 imported from hashlib
    ? email.MIMEImage imported from htmlAccess
    ? email.MIMEMultipart imported from mailAccess
    ? email.MIMEText imported from mailAccess
    ? lib.argParser imported from globals
    ? report.mailAccess imported from htmlAccess
    ...

    j'ai copié tout le contenu du repertoire crée build/exe.linux-i686-2.5 dans /tmp pour faire un test et j'ai les résultats suivants

    vmintegration:/tmp# ./analyzer
    TOOLS_ROOT is undefined. Please set it.

    vmintegration:/tmp# export TOOLS_ROOT='fake_value'
    vmintegration:/tmp# ./analyzer
    Traceback (most recent call last):
    File "/usr/lib/python2.5/site-packages/cx_Freeze/initscripts/Console.py", line 27, in <module>
    exec code in m.__dict__
    File "analyzer.py", line 21, in <module>
    ImportError: No module named lib.globals
    vmintegration:/tmp#
    Comment faire pour ne pas avoir à déclarer ma variable TOOLS_ROOT utilisé en mode python normal ?

    Pourquoi n'integre t'il pas mes module ?

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 466
    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 466
    Points : 9 258
    Points
    9 258
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Pour l'intégration des modules inclus dans des packages, peut-être faudrait-il essayer de citer les packages eux-mêmes dans l'option 'packages'. Extrait de la notice:

    list of names of packages to include, including all of the package's submodules
    Le script est-il uniquement 'console' ou y a-t-il du graphique?

    Tyrtamos
    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

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/01/2011, 11h16
  2. Réponses: 1
    Dernier message: 02/04/2009, 16h10
  3. Comment compiler des packages
    Par Z3phur dans le forum Administration
    Réponses: 2
    Dernier message: 22/12/2008, 16h34
  4. Réponses: 6
    Dernier message: 02/01/2008, 14h35
  5. Comment compiler avec javac des jar sans utiliser -cp
    Par Battosaiii dans le forum Langage
    Réponses: 7
    Dernier message: 06/10/2006, 17h03

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