Speak English? Click here to read my English blog!

Créez des executables pour vos scripts python

Posté par jbj le 10 sept 2007 dans Python8 commentaires

pyInstaller est un outil permettant d'empaqueter un script python dans un exécutable. A la différence du célèbre py2exe, il est multi-plateforme et permet d'empaqueter tous les fichiers necessaires au fonctionnement dans un seul fichier binaire. Pratique pour distribuer un programme sans se soucier des modules disponibles sur le poste des utilisateurs...
Notez qu'il ne s'agit pas de la transformation d'un script python en un vrai executable. L'empaquetage n'améliorera aucunement la vitesse d'execution du script. Il s'agit simplement de regrouper script, modules et une "mini-version" de l'interpreteur python dans un seul fichier, permettant ainsi à n'importe qui d'executer votre script, même si python n'est pas installé sur votre système.

Téléchargez l'archive sur http://www.pyinstaller.org/ et décompressez là sur votre machine.
Sous Linux, assurez vous d'avoir installé les paquets python-dev et zlib1g-dev.
Executez Configure.py et déplacez-vous dans source/linux. Ensuite, executez Make.py puis la commande make.Si tout s'est bien déroulé, les bootloaders (run et run_d) auront été créés dans support/loader.

Sous windows, vous n'avez qu'à télécharger et décompresser l'archive.
Pour la suite du tuto, je considèrerais pyinstaller installé dans le répertoire /home/pyinstaller.

Choisissez un script Python qui sera votre premier script compilé avec Pyinstaller. Pour plus de confort, déplacez le dans le dossier racine de pyinstaller. Pour cet exemple, notre script à compiler s'appellera script.py

Ouvrez une console. Déplacez vous jusqu'au répertoire de pyinstaller. dans le cadre de notre exemple, cela donne: /home/pyinstaller/pyinstaller-1.3 puis Executez le script de configuration en tapant Configure.py .Vous devriez voir apparaitre ce genre de messages à l'écran:

C:pyinpyinstaller-1.3>Configure.pyI: computing EXE_dependenciesW: Cannot determine your Windows or System directoriesW: Please add them to your PATH if .dlls are not found
W: or install starship.python.net/skippy/win32/Downloads.html
I: Finding TCL/TK...
I: found TCL/TK version 8.4
I: testing for Zlib...
I: ... Zlib available
I: Testing for ability to set icons, version resources...
I: ... resource update unavailable - No module named win32api
I: Testing for Unicode support...
I: ... Unicode available
I: testing for UPX...
I: ...UPX unavailable
I: computing PYZ dependencies...

Nous allons maintenant créer le fichier spec grace au script Makespec.py.

Makespec.py accepte de nombreuses options pour la création de votre fichier exe. Les voici:

-h, --help Affiche l'aide
-F, --onefile Créer un seul fichier executable
-D, --onedir Créer l'executable sous forme d'un répertoire de plusieurs fichiers (défaut)
-w, --windowed, --noconsole Ne pas afficher la console lors de l'execution (Windows uniquement)
-c, --nowindowed, --console Afficher la console à l'execution (Windows uniquement)
-a, --ascii N'inclus PAS l'encodage unicode (Par défaut, inclus si disponible)
-d, --debug Mode verbeux.
-s, --strip Supprime le fichier exe et les libs partagées. Ne pas essayer sous Windows ;)
-X, --upx Utilise UPX si disponible.
-K, --tk Inclus TCL/TK.
-o DIR, --out=DIR Génère le fichier spec dans le répertoire spécifié.
-n NAME, --name=NAME Nom du projet. Par défaut, le nom utilisé sera celui du script.
-p DIR, --paths=DIR Définit le répertoire pour les imports (Il est possible de spécifier plusieurs répertoires en les séparant d'un point virgule ";".
-v FILE, --version=FILE Ajoute un fichier de ressource version à l'éxecutable.
--icon=FILE.ICO or FILE.EXE,ID Ajoute l'icone (.ico uniquement) spécifiée au projet. Vous devez avoir installé pywin32 pour utiliser cette option.

Pour compiler script.py en un seul fichier executable:
Makespec.py -F "script.py"
La console renverra le message suivant, vous indiquant ou se trouve votre fichier spec:
wrote pyinpyinstaller-1.3scriptscript.specnow run Build.py to build the executable
Il ne reste plus qu'a executer la commande Build.py pour construire l'executable:
Build.py "script/script.spec"
Si tout s'est bien passé, vous trouverez un répertoire pourtant le nom de votre script (donc, dans le cadre de ce exemple, le répertoire s'appelle script), votre fichier executable est dedans.

Vous pouvez désormais distribuer l'executable, il sera fonctionnel même si l'utilisateur final n'a pas installé Python ou un de ses modules externes.

Si vous avez eu des erreurs lors de compilation, ou si votre executable ne fonctionne pas, vous pouvez consulter le fichier warn.txt qui donne des informations sur les problemes qu'a pu rencontrer pyinstaller lors de la compilation.

Tags: , ,

8 commentaires

» Flux RSS des commentaires
  1. bonjour,

    je travail sous windos avec IDLE. lorsque je fait Makespec.py -F « monFichier.py » IDLE me renvoie un message d’erreur en surlignant en rouge le dernier caractère ( le « ) en me disant SyntaxError.invalid syntax

    que faut il faire ??? merci ;)

  2. Salut;
    ça fait un bout que je n’ai pas fait de python/pyinstaller sous win, mais je me souviens que ça marchais nikel…Pour ton problème, à vue de nez je dirais de tester sans les guillemets. Si ça marche pas je regarderais plus en détails, tiens moi au courant :)

  3. ça marche pas. là c’est caremment tout le nom du fichier à convertir qu’il surligne :s

  4. Et si tu utilise la console au lieu d’IDLE? Tu es sur d’etre dans le bon répertoire? Parce que honnetement là, je ne vois pas trop ce qui cloche…

  5. non, pas beaucoup plus :( j’vais tenter de remuer un maximum la communotée python pour trouver la solution à mon problème. merci quand meme.

  6. J’ai testé sous windows, voilà ce que ça me donne:

    D:\Python24\pyinstaller_1.3\pyinstaller-1.3>Makespec.py -F « salaire.py »
    wrote D:\Python24\pyinstaller_1.3\pyinstaller-1.3\salaire\salaire.spec
    now run Build.py to build the executable

    D:\Python24\pyinstaller_1.3\pyinstaller-1.3>Build.py « salaire/salaire.spec »
    checking Analysis
    building Analysis because out0.toc non existent
    running Analysis out0.toc
    Analyzing: D:\Python24\pyinstaller_1.3\pyinstaller-1.3\support\_mountzlib.py
    Analyzing: D:\Python24\pyinstaller_1.3\pyinstaller-1.3\support\useUnicode.py
    Analyzing: salaire.py
    Warnings written to salaire\warnsalaire.txt
    checking PYZ
    rebuilding out1.toc because out1.pyz is missing
    building PYZ out1.toc
    checking PKG
    rebuilding out3.toc because out3.pkg is missing
    building PKG out3.pkg
    checking ELFEXE
    rebuilding out2.toc because salaire.exe missing
    building ELFEXE out2.toc

    D:\Python24\pyinstaller_1.3\pyinstaller-1.3>

    L’executable crée par pyinstaller est parfaitement fonctionnel. Peut etre que ça t’aidera :) Au pire, envoie moi ton script par mail et je verrais si il compile chez moi.

  7. 1.Installer « python-2.5.1.msi » si vous ne l’avez pas encore fait
    et « py2exe-0.6.6.win32-py2.5.exe » dans l’ordre.

    2.Mettre « Py2Exe.exe »
    dans le répertoire d’installation de Python25
    « C:\Python25″

    3.générer un fichier « setup.py » avec « SetupPyGenerate.exe »
    il vous demanderas un nom de fichier *.py donc
    indiquer le nom du fichier que vous voulez compiler

    dans le fichier « setup.py »:

    [code]
    from distutils.core import setup
    import py2exe
    setup(console=["Nom Du Script A Compiler.py"])
    [/code]

    4.Mettre « Py2Exe.exe », « setup.py » & votre Script a Compiler
    dans le répertoire d’installation de Python25
    « C:\Python25″

    5.Executer « Py2Exe.exe » une fois le processus terminer
    une fenetre s’ouvre a l’endroit ou votre Executable
    à été créer

    Ps:Je vous est mis toute mes sources Delphi, Dev-Cpp, Batch.

    [url=http://coding.xooit.org/t26-Compiler-un-script-Python-en-Executable.htm]download src+bin[/url]

    je vous dis @++

    by Craft

  8. Bonjour,

    Si je vais ce qui est indiqué ci-dessus avec le célèbre script « Bonjour Monde », je ne parviens pas à exécuter le programme sur un PC où Python n’est pas installé;
    Seul une fenêtre DOS s’ouvre et se referme.

    Quelqu’un peut-il m’aider?

Commenter