Créer un seul exécutable à partir D'un projet Python

je veux créer un seul exécutable à partir de mon projet Python. Un utilisateur devrait être capable de le télécharger et de l'exécuter sans avoir besoin D'installer Python. Si Je ne faisais que distribuer un paquet, je pourrais utiliser pip, wheel et PyPI pour le construire et le distribuer, mais cela nécessite que l'utilisateur ait Python et sache installer des paquets. Que puis-je utiliser pour construire un exécutable autonome à partir d'un projet Python?

56
demandé sur davidism 2012-08-21 20:47:58

2 réponses

En voici quelques-uns communs. À moins d'indication contraire, tous les projets énumérés ci-dessous sont activement maintenus depuis ma dernière édition (août 2018).

j'ai également inclus des liens vers leurs sites Web respectifs, repos, et listes PyPi au cas où vous voulez vérifier vous-même sur la fréquence à laquelle ils ont été mis à jour.

de plus, sauf indication contraire, tous les programmes énumérés ci-dessous produiront un exe spécifiquement pour le système d'exploitation qu'il exécute. dans. Ainsi, par exemple, exécuter Pyinstaller sous Windows produira un exe Windows, mais exécuter Pyinstaller sous Linux produira un exe Linux. Si vous voulez produire un exe pour plusieurs systèmes d'exploitation, vous devrez regarder en utilisant des machines virtuelles ou regarder en utilisant quelque chose comme vin .


les programmes suivants fonctionnent tous de la même manière -- ils regroupent Python et votre programme, les combinant efficacement pour produire un fichier exécutable.

  • PyInstaller:

  • cx_Freeze:

  • pyapp:

    • Liens Site Web || Repo || PyPi
    • supporte: Python 2.7 et 3.3 (?)- 3.7 (?) sur Mac uniquement.
    • Note: lors de ma dernière édition, j'ai été incapable de déterminer de façon concluante la portée exacte des versions de Python supportées par pyapp. La dernière version mentionne le support de Python 3.7.

Note: les versions précédentes de ce post incluaient des Écritures pour py2exe ( repo ) et bbfreeze ( repo ). Les deux projets ont été retirés de cette liste: ils ont vu peu ou pas d'activité depuis plusieurs années et semblent être complètement non maintenus. Voir l'historique d'édition pour les anciennes écritures.


bien sûr, ce n'est pas la seule façon de faire les choses:

  • pynsist:

    • Liens Site Web || Repo || PyPi
    • supporte: toutes les versions de Python? Note -- va créer Windows installers seulement.
    • autres notes: Pynsist semble supporter de regrouper n'importe quelle version arbitraire de Python avec votre application. Cependant, L'outil lui-même nécessite L'exécution de Python 3.5+.

      Pynsist va créer un installateur Windows pour votre programme qui installera directement Python sur l'ordinateur de l'utilisateur au lieu de l'empaqueter avec votre code et créer des raccourcis qui lient à votre script Python. Bien ce programme ne produit que des installateurs Windows, il semble que vous pouvez encore exécuter Pynsist sur les ordinateurs Mac et Linux.

  • Nuitka:

    • Liens Site web || Repo (Github miroir) || PyPi
    • supporte: Python 2.6 - 2.7 et Python 3.3 - 3.7 sous Windows, Mac et Linux.
    • autres notes: Nuitka compilera littéralement votre code Python et produira un exe (par opposition aux autres projets, qui incluent simplement Python) pour essayer d'accélérer votre code. Comme un effet secondaire, vous obtiendrez également un exe pratique que vous pouvez distribuer. Notez que vous devez avoir un compilateur C++ disponible sur votre système.
  • cython:

    • Liens Site Web || Repo || PyPi
    • supporte: Python 2.6 - 2.7 et Python 3.2-3.7 (? sur Windows, Mac et Linux.
    • autres notes: Cython est similaire à Nuitka en ce qu'il est un compilateur Python. Cependant, au lieu de compiler directement votre code, il le compilera en C. Vous pouvez alors prendre ce code C et transformer votre code en un exe . Vous aurez besoin d'avoir un compilateur C disponible sur votre système.

Ma préférence personnelle est D'utiliser PyInstaller car il était le plus facile pour moi de se mettre en marche, a été conçu pour travaillez bien avec diverses bibliothèques populaires telles que numpy ou pygame, et a une grande compatibilité avec diverses versions D'os et de Python.

cependant, j'ai également construit avec succès divers exes en utilisant cx_Freeze sans trop de difficultés, donc vous devriez également considérer ce programme.

Je n'ai pas encore eu la chance d'essayer pynist, Nuitka, ou Cython intensivement, mais ils semblent comme des solutions assez intéressantes et innovatrices. Si vous rencontrez un problème en utilisant le premier groupe de programmes, il pourrait être intéressant d'essayer l'une de ces trois. Puisqu'ils fonctionnent fondamentalement différemment que les programmes Pyinstaller/cx_freeze, ils pourraient réussir dans les cas de bord Impair où le premier groupe échoue.

en particulier, je pense que pynist est un bon moyen d'éviter toute la question de la distribution de votre code: Macs et Linux ont déjà un support natif pour Python, et juste installer Python sur Windows pourrait vraiment être la solution la plus propre. (L'inconvénient est maintenant que vous devez vous soucier de cibler plusieurs versions de Python + en installant des bibliothèques).

Nuitka et Cython (d'après mon expérience limitée) semblent bien fonctionner. Encore une fois, je ne les ai pas testé beaucoup moi-même, et donc mon observation principale est qu'ils semblent prendre beaucoup plus de temps pour produire un exe que les programmes de style "freeze" le font.

pour conclure, si vous voulez prendre en charge Linux uniquement, vous pouvez vouloir pour chercher à créer un paquet distro pour votre paquet, au lieu de le transformer en un exécutable. La liste des outils qui peuvent vous aider à faire ce qui est au-delà de la portée de ce post, mais voici quelques matériels de lecture si vous décidez d'explorer cette voie.

79
répondu Michael0x2a 2018-09-11 04:03:36

pyinstaller est encore en cours de développement. Vous pouvez voir les dernières modifications sur GitHub.

Il a un support pour tous les trois principales plates-formes:

  • de Windows (32-bit et 64-bit)
  • Linux (32-bit et 64-bit)
  • Mac OS X (32-bit and 64-bit)

et il supporte les versions 2.6 et 2.7 de Python. Il n' il ne supporte pas Python 3, mais il y a une branche expérimentale Python 3 .

mise à Jour

depuis la version 3.2.1, il supporte Python 2.7, 3.3-3.5

9
répondu jterrace 2017-04-07 00:55:16