Geler votre code

“Geler” (“Freezing”) votre code c’est créer un exécutable avec un seul fichier à distribuer aux utilisateurs finaux, qui contient tout le code de l’application ainsi que l’interpréteur Python.

Les appplications comme ‘Dropbox’, ‘Eve Online’, ‘Civilisation IV’, et des clients BitTorrent font cela.

L’avantage de la distribution de cette façon est que votre application va “juste marcher”, même si l’utilisateur n’a pas déjà la version requise de Python (ou aucune) installée. Sous Windows, et même sur de nombreuses distributions Linux et OS X, la bonne version de Python ne sera pas déjà installé.

En outre, le logiciel utilisateur final doit toujours être dans un format exécutable. Les fichiers se terminant par .py sont pour les ingénieurs logiciels et les administrateurs système.

Un inconvénient du freezing est qu’il augmentera la taille de votre distribution d’environ 2 à 12MB. En outre, vous serez responsable de délivrer des versions mises à jour de votre application lorsque des failles de sécurité Python sont patchées.

Alternatives au Freezing

Packager votre code est pour la distribution des bibliothèques ou d’outils pour d’autres développeurs.

Sous Linux, une alternative au freezing est de créer un paquet de distribution Linux (c’est à dire des fichiers .deb pour Debian ou Ubuntu, ou des fichiers .rpm pour Red Hat et SuSE.)

À faire

Compléter le stub “Geler votre code”

Comparaison des outils de Freezing

Solutions et plateformes/fonctionnalités supportées:

Solution Windows Linux OS X Python 3

Licence

Mode fichier unique

Import de fichier Zip

Eggs

support pkg_resources

bbFreeze

oui

oui

oui

non

MIT

non

oui

oui

oui

py2exe

oui

non

non

oui

MIT

oui

oui

non

non

pyInstaller

oui

oui

oui

oui

GPL

oui

non

oui

non

cx_Freeze

oui

oui

oui

oui

PSF

non

oui

oui

non

py2app

non

non

oui

oui

MIT

non

oui

oui

oui

Note

Geler du code Python sous Linux dans un exécutable Windows a un jour été supporté dans PyInstaller et ensuite été supprimé..

Note

Toutes les solutions nécessitent que les dll MS Visual C++ soient installées sur la machine cible, excepté py2app. Seul Pyinstaller fait des .exe auto-exécutables qui embarque les dll quand on passe --onefile à Configure.py.

Windows

bbFreeze

Le prérequis est d’installer Python, Setuptools et la dépendance pywin32 sous Windows.

À faire

Écrire les étapes pour les exécutables les basiques

py2exe

Le prérequis est d’installer Python sous Windows.

  1. Télécharger et installer http://sourceforge.net/projects/py2exe/files/py2exe/

  2. Écrit setup.py (Liste des options de configuration):

from distutils.core import setup
import py2exe

setup(
    windows=[{'script': 'foobar.py'}],
)
  1. (Optionnellement) inclure l’icône

  2. (Optionnellement) Mode fichier unique

  3. Générez un .exe dans le répertoire dist:

$ python setup.py py2exe
  1. Fournissez les DLL du runtime Microsoft Visual C++. Deux options: installer globalement les dll sur ma machine cible ou distribuer les dll à côté du .exe.

OS X

py2app

PyInstaller

PyInstaller peut être utilisé pour construire des exécutables Unix et applications fenêtrées sur Mac OS X 10.6 (Snow Leopard) ou plus récent.

Pour installer PyInstaller, utilisez pip:

$ pip install pyinstaller

Pour créer un exécutable Unix standard, depuis disons script.py, utilisez:

$ pyinstaller script.py

cela créé,

  • un fichier script.spec, analogue à un fichier make

  • un dossier build, qui contient quelques fichiers de log

  • un dossier dist, qui contient l’exécutable principal script, et quelques bibliothèques Python dépendantes,

toutes dans le même dossier que script.py. PyInstaller met toutes les bibliothèques Python utilisées dans script.py dans le dossier dist. Donc lors de la distribution de l’exécutable, distribuez l’ensemble du dossier dist.

Le fichier script.spec peut être édité pour customiser le build, avec des options comme

  • Embarquer les fichiers de données avec l’exécutable

  • y compris les bibliothèques de run-time (fichiers .dll ou .so) que PyInstaller ne peut pas déduire automatiquement

  • ajout des options du run-time Python à l’exécutable,

Maintenant script.spec peut être exécuter avec pyinstaller (plutôt que d’utiliser encore script.py):

$ pyinstaller script.spec

Pour créer une application OS X autonome fenêtrée, utilisez l’option --windowed

$ pyinstaller --windowed script.spec

Cela créé script.app dans le dossier dist. Assurez-vous d’utiliser des paquets graphiques dans votre code Python, comme PyQt ou PySide, pour contrôler les parties graphiques de votre application.

Il y a plusieurs option script.spec liées à l’encapsulation d’applications Mac OS X ici. Par exemple, pour spécifier une icône pour l’application, utilisez l’option icon=\path\to\icon.icns.

Linux

bbFreeze

PyInstaller