Je crée une application Python et je ne veux pas forcer mes clients à installer Python et des modules.
Alors, existe-t-il un moyen de compiler un script Python pour être un exécutable autonome?
Je crée une application Python et je ne veux pas forcer mes clients à installer Python et des modules.
Alors, existe-t-il un moyen de compiler un script Python pour être un exécutable autonome?
Réponses:
Vous pouvez utiliser py2exe comme déjà répondu et utiliser cython pour convertir vos .py
fichiers clés en fichiers .pyc
C compilés, comme .dll
dans Windows et .so
Linux, beaucoup plus difficiles à rétablir que les fichiers communs .pyo
et .pyc
(et aussi gagner en performances!)
Vous pouvez utiliser PyInstaller pour empaqueter des programmes Python en tant qu'exécutables autonomes. Il fonctionne sur Windows, Linux et Mac.
Démarrage rapide de PyInstaller
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 bundle dans un sous-répertoire appelé
dist
.Pour une procédure plus détaillée, consultez le manuel .
Vous voudrez peut-être enquêter sur Nuitka . Il prend le code source python et le convertit en appels API C ++. Ensuite, il se compile en un binaire exécutable (ELF sur Linux). Il existe depuis quelques années et prend en charge une large gamme de versions Python.
Vous obtiendrez probablement également une amélioration des performances si vous l'utilisez. Conseillé.
Je voudrais compiler des informations utiles sur la création de fichiers autonomes sur Windows à l'aide de Python 2.7.
J'ai utilisé py2exe et cela fonctionne, mais j'ai eu quelques problèmes.
Il a montré quelques problèmes pour créer des fichiers uniques dans Windows 64 bits: L' utilisation de bundle_files = 1 avec py2exe ne fonctionne pas ;
Il est nécessaire de créer un fichier setup.py pour que cela fonctionne. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
J'ai eu des problèmes avec les dépendances que vous devez résoudre en important des packages dans le fichier d'installation;
Je n'ai pas pu le faire fonctionner avec PyQt ..
Cette dernière raison m'a fait essayer PyInstaller http://www.pyinstaller.org/ .
À mon avis, c'est beaucoup mieux parce que:
Je suggère par exemple de créer un fichier .bat avec les lignes suivantes (pyinstaller.exe doit être dans le chemin Windows):
pyinstaller.exe --onefile MyCode.py
Vous pouvez créer un seul fichier, entre autres options ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Je n'ai eu qu'un seul problème à l'aide de PyInstaller et du package de multitraitement qui a été résolu en utilisant cette recette: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Donc, je pense que, au moins pour python 2.7, une option meilleure et plus simple est PyInstaller.
--onefile
indicateur ne vous aidera pas à le rendre portable sur Windows, car l'exécutable veut toujours se lier à la api-ms-win-crt-runtime-l1-1-0.dll
bibliothèque (ou / et autres) qui doit être installée via le vcredist
package. Une dépendance est donc toujours là et doit être installée avant l'exécution.
Oui, il est possible de compiler des scripts Python en 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 exécutables uniquement sur la plate-forme Windows.
Cython est un compilateur statique pour le langage de programmation Python et le langage de programmation Cython étendu.
Et une troisième option est cx_Freeze
, qui est multiplateforme.
cx_Freeze
versions sur pypi depuis fin 2017. Ce projet a-t-il été abandonné?
vous aimerez peut-être py2exe . vous y trouverez également des infos pour le faire sur linux
Utilisez py2exe .... utilisez les fichiers de configuration ci-dessous:
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()
)
J'aime pyinstaller - en particulier la variante "fenêtrée":
pyinstaller --onefile --windowed myscript.py
Il créera un seul fichier * .exe dans un dossier dist /.
Je recommande également pyinstaller
pour une meilleure compatibilité descendante comme python 2.3 - 2.7.
pour py2exe , vous devez avoir python 2.6
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 empaqueter un programme python dans un seul exécutable, contrairement à CxFreeze qui génère également des bibliothèques.
py2exe fera le fichier exe que vous voulez mais vous devez avoir la même version de MSVCR90.dll sur la machine sur laquelle vous allez utiliser votre nouvel exe. Voir http://www.py2exe.org/index.cgi/Tutorial pour plus d'informations.
Vous pouvez trouver la liste des utilitaires de distribution répertoriés sur https://wiki.python.org/moin/DistributionUtilities .
J'utilise bbfreeze et cela a très bien fonctionné (mais n'a pas encore le support de python 3).
.so
fichiers, ou copiera les fichiers .egg directement et ils seront tous présents dans un seul répertoire (ou comme un seul fichier). Aucune installation n'est requise.
En utilisant pyinstaller, j'ai trouvé une meilleure méthode en utilisant un raccourci vers le .exe plutôt qu'en créant --onefile
. Quoi qu'il en soit, il y a probablement des fichiers de données autour et si vous exécutez une application basée sur un site, votre programme dépend également des fichiers html, js, css. Inutile de déplacer tous ces fichiers quelque part. Et si nous déplaçons le chemin de travail vers le haut.
Faites un raccourci vers l'exe, déplacez-le en haut et définissez les chemins cible et de démarrage comme spécifié, pour avoir des chemins relatifs allant vers le dossier dist \:
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 n'importe quoi donc renommer en "GTFS-Manager"
Maintenant quand je double -cliquez sur le raccourci, c'est comme si j'avais python-exécuté le fichier! J'ai trouvé cette approche meilleure que --onefile
celle en tant que:
Oh, n'oubliez pas de supprimer le dossier de construction après la construction, vous économiserez de la taille.
Utilisez Cython pour convertir en c, compiler et lier avec gcc. Une autre pourrait être de rendre les fonctions de base en c (celles que vous voulez rendre difficiles à inverser), de les compiler et d'utiliser Python Boost pour importer le code compilé (en plus, vous obtenez une exécution de code beaucoup plus rapide). puis utilisez n'importe quel outil mentionné pour distribuer.
On me dit que PyRun, https://www.egenix.com/products/python/PyRun/ , est également une option.