web-dev-qa-db-fra.com

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 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?

69
ShadowFlame

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:

    • Liens : Site Web || Repo || PyPi
    • Prend en charge : Python 2.7 et Python 3.4 - 3.7 sur Windows, Mac, et Linux.
  • cx_Freeze:

    • Liens: Site Web || Repo || PyPi
    • Prend en charge: Python 2.7 et 3.5 - 3.7 (?) Sous Windows, Mac et Linux.
  • pyapp:

    • Liens: Site Web || Repo || PyPi
    • Prend en charge: Python 2.7 et 3.3 (?) - 3.7 (?) Sur Mac uniquement.
    • Remarque: Depuis ma dernière édition, je n'ai pas pu déterminer de manière concluante la plage exacte de Python versions prises en charge par pyapp. La dernière version mentionne la prise en charge de Python 3.7.

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:

    • Liens: Site Web || Repo || PyPi
    • Prend en charge: Toutes les versions Python? Remarque - créera les programmes d'installation de Windows uniquement.
    • 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:

    • Liens: Site Web || Repo (miroir Github) || PyPi
    • Prend en charge: 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 incluez simplement Python) pour essayer d'accélérer votre code. En tant qu'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
    • Prend en charge: 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 va le compiler en C. Vous pouvez ensuite 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 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.

93
Michael0x2a

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:

  • Windows (32 bits et 64 bits)
  • Linux (32 bits et 64 bits)
  • Mac OS X (32 bits et 64 bits)

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 .

Mise à jour

Depuis la version 3.2.1, il prend en charge Python 2.7, 3.3-3.5

10
jterrace