web-dev-qa-db-fra.com

Comment faire en sorte qu'un exécutable autonome de script Python s'exécute sans aucune dépendance?

Je construis une application Python et je ne veux pas forcer mes clients à installer Python et des modules. Je veux aussi rendre mon application source fermée.

Alors, y at-il un moyen de compiler Python scripts en fichiers exécutables autonomes?

575
Jeff

Vous pouvez utiliser py2exe comme déjà répondu et utiliser cython pour convertir votre clé .py fichiers en .pyc, fichiers C compilés, comme .dll sous Windows et .so sous Linux, bien plus difficile à restaurer que les fichiers .pyo et .pyc ordinaires (et gagnent également en performances!)

203
neurino

Vous pouvez utiliser PyInstaller pour conditionner les programmes Python en tant qu'exécutables autonomes. Cela fonctionne sur Windows, Linux et Mac.

PyInstaller Quickstart

Installez PyInstaller à partir de PyPI:

pip install pyinstaller

Accédez au répertoire de votre programme et exécutez:

pyinstaller yourprogram.py

Cela générera le paquet dans un sous-répertoire appelé dist.

Pour une procédure plus détaillée, voir le manuel .

212
Rumple Stiltskin

Vous voudrez peut-être enquêter Nuitka . Il faut le code source python et le convertit en appels d'API C++. Ensuite, il compile dans un exécutable binaire (ELF sur Linux). Il existe depuis quelques années maintenant et supporte une large gamme de versions de Python.

Vous obtiendrez probablement également une amélioration des performances si vous l'utilisez. Conseillé.

75
cdarke

Et une troisième option est cx_Freeze , qui est multiplate-forme.

25
Katriel

J'aimerais compiler des informations utiles sur la création de fichiers autonomes sous Windows en utilisant Python 2.7.

J'ai utilisé py2exe et cela fonctionne, mais j'ai eu quelques problèmes.

Cette dernière raison m'a fait essayer PyInstaller http://www.pyinstaller.org/ .

À mon avis, c'est beaucoup mieux parce que:

  • C'est plus facile à utiliser.

Je suggère de créer un fichier .bat avec les lignes suivantes par exemple (pyinstaller.exe doit être dans le chemin Windows):

pyinstaller.exe --onefile MyCode.py

Donc, je pense que, du moins pour python 2.7, PyInstaller est une option meilleure et plus simple.

25
Diego

Oui, il est possible de compiler Python scripts en un exécutable autonome.

PyInstaller peut être utilisé pour convertir des programmes Python en exécutables autonomes, sous Windows , Linux , Mac OS X , FreeBSD , Solaris et AIX. C'est l'un des convertisseurs recommandés.

py2exe convertit les scripts Python en un seul fichier exécutable sur la plate-forme Windows.

Cython est un compilateur statique pour le langage de programmation Python et le langage de programmation étendu Cython.

22
fury.slay

vous pouvez aimer py2exe . vous y trouverez également des infos pour le faire sur linux

16
user237419

Utilisez py2exe .... utilisez ci-dessous les fichiers de configuration:

 from distutils.core import setup
 import py2exe

 from distutils.filelist import findall
 import matplotlib

 setup(
       console=['PlotMemInfo.py'],

       options={
                'py2exe': {
                'packages' : ['matplotlib'],
            'dll_excludes': ['libgdk-win32-2.0-0.dll',
                                 'libgobject-2.0-0.dll',
                 'libgdk_pixbuf-2.0-0.dll']
                          }
                },
       data_files = matplotlib.get_py2exe_datafiles()
     )
13
Anand

Je recommande également pyinstaller pour une meilleure compatibilité ascendante telle que python 2.3 - 2.7.
pour py2exe , vous devez disposer de python 2.6

9
yantaq

Pour les scripts Python 3.2, le seul choix est Cxfreeze. Construisez-le à partir de sources sinon cela ne fonctionnera pas.

Pour python 2.x, je suggère pyinstaller car il peut conditionner un programme python dans un seul exécutable, contrairement à CxFreeze qui fournit également des bibliothèques.

8
ravi.chunduru

py2exe créera le fichier .exe que vous voulez, mais vous devez disposer de la même version de MSVCR90.dll sur la machine sur laquelle vous allez utiliser votre nouveau fichier .exe. Voir http://www.py2exe.org/index.cgi/Tutorial pour plus d'informations.

6
Belial

Vous pouvez trouver la liste des utilitaires de distribution répertoriés @ https://wiki.python.org/moin/DistributionUtilities .

J'utilise bbfreeze et cela fonctionne très bien (je n'ai pas encore le support de python 3).

6
Joe

Ce n'est pas exactement un package du code python, mais il existe maintenant aussi grincheux de Google, qui transforme le code en Go. Il ne supporte pas l'api python C, il est donc possible qu'il ne fonctionne pas pour tous les projets.

4
freeformz

J'aime pyinstaller - surtout la variante "fenêtrée":

pyinstaller --onefile --windowed myscript.py

Il créera un seul fichier * .exe dans un dossier dist /.

3
cslotty

Utilisez Cython pour convertir en c, compiler et lier avec gcc. Vous pouvez également créer les fonctions de base en c (celles que vous souhaitez rendre difficiles à inverser), les compiler et utiliser python boost pour importer le code compilé (sans oublier une exécution de code beaucoup plus rapide). puis utilisez n'importe quel outil mentionné pour distribuer.

2
F.Moure

En utilisant pyinstaller, j'ai trouvé une meilleure méthode en utilisant un raccourci vers le fichier .exe plutôt que de créer --onefile. Quoi qu'il en soit, il existe probablement des fichiers de données et si vous exécutez une application basée sur un site, votre programme dépend également des fichiers html, js et css. Inutile de déplacer tous ces fichiers quelque part .. au lieu de cela, si nous déplaçons le chemin de travail vers le haut.

Créez un raccourci vers le fichier exe, déplacez-le en haut et définissez les chemins cible et de démarrage tels que spécifiés, pour que les chemins relatifs soient dirigés vers dist\folder: Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\" Peut renommer le raccourci en un nom ainsi renommé "GTFS-Manager "
Maintenant, lorsque je double-clique sur le raccourci, c’est comme si j’utilisais le fichier python! J'ai trouvé cette approche mieux que le --onefile comme:

  1. Dans le cas de onefile, il manque un fichier .dll pour le système d'exploitation Win7, qui nécessite une installation préalable, etc. Yawn. Avec la construction habituelle avec plusieurs fichiers, aucun de ces problèmes.
  2. Tous les fichiers utilisés par mon script python (il s'agit de déployer un serveur Web tornado et nécessite la création de nombreux sites Web géniaux!) N'ont pas besoin d'être déplacés: je crée simplement le raccourci en haut.
  3. Je peux réellement utiliser exactement le même dossier dans Ubuntu (exécutez python3 monfichier.py) et Windows (double-cliquez sur le raccourci).
  4. Je n'ai pas besoin de m'inquiéter du piratage excessivement compliqué du fichier .spec pour inclure des fichiers de données, etc.

Oh, n'oubliez pas de supprimer le dossier de construction après la construction, vous économiserez de la taille.

2
Nikhil VJ

On me dit que PyRun, https://www.egenix.com/products/python/PyRun/ , est également une option.