FAQ PythonConsultez toutes les FAQ

Nombre d'auteurs : 11, nombre de questions : 188, dernière mise à jour : 23 mai 2009  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions posées sur le forum Python complétées par d'autres questions qui pouvaient nous sembler intéressantes de traiter. Toutefois il se peut que les réponses apportées contiennent des erreurs, imprécisions ... Vous pouvez dans ce cas contacter un des membres de la rédaction pour lui faire part de vos remarques.

L'équipe Python de Developpez.


SommaireDéploiementPy2exe (6)
précédent sommaire suivant
 

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

Mis à jour le 11 septembre 2005 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

Code python :
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

Code python :
1
2
3
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.

Code :
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 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 septembre 2005 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.

Code python :
1
2
3
4
5
6
7
import Tkinter as Tk 
import sys 
  
root = Tk.Tk() 
btn = Tk.Button(root, text = 'Quitter', command = sys.exit) 
btn.pack() 
root.mainloop()
Code python :
1
2
3
from distutils.core import setup  
import py2exe  
setup(windows=["test.py"])

Mis à jour le 11 décembre 2006 Guigui_

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

Code python :
raw_input("test minimal de py2exe")
Code python :
1
2
3
4
5
from distutils.core import setup  
import py2exe  
setup( 
	zipfile = None,  
	console=["testpy2exe.py"])

Mis à jour le 19 juillet 2007 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

Code python :
1
2
3
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.

Code python :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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'])

Mis à jour le 16 juin 2008 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:

Code python :
1
2
3
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:

Code python :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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'])

Mis à jour le 18 juin 2008 Guigui_

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2014 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

 
 
 
 
Partenaires

PlanetHoster
Ikoula