Mis à jour le vendredi 17 novembre 2017
  • 40 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

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 gratuitement 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.pydans un.exeaccompagné 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.pys'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.exeet 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 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'utilisateurroot:

$ 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 commandecxfreeze:

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

Utiliser le scriptcxfreeze

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-dossierscriptsde 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 tapantcxfreezedans la console. Si cette commande n'est pas disponible mais que vous avez installé cxfreeze, vous pourrez trouver le script dans le répertoirebinde 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 fichiersalut.py(sur Windows, mettez-le dans le même dossier que le scriptcxfreeze, 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-dossierdistqui contient les bibliothèques dont votre programme a besoin pour s'exécuter… et votre programme lui-même.

Sur Windows, ce serasalut.exe. Sur Linux, ce sera simplementsalut.

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 programmesalut.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-dossierdistn'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 dossierdist. 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 fichiersetup.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 fichiersetup.pyqui se charge de créer l'exécutable de notre programme.

Un fichiersetup.pybasique 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 fonctionsetup. 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 typeExecutable, type que vous importez decx_Freeze. Pour se construire, celui-ci prend en paramètre le chemin du fichier.py(ici, c'est notre fichiersalut.py).

Maintenant, pour créer votre exécutable, vous lancezsetup.pyen lui passant en paramètre la commandebuild.

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épertoirebuild. 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é traditionnellementsetup.py.

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