Ich erstelle eine Python-Anwendung und möchte meine Clients nicht zwingen, Python und Module zu installieren.
Gibt es also eine Möglichkeit, ein Python-Skript als eigenständige ausführbare Datei zu kompilieren?
Ich erstelle eine Python-Anwendung und möchte meine Clients nicht zwingen, Python und Module zu installieren.
Gibt es also eine Möglichkeit, ein Python-Skript als eigenständige ausführbare Datei zu kompilieren?
Antworten:
Sie können mit py2exe wie bereits und Nutzung beantwortet cython Ihren Schlüssel konvertieren .py
Dateien in .pyc
, C kompilierten Dateien, wie .dll
in Windows und .so
unter Linux, viel härter als üblich zurückzukehren .pyo
und .pyc
Dateien (und auch Performance - Gewinn!)
Mit PyInstaller können Sie Python-Programme als eigenständige ausführbare Dateien verpacken. Es funktioniert unter Windows, Linux und Mac.
PyInstaller-Schnellstart
Installieren Sie PyInstaller von PyPI:
pip install pyinstaller
Gehen Sie in das Verzeichnis Ihres Programms und führen Sie Folgendes aus:
pyinstaller yourprogram.py
Dadurch wird das Bundle in einem aufgerufenen Unterverzeichnis generiert
dist
.Eine ausführlichere Anleitung finden Sie im Handbuch .
Vielleicht möchten Sie Nuitka untersuchen . Es nimmt Python-Quellcode und konvertiert ihn in C ++ - API-Aufrufe. Dann wird es in eine ausführbare Binärdatei (ELF unter Linux) kompiliert. Es gibt es schon seit einigen Jahren und es unterstützt eine Vielzahl von Python-Versionen.
Sie werden wahrscheinlich auch eine Leistungsverbesserung erhalten, wenn Sie es verwenden. Empfohlen.
Ich möchte einige nützliche Informationen zum Erstellen von eigenständigen Dateien unter Windows mit Python 2.7 zusammenstellen.
Ich habe py2exe verwendet und es funktioniert, aber ich hatte einige Probleme.
Es wurden einige Probleme beim Erstellen einzelner Dateien in Windows 64-Bit angezeigt : Die Verwendung von bundle_files = 1 mit py2exe funktioniert nicht .
Es ist erforderlich, eine setup.py-Datei zu erstellen, damit sie funktioniert. http://www.py2exe.org/index.cgi/Tutorial#Step2 ;
Ich hatte Probleme mit Abhängigkeiten, die Sie durch Importieren von Paketen in die Setup-Datei lösen müssen.
Ich konnte es nicht mit PyQt zusammenarbeiten lassen.
Aus diesem letzten Grund habe ich PyInstaller http://www.pyinstaller.org/ ausprobiert .
Meiner Meinung nach ist es viel besser, weil:
Ich schlage vor, beispielsweise eine .bat-Datei mit den folgenden Zeilen zu erstellen (pyinstaller.exe muss sich im Windows-Pfad befinden):
pyinstaller.exe --onefile MyCode.py
Sie können unter anderem eine einzelne Datei erstellen ( https://pyinstaller.readthedocs.io/en/stable/usage.html#options ).
Ich hatte nur ein Problem mit PyInstaller und Multiprocessing-Paket, das mit diesem Rezept behoben wurde: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing .
Daher denke ich, dass PyInstaller zumindest für Python 2.7 eine bessere und einfachere Option ist.
--onefile
Flag hilft Ihnen nicht dabei, es unter Windows portierbar zu machen, da die ausführbare Datei weiterhin eine Verknüpfung mit der api-ms-win-crt-runtime-l1-1-0.dll
Bibliothek (oder / und anderen) herstellen möchte, die über das vcredist
Paket installiert werden muss . Eine Abhängigkeit ist also noch vorhanden und muss vor dem Ausführen installiert werden.
Ja, es ist möglich, Python-Skripte in eigenständige ausführbare Dateien zu kompilieren.
Mit PyInstaller können Python-Programme unter Windows , Linux , Mac OS X , FreeBSD , Solaris und AIX in eigenständige ausführbare Dateien konvertiert werden . Es ist einer der empfohlenen Konverter.
py2exe konvertiert Python-Skripte nur in ausführbare Dateien auf der Windows-Plattform.
Cython ist ein statischer Compiler sowohl für die Programmiersprache Python als auch für die erweiterte Programmiersprache Cython.
Und eine dritte Option ist cx_Freeze
die plattformübergreifende.
cx_Freeze
seit Ende 2017 gibt es keine aufgelisteten Veröffentlichungen auf pypi. Wurde dieses Projekt abgebrochen?
Sie mögen vielleicht py2exe . Dort finden Sie auch Infos dazu unter Linux
Verwenden Sie py2exe .... Verwenden Sie die folgenden Setup-Dateien:
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()
)
Ich mag Pyinstaller - besonders die "Fenster" -Variante:
pyinstaller --onefile --windowed myscript.py
Es wird eine einzelne * .exe-Datei in einem dist / -Ordner erstellt.
Ich empfehle auch Pyinstaller
für eine bessere Abwärtskompatibilität wie Python 2.3 - 2.7.
Für py2exe benötigen Sie Python 2.6
Für Python 3.2-Skripte ist Cxfreeze die einzige Wahl. Erstellen Sie es aus Quellen, sonst funktioniert es nicht.
Für Python 2.x empfehle ich Pyinstaller, da es ein Python-Programm in einer einzigen ausführbaren Datei verpacken kann, im Gegensatz zu CxFreeze, das auch Bibliotheken ausgibt.
py2exe erstellt die gewünschte exe-Datei, Sie müssen jedoch dieselbe Version von MSVCR90.dll auf dem Computer haben, auf dem Sie Ihre neue exe verwenden möchten. Weitere Informationen finden Sie unter http://www.py2exe.org/index.cgi/Tutorial .
Die Liste der Verteilungsdienstprogramme finden Sie unter https://wiki.python.org/moin/DistributionUtilities .
Ich benutze bbfreeze und es hat sehr gut funktioniert (aber noch keine Python 3-Unterstützung).
.so
Dateien oder kopiert die .egg-Dateien direkt und sie müssen alle in einem einzigen Verzeichnis (oder als einzelne Datei) vorhanden sein. Es ist keine Installation erforderlich.
Mit Pyinstaller habe ich eine bessere Methode gefunden, indem ich eine Verknüpfung zur EXE-Datei verwendet habe, anstatt sie zu erstellen --onefile
. Wie auch immer, es gibt wahrscheinlich einige Datendateien und wenn Sie eine Site-basierte App ausführen, hängt Ihr Programm auch von HTML-, JS- und CSS-Dateien ab. Es macht keinen Sinn, all diese Dateien irgendwohin zu verschieben. Stattdessen, was ist, wenn wir den Arbeitspfad nach oben verschieben.
Erstellen Sie eine Verknüpfung zur Exe, verschieben Sie sie nach oben und legen Sie die Ziel- und Startpfade wie angegeben fest, damit die relativen Pfade zum Ordner dist \ gehen:
Target: %windir%\system32\cmd.exe /c start dist\web_wrapper\web_wrapper.exe
Start in: "%windir%\system32\cmd.exe /c start dist\web_wrapper\"
Kann die Verknüpfung zu einer beliebigen Umbenennung in "GTFS-Manager" umbenennen.
Jetzt, wenn ich verdopple -Klicke auf die Verknüpfung, es ist, als hätte ich die Datei mit Python ausgeführt! Ich fand diesen Ansatz besser als den folgenden --onefile
:
Oh, denken Sie daran, den Build-Ordner nach dem Erstellen zu löschen, um Größe zu sparen.
Verwenden Sie Cython, um nach c zu konvertieren, zu kompilieren und mit gcc zu verknüpfen. Eine andere Möglichkeit besteht darin, die Kernfunktionen in c (die Funktionen, die Sie nur schwer rückgängig machen möchten) zu erstellen, sie zu kompilieren und den kompilierten Code mit Python Boost zu importieren (und Sie erhalten eine viel schnellere Codeausführung). Verwenden Sie dann ein beliebiges Werkzeug zum Verteilen.
Mir wurde gesagt, dass PyRun, https://www.egenix.com/products/python/PyRun/ , ebenfalls eine Option ist.