Comment faire pour qu'un script Python autonome fonctionne sans aucune dépendance?
je suis en train de construire une application Python et je ne veux pas forcer mes clients à installer Python et des modules. Je veux aussi faire ma demande fermé-source.
alors, y a-t-il un moyen de compiler des scripts Python pour des exécutables autonomes?
16 réponses
vous pouvez utiliser py2exe comme déjà répondu et utiliser cython pour convertir votre clé .py
fichiers dans .pyc
, c compilés fichiers, comme .dll
dans Windows et .so
dans linux, beaucoup plus difficile à revenir que commun .pyo
et .pyc
fichiers (et aussi gagner en performance!)
vous pouvez utiliser PyInstaller pour empaqueter des programmes Python comme exécutables autonomes. Il fonctionne sous Windows, Linux et Mac.
PyInstaller Démarrage Rapide
installer PyInstaller de PyPI:
pip install pyinstaller
allez dans le répertoire de votre programme et lancez:
pyinstaller yourprogram.py
cela générera le faisceau dans un sous-répertoire appelé
dist
.pour une revue plus détaillée, voir le manuel .
que Vous pourriez vouloir étudier Nuitka . Il prend du code source python et le convertit en appels D'API C++. Puis il se compile dans un exécutable binaire (ELF sous Linux). Il existe depuis quelques années et supporte une large gamme de versions de Python.
vous obtiendrez probablement aussi une amélioration de performance si vous l'utilisez. Recommandé.
je voudrais compiler quelques informations utiles sur la création de fichiers autonomes sur windows en utilisant Python 2.7.
j'ai utilisé py2exe et ça fonctionne, mais j'ai eu quelques problèmes.
-
il a montré quelques problèmes pour créer des fichiers simples dans les bits de Windows 64: en utilisant bundle_files = 1 avec py2exe ne fonctionne pas ;
-
Il est nécessaire pour créer un setup.py file pour que ça marche. 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 paquets dans le fichier de configuration;
-
je n'étais pas capable de le faire fonctionner avec PyQt..
cette dernière raison m'a fait essayer PyInstaller http://www.pyinstaller.org / .
à mon avis, il est beaucoup mieux parce que:
- Il 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 Path de Windows):
pyinstaller.exe --onefile MyCode.py
-
vous pouvez créer un fichier unique, entre autres options ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
-
Je n'ai eu qu'un seul problème avec le paquet PyInstaller et multiprocessing 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.
Oui, il est possible de compiler des scripts Python dans 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'une des convertisseurs.
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.
vous pouvez, comme py2exe . vous y trouverez aussi des infos pour le faire sous linux
utiliser py2exe.... utiliser ci-dessous configurer les fichiers:
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()
)
je recommande aussi pyinstaller
pour une meilleure compatibilité arrière telle que 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 ça ne marchera pas.
pour python 2.x je suggère pyinstaller car il peut empaqueter un programme python dans un seul exécutable, contrairement à CxFreeze qui produit aussi des bibliothèques.
py2exe fera le fichier exe que vous voulez mais vous devez avoir la même version de MSVCR90.sur la machine, tu vas utiliser ton nouvel exe. Voir http://www.py2exe.org/index.cgi/Tutorial pour plus d'information.
vous pouvez trouver la liste des services de distribution énumérés @ https://wiki.python.org/moin/DistributionUtilities .
j'utilise bbfreeze et il fonctionne très bien (mais il n'a pas encore le support de python 3).
utilisez Cython pour convertir en c, compiler et lier avec gcc. Un autre pourrait être, faire les fonctions de base en c ( celles que vous voulez rendre difficiles à inverser), les compiler et utiliser Python boost pour importer le code compilé (en plus vous obtenez une exécution de code beaucoup plus rapide). utilisez ensuite l'outil mentionné à distribuer.
on m'a dit que PyRun, https://www.egenix.com/products/python/PyRun / , est également une option.
en utilisant pyinstaller, j'ai trouvé une meilleure méthode en utilisant le raccourci vers le .exe plutôt que de faire --onefile
. Quoi qu'il en soit, il y a probablement quelques fichiers de données autour et si vous utilisez une application basée sur le site alors votre programme dépend de html, js, CSS fichiers trop. Inutile de déplacer tous ces dossiers quelque part.. au lieu que si nous déplaçons le chemin du travail.
faire un raccourci vers l'exe, le déplacer en haut et définir la cible et les chemins de démarrage comme spécifié, pour avoir des chemins relatifs va dist\dossier:
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 shortcut en quelque chose d'aussi renommer en "GTFS-Manager "
Maintenant, quand je double-clique sur le raccourci, c'est comme si j'python-exécuté le fichier! J'ai trouvé cette approche mieux que le --onefile
l'un:
- dans le cas d'onefile, il y a un problème avec un .dll manquante pour win7 OS qui nécessite une installation préalable, etc. Bâillement. Avec la compilation habituelle avec plusieurs fichiers, Pas de problèmes de ce genre.
- tous les fichiers que mon script python utilise (il déploie un serveur web tornado et a besoin d'un site entier de fichiers pour y être!) n'ont pas besoin d'être déplacé n'importe où: il suffit de créer le raccourci en haut.
- je peux en fait utiliser ce même dossier dans ubuntu (exécuter python3 myfile.py) et windows (double-cliquez sur le raccourci).
- Je n'ai pas besoin de m'embêter avec le piratage excessivement compliqué de .fichier spec pour inclure des fichiers de données, etc.
oh, souvenez-vous de supprimer du dossier construire après la construction, permettra d'économiser sur la taille.