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
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
raw_input("testminimaldepy2exe")
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
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.
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és
remarque
w9xpopen.exe
nécessaire pour une exécution sous win 9x
unicodedata.pyd
python25.dll
moteur Python
MSVCR71.dll
library.zip
ce zip contient les modules compilés
bz2.pyd
test2pyexe.exe
exé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 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
import Tkinter as Tk
import sys
root = Tk.Tk()
btn = Tk.Button(root, text ='Quitter', command = sys.exit)
btn.pack()
root.mainloop()
setup.py
from distutils.core import setup
import py2exe
setup(windows=["test.py"])
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
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.
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:
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: