La Compilation d’un programme est une étape majeur de la programmation. C’est pour cette raison que nous allons aujourd’hui voir comment compiler son code écrit en python grâce à cx_Freeze, une librairie permettant à ses utilisateurs de compiler le code de leur programme afin de le transformer en exécutable, et cela que ça soit sur Linux, MacOS ou Windows.
Prérequis
Premièrement, il nous faudra installer la librairie de cx_Freeze.
pip install cx_Freeze
Si vous utilisez Anaconda, il est préférable de l’installer via la commande conda de l’Anaconda prompt :
conda install cx_Freeze
Pour le tutoriel, nous compilerons un simple programme graphique utilisant la librairie Tkinter, affichant une image et ayant un icône.
Étape 1 : Création de setup.py
La première étape pour compiler son programme est de créer, dans le répertoire de celui-ci, un fichier python que nous appellerons par défaut setup.py. Celui-ci doit contenir le code suivant. Si vous souhaitez personnaliser l’exécutable, il vous suffit de modifier les paramètres de l’exécutable ou d’en rajouter selon vos préférences.
from cx_Freeze import setup, Executableimport os.path# Permet d'éviter une erreur de type "KeyError: TCL_LIBRARY"PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')options = { 'build_exe': { 'include_files':[ os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), ], },}# Si vous souhaitez pouvoir exporter sur un autre système d'exploitation, ces lignes sont nécessaires.base = Noneif sys.platform == "win32": base = "Win32GUI" # Fichier que l'on souhaite inclure dans le dossier de l'exécutable includefiles = ["yubilogo.ico", "yubilogo.png"] # Paramètres de l'exécutable target = Executable( script = "yubicode.py", copyright= "Copyright © 2018 YubiGeek.com", icon = "yubilogo.ico", base = base ) setup( name = "YubiCode", version = "0.1", description = "", options = { "build_exe": { 'include_files': includefiles } }, executables = [ target ] )
Dans notre cas, le programme nécessite forcément l’interface graphique pour fonctionner. J’aurais donc pu simplement mettre à la ligne 29 le code suivant :
base = "Win32GUI"
Tout en supprimant par la même occasion la ligne 17 et 18, mais j’ai choisis de la laisser pour le bien du tutoriel. À savoir que cette ligne permet de compiler un programme aussi bien vers Windows que vers Linux ou MacOS, attention cependant, si vous compilez vers ces deux systèmes d’exploitations, l’interface graphique ne sera pas compilé et vous vous retrouverez avec une console uniquement.
Si vous souhaitez directement et seulement avoir la console, et ceux même sur Windows, il vous suffit de mettre None comme valeur à base.
Étape 2 : Compilation du programme
Nous voilà maintenant avec un fichier setup.py contenant les paramètres de notre exécutable. Il est désormais temps pour nous de compiler notre programme. Ouvrez votre terminal (pour ma part Anaconda Prompt, mais cmd marche lui-aussi) et changez le dossier du terminal pour celui contenant votre programme à l’aide de la commande CD :
CD /D "Y:\Multimédia\Bureau\Programmation\YubiGeek Tutoriel"
Une fois le terminal configuré, il ne vous reste plus qu’à entrer la commande suivante pour compiler (enfin !) votre programme :
python setup.py build
Retournez maintenant dans le dossier pour observer le résultat !
Comme on peut le constater, notre exécutable comporte bel et bien un logo, mit automatiquement par cx_Freeze, et possède dans ses détails les informations que nous avons rentrés au préalable dans le fichier setup.py.
Pour aller plus loin…
Nous avons vu dans ce tutoriel comment faire pour obtenir un exécutable. Cependant, cx_Freeze ne permet pas seulement d’avoir son programme sous forme d’exécutable. Ainsi, au lieu d’écrire seulement build comme argument lors de la compilation, vous pouvez choisir d’ajouter des paramètres à la compilation, ou d’installer directement le programme sur votre ordinateur (install).
python setup.py bdist_msi
Enfin, il est aussi possible de créer directement un installateur pour votre programme, et ceux grâce aux commandes bdist_msi (Windows), bdist_macet bdist_dmg (sous forme d’application ou d’image disque MacOS) et pour finir avec bdist_rpm (Linux).
Salut Louison, merci pour ton article intéressant sur cx-Freeze, quoiqu’un peu ancien! 🙂 . J’ai utilisé ta méthode pour compiler un programme simple sur Python. Effectivement il y a bien un fichier build qui est apparu. Mais malheureusement, je n’ai pas retrouvé mon programme en éxecutable. Je suis sous linux et je soupçonne que cx-Freeze a fonctionné sur Python 2.7.6 au lieu du 3.4.3. Qu’en penses tu? Merci de ta réponse!