Ceci est une ancienne révision du document !
Python est de plus en plus utilisé sur nos machines (et c'est très bien!), mais en contrepartie, quand on diffuse un logiciel en Python, on ne devrait pas être soumis à l'existence d'un python installé, ou à sa version: il faut donc que le logiciel diffusé intègre son propre interpréteur Python ainsi que les modules et bibliothèques utilisés.
C'est l'objet de la présente page: on va utiliser cx_Freeze pour cela, qui a l'avantage d'être multiplateforme.
Site de référence: http://cx-freeze.sourceforge.net/
Comme on voit sur la page des téléchargements, cx_Freeze existe pour la partie binaire pour chaque version de Python (2.5, 2.6, 2.7, 3.1).
Sous Windows, c'est facile: on télécharge sur le site de cx_Freeze et on installe la bonne version (celle qui correspond à la version du Python qu'on a!) comme n'importe quel logiciel Windows.
Sous Linux, c'est un peu plus complexe. Il y a un paquet rpm pour centos, et les sources pour les autres. Cependant, il est très probable que cx_Freeze fasse déjà partie des logiciels disponibles pour votre distribution: prenez celle-là!
Sous Mac Os X, je ne sais pas, mais on en parle dans la mailing-list: http://sourceforge.net/mailarchive/forum.php?forum_name=cx-freeze-users
Après plusieurs essais et consultation des quelques tutos d'internet, j'utilise la méthode avec setup.py, et voilà son contenu type.
Pour l'exemple, j'ai dans un répertoire 2 fichiers 'test.py' et 'test2.py' que je veux transformer en exécutable (.exe si c'est sous windows). Ils utilisent tous les 2 les bibliothèques graphiques PyQt4. Ils importent 2 modules, 'printx' et 'bibconcours', qui sont dans un répertoire relatif '../../biblio'.
#!/usr/bin/python # -*- coding: utf-8 -*- # source d'inspiration: http://wiki.wxpython.org/cx_freeze import sys, os from cx_Freeze import setup, Executable ############################################################################# # preparation des options path = sys.path.append(os.path.join("..", "..", "biblio")) includes = ["printx", "bibconcours"] 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 = "test.py", base = base, compress = True, icon = None, ) cible_2 = Executable( script = "test2.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, cible_2] )
Ce setup.py doit se trouver dans le répertoire dans lequel il y a les fichiers .py à convertir.
On prend alors la console (cmd pour Windows), on se loge dans le répertoire en question, et on fait:
python setup.py build
Il y a alors plusieurs pages d'exécution. En cas d'erreur, il faut utiliser les options pour corriger, et inclure ou exclure les éléments concernés.
Le résultat se trouve dans le sous-répertoire build/exe.win32-2.6 (exemple pour Python 2.6 sous Windows), qui contient les 2 exécutables voulus, et toutes les bibliothèques nécessaires, y compris bien entendu l'interpréteur Python.
Le répertoire à diffuser est donc dans cet exemple: 'exe.win32-2.6'.
On peut, bien entendu traiter des cas plus complexes en utilisant toutes les nombreuses options possibles: voir http://cx-freeze.sourceforge.net/cx_Freeze.html
D'après ce que j'ai pu tester, le setup.py est identique sous Windows et sous Linux. Mais l'exécutable Windows doit être construit sous Windows, et l'exécutable Linux sous Linux, à cause des bibliothèques à intégrer qui sont différentes.
Amusez-vous bien!