FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireDéploiementPy2exe

La bibliothèque py2exe permet de générer sous Windows des éxécutables à partir d'un source Python. En plus, il y aura au minimum une dll Python et un zip contenant les modules compilés que vous devrez fournir avec votre programme.
Il vous permettra également de créer toute une distribution où vous pourrez empaqueter tous les fichiers nécessaires pour que votre programme fonctionne correctement

Créé le 11 septembre 2005  par Guigui_

Pour créer un fichier .exe à partir d'un fichier .py, il suffit d'écrire un petit setup.py que l'on appelera ensuite avec l'argument py2exe
exemple: Voici un code en mode console minimaliste

testpy2exe.py
Sélectionnez

raw_input("test minimal de py2exe")

Dans le fichier setup.py, il faudra toujours faire les 2 importations et appeler la fonction setup avec des arguments qui varieront en fonction du programme à "compiler". Dans notre cas, nous avons un unique fichier .py exécuté en mode console. Si notre fichier a une interface graphique (développé sous Tkinter, wxPython, ...), il faudra remplacer le terme console par windows

setup.py
Sélectionnez

from distutils.core import setup 
import py2exe 
setup(console=["testpy2exe.py"]) 

Il suffit ensuite d'exécuter, dans une fenêtre DOS (et non une console Python), la commande suivante qui crééra une distribution.

 
Sélectionnez

c:/python25/python.exe setup.py py2exe

2 répertoires sont créés: dist et build - ce dernier ne sert que lors de la construction de la distribution et peut donc être effacé
Dans le répertoire dist, vous récupérerez les fichiers:

fichiers générésremarque
w9xpopen.exenécessaire pour une exécution sous win 9x
unicodedata.pyd 
python25.dllmoteur Python
MSVCR71.dll 
library.zipce zip contient les modules compilés
bz2.pyd 
test2pyexe.exeexécutable de l'application
unicodedata.pyd 

Tous ces fichiers ne sont pas forcément utiles. Cela dépendra du contenu de votre fichier .py
Dans notre cas, seuls Python25.dll, library.zip et test2pyexe.exe nous sont utiles.

Si vous utilisez d'autres bibliothèques, visitez le lien suivant si vous rencontrez des difficultés: http://starship.python.net/crew/theller/moin.cgi/Py2Exe

Mis à jour le 11 décembre 2006  par Guigui_

Si vous utilisez une application graphique (développée par exemple avec Tkinter, wxPython, ...), vous n'aurez donc sûrement pas besoin de visualiser que ce soit sur la fenêtre DOS qui s'ouvre d'habitude automatiquement lors de l'exécution d'un fichier .py. Il vous suffit alors d'utiliser l'option windows à la place de l'option console dans le fichier setup.py de compilation.

Voici un exemple sur une application Tkinter.

test.py
Sélectionnez

import Tkinter as Tk
import sys

root = Tk.Tk()
btn = Tk.Button(root, text = 'Quitter', command = sys.exit)
btn.pack()
root.mainloop()
setup.py
Sélectionnez

from distutils.core import setup 
import py2exe 
setup(windows=["test.py"])
Créé le 11 décembre 2006  par Guigui_

Pour intégrer le fichier library.zip directement dans l'exécutable, il suffit de rajouter dans le setup l'option zipfile = None

testpy2exe.py
Sélectionnez

raw_input("test minimal de py2exe")
setup.py
Sélectionnez

from distutils.core import setup 
import py2exe 
setup(
	zipfile = None, 
	console=["testpy2exe.py"]) 
Créé le 19 juillet 2007  par Guigui_

Pour le déploiement d'applications contenant certains modules (notamment les modules externes), il est parfois nécessaire d'ajouter manuellement les fichiers nécessaires au bon fonctionnement de la bilbiothèque en question. C'est le cas pour Tix où il est nécessaire d'inclure le répertoire <Path Python>/tcl/Tix8.4 ainsi que la dll tix84.dll du répertoire <Path Python>/Dlls.
Voici un exemple minimaliste d'un programme Python utlisant Tix

test.py
Sélectionnez

import Tix
root = Tix.Tk()
root.mainloop()

Dans le fichier setup.py, on liste l'ensemble des fichiers requis pour le bon fonctionnement de Tix que l'on insère dans le setup de py2exe par le paramètre data_files contenant une liste de tuples (répertoire de destination relatif au répertoire d'exécution du programme, liste des fichiers à copier dans ce répertoire). Attention, c'est exemple a été testé avec Python 2.5.2, Py2exe 0.6.8 et Tix 8.4.0. Si vous utilisez d'autres versions, il sera peut-être nécessaire de faire des ajustements dans les fichiers à insérer.

setup.py
Sélectionnez

import sys
import os
import glob
import os.path 

from distutils.core import setup 
import py2exe


def listdirectory(path):
    return filter(os.path.isfile, glob.glob(path + os.sep + '*'))


data_files=[
          ('Dlls', glob.glob(sys.prefix+'/DLLs/tix84.dll')),
          ('tcl/tix8.4', listdirectory(sys.prefix+'/tcl/tix8.4')),
          ('tcl/tix8.4/bitmaps', listdirectory(sys.prefix+'/tcl/tix8.4/bitmaps')),
          ('tcl/tix8.4/pref', listdirectory(sys.prefix+'/tcl/tix8.4/pref')),
           ]

setup(
    script_args = ['py2exe'],
    data_files = data_files,
    windows = ['test.py'])
Créé le 16 juin 2008  par Guigui_

Le déploiement d'une application dépendante de Pmw nécessite une intervention du programmeur. Dans le répertoire d'installation de Pmw, il existe cependant un fichier bundlepmw.py qui va nous faciliter cette tâche. L'exécution de ce fichier permet de concaténer l'ensemble des fichiers de Pmw dans un unique fichier Pmw.py. Il vous faudra aussi rajouter les 2 fichier PmwColor.py et PmwBlt.py

Voici un exemple minimaliste d'une application Pmw:

test.py
Sélectionnez

import Pmw
root = Pmw.initialise()
root.mainloop()

Dans le fichier setup.py, nous allons tout d'abord modifier le fichier bundlepmw.py qui importe le module regsub qui n'existe plus à partir de la version 2.5 de Python (donc si vous travaillez avec une version plus ancienne, vous n'avez pas à faire cette manipulation).
Ensuite, nous exécutons ce fichier qui créera un fichier Pmw.py contenant tous les fichiers internes à Pmw. Nous copions enfin les fichiers PmwBlt.py et PmwColor.py.
Attention, c'est exemple a été testé avec Python 2.5.2, Py2exe 0.6.8 et Pmw 1.3.2. Si vous utilisez d'autres versions, il sera peut-être nécessaire de faire des ajustements dans les fichiers à insérer.
Le fichier setup correspondant:

setup.py
Sélectionnez

from distutils.core import setup 
import py2exe
import os
import sys
import subprocess
import shutil

## si le fichier bundlepmw.py contient l'importation regsub (qui n'existe plus depuis la version 2.5 de Python)
## Vous pouvez sinon le faire à la main en remplaçant "regsub" par "re" et "gsub" par "sub"
fp = open(sys.prefix + os.sep + "Lib/site-packages/Pmw/Pmw_1_3/bin/bundlepmw.py")
a = fp.read().replace("regsub", "re").replace("gsub", "sub")
fp.close()
ft = open(sys.prefix + os.sep + "Lib/site-packages/Pmw/Pmw_1_3/bin/bundlepmw.py", "w")
ft.write(a)
ft.close()

## Création du fichier Pmw.py dans le répertoire courant
subprocess.call([sys.executable, sys.prefix + os.sep + "Lib/site-packages/Pmw/Pmw_1_3/bin/bundlepmw.py",
                 sys.prefix + os.sep + "Lib/site-packages/Pmw/Pmw_1_3/lib"])
## On copie les 2 fichiers PmwBlt.py et PmwColor.py dans le répertoire courant 
shutil.copyfile(sys.prefix + os.sep + "Lib/site-packages/Pmw/Pmw_1_3/lib/PmwBlt.py", "PmwBlt.py")
shutil.copyfile(sys.prefix + os.sep + "Lib/site-packages/Pmw/Pmw_1_3/lib/PmwColor.py", "PmwColor.py")

setup(windows = ['test.py'])
Créé le 18 juin 2008  par Guigui_
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2005-2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.