Je veux créer un seul exécutable à partir de mon projet Python. Un utilisateur devrait pouvoir le télécharger et l'exécuter sans avoir besoin d'installer Python. Si je distribuais simplement un package, je pourrais utiliser pip, wheel et PyPI pour le construire et le distribuer, mais cela nécessite que l'utilisateur ait Python et sache comment installer les packages. Que puis-je utiliser pour construire un self exécutable contenu dans un projet Python?
Voici quelques exemples courants. Sauf indication explicite, tous les projets répertoriés ci-dessous sont activement maintenus depuis ma dernière édition (août 2018).
J'ai également inclus des liens vers leurs sites Web, référentiels et listes PyPi respectifs au cas où vous voudriez vérifier par vous-même à quelle fréquence ils ont été mis à jour.
En outre, sauf indication contraire, tous les programmes répertoriés ci-dessous produiront un exe spécifiquement pour le système d'exploitation sur lequel il s'exécute. Ainsi, par exemple, l'exécution de Pyinstaller sous Windows produira un exe Windows, mais l'exécution de Pyinstaller sous Linux produira un exe Linux. Si vous souhaitez produire un exe pour plusieurs systèmes d'exploitation, vous devrez envisager d'utiliser des machines virtuelles ou utiliser quelque chose comme Wine .
Les programmes suivants fonctionnent tous de manière similaire - ils regroupent ensemble Python et votre programme, en les combinant efficacement pour produire un exécutable.
PyInstaller:
cx_Freeze:
pyapp:
Remarque: les versions précédentes de cet article comprenaient des réécritures pour py2exe ( repo ) et - bbfreeze ( repo ). Les deux projets ont été supprimés de cette liste: ils ont vu peu ou pas d'activité depuis plusieurs années et semblent être complètement non entretenus. Voir l'historique des modifications pour les anciens écritures.
Bien sûr, ce n'est pas la seule façon de faire les choses:
pynsist:
Autres notes: Pynsist semble prendre en charge le regroupement de toute version arbitraire Python avec votre application. Cependant, l'outil lui-même nécessite Python 3.5+ à exécuter.
Pynsist créera un programme d'installation Windows pour votre programme qui installera directement Python sur l'ordinateur de l'utilisateur au lieu de le regrouper avec votre code et créera des raccourcis qui lieront à votre Python = script. Bien que ce programme ne produise que des programmes d'installation Windows, il semble que vous pouvez toujours exécuter Pynsist sur les ordinateurs Mac et Linux.
Nuitka:
cython:
Ma préférence personnelle est d'utiliser PyInstaller car il était le plus facile pour moi de démarrer et de fonctionner, a été conçu pour fonctionner correctement avec diverses bibliothèques populaires telles que numpy ou pygame, et a une grande compatibilité avec divers systèmes d'exploitation et Python versions.
Cependant, j'ai également réussi à créer divers exes en utilisant cx_Freeze sans trop de difficulté, vous devriez donc également considérer ce programme.
Je n'ai pas encore eu l'occasion d'essayer intensivement le pyniste, Nuitka ou Cython, mais ils semblent être des solutions assez intéressantes et innovantes. Si vous rencontrez des problèmes lors de l'utilisation du premier groupe de programmes, il peut être utile d'essayer l'un de ces trois. Puisqu'ils fonctionnent fondamentalement différemment des programmes de style Pyinstaller/cx_freeze, ils pourraient réussir dans les cas étranges Edge où le premier groupe échoue.
En particulier, je pense que pynist est un bon moyen de contourner tout le problème de la distribution de votre code: les Mac et Linux ont déjà un support natif pour Python, et simplement installer Python sur Windows pourrait être vraiment le (L'inconvénient est maintenant que vous devez vous soucier de cibler plusieurs versions de Python + installation de bibliothèques).
Nuitka et Cython (dans mon expérience limitée) semblent fonctionner assez bien. Encore une fois, je ne les ai pas beaucoup testés moi-même, et donc ma principale observation est qu'ils semblent prendre beaucoup plus de temps pour produire un exe que les programmes de style "gel".
Enfin, si vous souhaitez uniquement prendre en charge Linux, vous pouvez envisager de créer un package de distribution pour votre package, au lieu de le transformer en exécutable. La liste des outils qui peuvent vous aider à faire cela dépasse le cadre de cet article, mais voici quelques lecture de matériel si vous décidez d'explorer cette route.
pyinstaller est toujours en développement actif. Vous pouvez voir les dernières modifications sur GitHub.
Il prend en charge les trois principales plates-formes:
et il prend en charge Python versions 2.6 et 2.7. Il ne prend pas en charge Python 3, mais il existe un expérimental branche Python .
Depuis la version 3.2.1, il prend en charge Python 2.7, 3.3-3.5