Fil d'Ariane
Mis à jour le lundi 18 septembre 2017
  • 40 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Ce cours existe en eBook.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Distribuer facilement nos programmes Python avec cx_Freeze

Connectez-vous ou inscrivez-vous pour bénéficier de toutes les fonctionnalités de ce cours !

Comme nous l'avons vu, Python nous permet de générer des exécutables d'une façon assez simple. Mais, si vous en venez à vouloir distribuer votre programme, vous risquez de vous heurter au problème suivant : pour lancer votre code, votre destinaire doit installer Python ; qui plus est, la bonne version. Et si vous commencez à utiliser des bibliothèques tierces, il doit aussi les installer !

Heureusement, il existe plusieurs moyens pour produire des fichiers exécutables que vous pouvez distribuer et qui incluent tout le nécessaire.

Sur Windows, il faut enfermer vos fichiers à l'extension .py dans un .exe accompagné de fichiers .dll. Cx_freeze est un des outils qui permet d'atteindre cet objectif.

En théorie

L'objectif de ce chapitre est de vous montrer comment faire des programmes dits standalone, que l'on peut traduire très littéralement par "se tenir seul". Comme vous le savez, pour que vos fichiers .py s'exécutent, il faut que Python soit installé sur votre machine. Mais vous pourriez vouloir transmettre votre programme sans obliger vos utilisateurs à installer Python sur leur ordinateur.

Une version standalone de votre programme contient, en plus de votre code, l'exécutable Python et les dépendances dont il a besoin.

Sur Windows, vous vous retrouverez avec un fichier .exe et plusieurs fichiers compagnons, bien plus faciles à distribuer et, pour vos utilisateurs, à exécuter.

Le programme résultant ne sera pas sensiblement plus rapide ou plus lent. Il ne s'agit pas de compilation, Python reste un langage interprété et l'interpréteur sera appelé pour lire votre code, même si celui-ci se trouvera dans une forme un peu plus compressée.

Avantages de cx_Freeze

  • Portabilité : cx_Freeze est fait pour fonctionner aussi bien sur Windows que sur Linux ou Mac OS ;

  • Compatibilité : cx_Freeze fonctionne sur des projets Python de la branche 2.X ou 3.X ;

  • Simplicité : créer son programme standalone avec cx_Freeze est simple et rapide ;

  • Souplesse : vous pouvez aisément personnaliser votre programme standalone avant de le construire.

Il existe d'autres outils similaires, dont le plus célèbre est py2exe, que vous pouvez télécharger sur le site officiel de py2exe.

Il a toutefois l'inconvénient de ne fonctionner que sur Windows et, à l'heure où j'écris ces lignes du moins, de ne pas proposer de version compatible avec Python 3.X.

Nous allons à présent voir comment installer cx_Freeze et comment construire nos programmes standalone.

En pratique

Il existe plusieurs façons d'utiliser cx_Freeze. Il nous faut dans tous les cas commencer par l'installer.

Installation

Sur Windows

Rendez-vous sur le site sourceforge, où est hébergé le projet cx_Freeze.

et téléchargez le fichier correspondant à votre version de Python.

Après l'avoir téléchargé, lancez l'exécutable et laissez-vous guider. Rien de trop technique jusqu'ici !

Sur Linux

Je vous conseille d'installer cx_Freeze depuis les sources.

Commencez par vous rendre sur le site de téléchargement via le code web ci-dessus et sélectionnez la dernière version de cx_Freeze (Source Code only).

Téléchargez et décompressez les sources :

tar -xvf cx_Freeze_version.tar.gz

Rendez-vous dans le dossier décompressé puis lancez l'installation en tant qu'utilisateur root :

$ cd cx_Freeze_version
$ python3.4 setup.py build
$ sudo python3.4 setup.py install

Si ces deux commandes s'exécutent convenablement, vous disposerez de la commande cxfreeze :

$ cxfreeze
cxfreeze: error: script or a list of modules must be specified

% le message d'erreur peut laisser croire à un problème, il faudrait expliquer que c'est normal, peut-être ?

Utiliser le script cxfreeze

Pour les utilisateurs de Windows, je vous invite à vous rendre dans la ligne de commande (Démarrer > Exécuter… > cmd).

Rendez-vous dans le sous-dossier scripts de votre installation Python (chez moi, C:\python34\scripts).

cd \
cd C:\python34\scripts

Sur Linux, vous devez avoir accès au script directement. Vous pouvez le vérifier en tapant cxfreeze dans la console. Si cette commande n'est pas disponible mais que vous avez installé cxfreeze, vous pourrez trouver le script dans le répertoire bin de votre version de Python.

Sur Windows ou Linux, la syntaxe du script est la même : cxfreeze fichier.py.

Faisons un petit programme pour le tester. Créez un fichier salut.py (sur Windows, mettez-le dans le même dossier que le script cxfreeze, ce sera plus simple pour le test). Vous pouvez y placer le code suivant :

"""Ce fichier affiche simplement une ligne grâce à la fonction print."""

import os

print("Salut le monde !")

# Sous Windows il faut mettre ce programme en pause (inutile sous Linux)
os.system("pause")

À présent, lancez le script cxfreeze en lui passant en paramètre le nom de votre fichier : cxfreeze salut.py.

Si tout se passe bien, vous vous retrouvez avec un sous-dossier dist qui contient les bibliothèques dont votre programme a besoin pour s'exécuter… et votre programme lui-même.

Sur Windows, ce sera salut.exe. Sur Linux, ce sera simplement salut.

Vous pouvez lancer cet exécutable : comme vous le voyez, votre message s'affiche bien à l'écran.

Formidable ! Ou pas…

Au fond, vous ne voyez sans doute pas de différence avec votre programme salut.py. Vous pouvez l'exécuter, lui aussi, il n'y a aucune différence.

Sauf que l'exécutable que vous trouvez dans le sous-dossier dist n'a pas besoin de Python pour s'exécuter : il contient lui-même l'interpréteur Python.

Vous pouvez donc distribuer ce programme à vos amis ou le mettre en téléchargement sur votre site, si vous le désirez.

Une chose importante à noter, cependant : veillez à copier, en même temps que votre programme, tout ce qui se trouve dans le dossier dist. Sans quoi, votre exécutable pourrait ne pas se lancer convenablement.

Le script cxfreeze est très pratique et suffit bien pour de petits programmes. Il comporte certaines options utiles que vous pouvez retrouver dans la documentation de cx_Freeze.

Nous allons à présent voir une seconde méthode pour utiliser cx_Freeze.

Le fichier setup.py

La seconde méthode n'est pas bien plus difficile mais elle peut se révéler plus puissante à l'usage. Cette fois, nous allons créer un fichier setup.py qui se charge de créer l'exécutable de notre programme.

Un fichier setup.py basique contient ce code :

"""Fichier d'installation de notre script salut.py."""

from cx_Freeze import setup, Executable

# On appelle la fonction setup
setup(
    name = "salut",
    version = "0.1",
    description = "Ce programme vous dit bonjour",
    executables = [Executable("salut.py")],
)

Tout tient dans l'appel à la fonction setup. Elle possède plusieurs arguments nommés :

  • name : le nom de notre futur programme.

  • version : sa version.

  • description : sa description.

  • executables : une liste contenant des objets de type Executable, type que vous importez de cx_Freeze. Pour se construire, celui-ci prend en paramètre le chemin du fichier .py (ici, c'est notre fichier salut.py).

Maintenant, pour créer votre exécutable, vous lancez setup.py en lui passant en paramètre la commande build.

Sur Windows, dans la ligne de commande : C:\python34\python.exe setup.py build.

Et sur Linux : $ python3.4 setup.py build.

Une fois l'opération terminée, vous aurez dans votre dossier un sous-répertoire build. Ce répertoire contient d'autres sous-répertoires portant différents noms en fonction de votre système.

Sur Windows, je trouve par exemple un dossier appelé exe.win32-3.4.

Dans ce dossier se trouve l'exécutable de votre programme et les fichiers dont il a besoin.

Pour conclure

Ceci n'est qu'un survol de cx_Freeze. Vous trouverez plus d'informations dans la documentation indiquée plus haut, si vous voulez connaître les différentes façons d'utiliser cx_Freeze.

En résumé

  • cx_Freeze est un outil permettant de créer des programmes Python standalone.

  • Un programme standalone signifie qu'il contient lui-même les dépendances dont il peut avoir besoin, ce qui rend sa distribution plus simple.

  • cx_Freeze installe un script qui permet de créer nos programmes standalone très rapidement.

  • On peut arriver à un résultat analogue en créant un fichier appelé traditionnellement setup.py.

Exemple de certificat de réussite
Exemple de certificat de réussite