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?
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 .
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é.
Et une troisième option est cx_Freeze
, qui est multiplate-forme.
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.
La création de fichiers uniques sous Windows 64 bits a posé quelques problèmes: 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 ne pouvais pas 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 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
Vous pouvez créer un seul fichier, entre autres options ( https://pyinstaller.readthedocs.io/fr/stable/usage.html#options ).
Un seul problème avec PyInstaller et le package de traitement multiple a été résolu à l'aide de cette recette: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Donc, je pense que, du moins pour python 2.7, PyInstaller est une option meilleure et plus simple.
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.
vous pouvez aimer py2exe . vous y trouverez également des infos pour le faire sur linux
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()
)
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
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.
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.
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).
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.
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 /.
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.
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:
Oh, n'oubliez pas de supprimer le dossier de construction après la construction, vous économiserez de la taille.
On me dit que PyRun, https://www.egenix.com/products/python/PyRun/ , est également une option.