web-dev-qa-db-fra.com

Comment puis-je distribuer des programmes python?

Mon application ressemble à ceci:

 main.py
windows/
 __init __. py 
 mainwindow.py 
 ...
modèle/
 __init __. py 
 orders.py 
 ...
Ressources/
 image1.png 
 logo.jpg 
 ...

Le programme est lancé avec main.py. Existe-t-il un bon moyen de créer une application "finale"? Je pense à quelque chose comme py2exe/py2app, mais sans copier l'interpréteur/les modules python dans l'application où l'on n'a qu'un seul exécutable.

J'ai jeté un coup d'œil à distutils, mais il semblerait que cela installe un programme dans le répertoire Python, ce qui n'est pas habituel sur des plateformes autres que Linux.

Pour le moment, je copie simplement l'intégralité du dossier source sur la machine cible et crée un alias pour main.pyw sous Windows. Quelques inconvénients:

  • L'icône est l'icône python par défaut.
  • Je dois créer l'alias manuellement.
  • Dans mon répertoire source, il y a beaucoup de fichiers supplémentaires comme le dossier de contrôle de source.
  • Je dois renommer main.py en main.pyw manuellement.
  • Ce serait bien si seuls les fichiers `.pyo * se trouvaient sur la machine cible. Il n'y a pas de vraie raison pour cela, je n'aime pas avoir des fichiers inutiles.

Comment créer une distribution automatisée Nice?

  • pour les fenêtres? (C'est la seule plate-forme que je dois soutenir pour le moment.)
  • pour Mac?
  • pour linux?
89
Georg Schölly

La méthode normale de distribution des applications Python est avec distutils . Il est conçu à la fois pour distribuer des modules python de type bibliothèque et des applications python, bien que je ne sache pas comment cela fonctionne sous Windows. Sous Windows, vous devez dans tous les cas installer Python séparément si vous utilisez distutils.

Je vous recommanderais probablement de le distribuer avec disutils pour Linux et Py2exe ou quelque chose de similaire pour Windows. Pour OS X, je ne sais pas. Si c'est une application d'utilisateur final, vous voudrez probablement un type d'image disque, je ne sais pas comment le faire. Mais lisez cet article pour plus d’informations sur l’expérience utilisateur. Pour une application faite pour les programmeurs, vous êtes probablement d'accord avec une installation de type distutils sur OS X également.

33
Lennart Regebro

Je recommande fortement Pyinstaller , qui prend en charge les principales plates-formes de manière assez transparente. Comme py2exe et py2app, il produit un exécutable standard sous Windows et un ensemble d'applications sous OS X, mais présente l'avantage de permettre également un travail fantastique de résolution automatique des dépendances courantes et de les inclure sans modifications de configuration supplémentaires.

Notez également que si vous déployez Python 2.6 sur Windows, vous devez appliquer le correctif this patch à la désinstallation de Pyinstaller.

Vous avez indiqué que vous n’avez pas besoin d’un programme d’installation, mais Inno Setup est un choix facile à utiliser et rapide à installer pour la plate-forme Windows.

56
Daniel Naab

Fredrik Lundh squeeze.py peut créer un seul fichier qui ne contient pas l'interpréteur Python, mais qui contient du bytecode. Avec les bons arguments, vous pouvez inclure d'autres fichiers, modules, etc. dans le fichier de résultat. Je l'ai utilisé avec succès dans un projet. Le programme résultant a fonctionné sous OS X, Linux et Windows sans aucun problème!

PS: chaque ordinateur doit disposer d'un interpréteur Python compatible avec le bytecode généré par squeeze.py. Vous pouvez générer différentes versions de bytecode pour différentes versions de Python, le cas échéant (exécutez simplement squeeze.py avec la bonne version de Python).

5
Eric O Lebigot

Je me trompe peut-être, mais IronPython n’a-t-il pas un compilateur intégré pour Windows?

http://www.ironpython.net

[MODIFIER]

Essayez Cx_Freeze, de loin le meilleur compilateur .py en .exe (plus quelques .dlls) que j'ai jamais utilisé.

http://cx-freeze.sourceforge.net/

2
Samy Bencherif

Je pense que cela vaut également la peine de mentionner _ PEX ((considérant plus l'attention que cette question a suscité et moins la question elle-même). Selon sa propre description :

Les fichiers PEX sont des environnements virtuels Python exécutables autonomes. Plus spécifiquement, ce sont des fichiers Zip soigneusement construits avec un #!/usr/bin/env python et un __main__.py spécial qui vous permettent d’interagir avec le runtime PEX. Pour plus d'informations sur les applications Zip, voir PEP 441 .

Je suis tombé dessus quand j'ai lu un aperçu du packaging pour Python . Ils ont posté cette belle photo ici:  enter image description here 

Pour résumer: si vous pouvez vous permettre de vous fier à l’installation de python sur la machine cible, utilisez PEX pour produire un "exécutable" autonome, qui aura probablement une taille de fichier inférieure à celle d’un exécutable produit par PyInstaller, par exemple.

1
user3389669

Si vous distribuez sur Windows, utilisez un installer pour installer tous les fichiers/interpet pertinents, le cas échéant. Distribuez un fichier setup.exe. C'est la meilleure façon sur les fenêtres. Sinon, les utilisateurs vont se plaindre.

1
Byron Whitlock

Le moyen le plus pratique * de distribuer des applications de bureau python sur plusieurs plates-formes est de faire appel au gestionnaire de paquets conda multiplate-forme. Il existe plusieurs outils qui l'utilisent:

  • Miniconda-Install - scripts powershell/bash qui téléchargent automatiquement Miniconda et créent un environnement de conda isolé pour l'application. Prend en charge pip mais semble ne pas être maintenu et présente des problèmes de téléchargement https.
  • Anaconda Project et (conda) constructeur par Continuum. Les deux utilisent conda. (conda) semble pouvoir créer des installateurs autonomes et même un installateur NSIS sous Windows mais ne supporte pas pip. Semblent se comporter comme des installateurs Anaconda/Miniconda.
  • PyAppShare - l'utilisateur final installe d'abord Miniconda/Anaconda (comme un environnement d'exécution). Ensuite, le script batch/bash à installation unique crée un environnement de conda isolé à partir de yaml spec. L'application est également un package conda/pip lui-même installé dans l'environnement et un point d'entrée exécutable est créé. Raccourcis multi-plateformes sur le bureau et les programmes créés automatiquement. Ils activent l'environnement et lancent l'application. Prend en charge pip.

* Le plus pratique pour le développeur. Assez pratique pour l'utilisateur final.

0
Peter Zagubisalo