Ich baue eine Python-Anwendung und möchte meine Kunden nicht zwingen, Python und Module zu installieren.
Gibt es also eine Möglichkeit, ein Python-Skript als eigenständige ausführbare Datei zu kompilieren?
Jeff
Ich baue eine Python-Anwendung und möchte meine Kunden nicht zwingen, Python und Module zu installieren.
Gibt es also eine Möglichkeit, ein Python-Skript als eigenständige ausführbare Datei zu kompilieren?
Rumple Stiltskin
Sie können verwenden PyInstaller um Python-Programme als eigenständige ausführbare Dateien zu packen. Es funktioniert unter Windows, Linux und Mac.
PyInstaller-Schnellstart
PyInstaller von PyPI installieren:
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 Unterverzeichnis namens
dist
.pyinstaller -F yourprogram.py
Durch Hinzufügen des Parameters -F (oder –onefile) wird alles in eine einzige “exe” gepackt.
pyinstaller -F --paths=<your_path>\Lib\site-packages yourprogram.py
Wenn Sie auf “ImportError” stoßen, sollten Sie Nebenpakete in Betracht ziehen.
pip install pynput==1.6.8
läuft immer noch in Import-Erorr – versuchen Sie, pyinstaller herunterzustufen – siehe Fehlermeldung bei der Verwendung von pynput mit pyinstaller
Eine ausführlichere Anleitung finden Sie unter Handbuch.
Es ist erwähnenswert, dass pyinstaller in eine einzelne .exe-Datei kompiliert werden kann. Auch auf welchem OS es läuft, macht das ausführbar, dh .exe, wenn es unter Windows ausgeführt wird
– Richard von Wit
6. Juni 2014 um 14:17 Uhr
Wie @GeenHenk sagte, wenn Sie unter Windows “kompilieren”, wird eine Exe erstellt. Denken Sie daran, dass Sie unter Linux nicht für Windows kompilieren (eine Exe erstellen) oder ein Linux unter Windows ausführbar machen können. Sie können nur die ausführbare Datei der Plattform erstellen, die Sie ausführen. (Unter Linux können Sie dies mit wine austricksen)
– PhoneixS
13. Januar 2015 um 8:24 Uhr
Die Verwendung von ‘pyinstaller’ ist viel einfacher als ‘py2exe’. Es kümmert sich um alle Abhängigkeiten, einschließlich Numpy, Pandas, alles, und gibt Ihnen eine einzige ausführbare Datei auf der Arbeitsplattform!
– bitte
9. März 2016 um 5:00 Uhr
Scheint genau das zu sein, wonach ich gesucht habe. Und unterstützt jetzt Python 3! Vielen Dank 🙂
– Daniel Gruszczyk
30. August 2016 um 8:23 Uhr
Ich habe sie alle ausprobiert, der PyInstaller und andere (py2exe, freeze, cython, eingebettete Version von Python usw.) können immer noch nicht mit der Abhängigkeit der dynamischen Python-Bibliothek selbst umgehen, zumindest in Windows (python*.dll). Die DLL ist von der Laufzeit abhängig, die separat installiert werden muss. Nach dem Prozess erhalten Sie die ausführbare Datei, die mit der DLL verknüpft wird und somit die gleiche Importierbarkeit hat. Ihre “eigenständige” ausführbare Datei ist also nicht sehr eigenständig, sondern eher einbettbar. Um die Laufzeitabhängigkeit zu umgehen, MÜSSEN Sie Python aus der Quelle neu erstellen cpython
Projekt.
– Andry
13. Juli 2017 um 8:33 Uhr
Neurin
Sie können verwenden py2exe wie schon beantwortet und verwenden Cython um Ihren Schlüssel umzuwandeln .py
Dateien hinein .pyc
C kompilierte Dateien, wie .dll
unter Windows und .so
auf Linux.
Es ist viel schwieriger, als gewöhnlich zurückzukehren .pyo
und .pyc
Dateien (und auch Performance-Gewinn!).
Danke für die Antwort. Ich habe Cython in Betracht gezogen, aber es scheint, dass Python immer noch benötigt wird, um kompilierte ausführbare Dateien auszuführen. Meinst du das Kompilieren von Skripts in .pyc mit Cython? (Ich wusste nicht, ob Cython eine solche Funktion hat)
– Jeff
28. März 2011 um 12:18 Uhr
Ich meine, du hast zwei Probleme: Closed Source und No-Deps. Für Closed Source kompilieren Sie Ihre wichtig Code in C-Bibliotheken mit Cython. Verwenden Sie für No-Deps py2exe und erstellen Sie eine ausführbare Datei mit .pyd-Dateien (cython-kompiliert) darin.
– neurin
28. März 2011 um 12:24 Uhr
Was würden Sie mit den Bibliotheken (numpy, scipy, matplotlib) tun? Wie könnten Clients beispielsweise die Funktion ginput() in matplotlib aus der ausführbaren Datei verwenden, ohne sie auf ihrem Computer installiert zu haben.
– Schimpansen sind hungrig
10. April 2013 um 18:04 Uhr
@chimpsarehungry was ist mit statischer Verlinkung?
– Braden Best
28. Januar 2015 um 7:15 Uhr
Die letzte Veröffentlichung scheint 2008 gewesen zu sein, wird diese noch beibehalten?
– Zitrax
17. September 2015 um 8:45 Uhr
dunkel
Vielleicht möchten Sie nachforschen Nuitka. 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 unterstützt eine Vielzahl von Python-Versionen.
Sie werden wahrscheinlich auch eine Leistungsverbesserung erhalten, wenn Sie es verwenden. Es wird empfohlen.
Nuitka ist ein großartiges Werkzeug. Keine Notwendigkeit, es nicht zu verwenden. Ich möchte nur auf eine Sache hinweisen – es ist nicht nur auf Linux beschränkt – es ist plattformübergreifend – ein weiterer Grund, es zu verwenden.
– sjaustirni
20. November 2014 um 16:09 Uhr
Nuitka funktioniert auf Python 2.6, 2.7, 3.2, 3.3 und 3.4 und ist plattformübergreifend: (Linux, FreeBSD, NetBSD, MacOS X und Windows (32/64 Bit). Andere funktionieren möglicherweise auch. Architekturen: x86, x86_64 (amd64) und arm. Andere Architekturen funktionieren möglicherweise auch sofort.)
– Jonathan Hartley
15. März 2015 um 1:33 Uhr
Es wird für die neueste Version 3.6 nicht unterstützt und ist ein Alptraum für die Einrichtung unter Windows
– Tetora
30. Oktober 2017 um 7:04 Uhr
Wird dadurch eine eigenständige ausführbare Datei erstellt?
– Stimmen
29. Januar 2019 um 10:44 Uhr
Hat für mich unter Windows ziemlich sofort funktioniert und ich habe eine ziemlich gute Leistungsverbesserung erzielt. Das Erstellen einer eigenständigen ausführbaren Datei ist jedoch fehlgeschlagen 🙁
– jkreis0
4. August 2020 um 17:14 Uhr
Wut.töten
Ja, es ist möglich, Python-Skripte in eigenständige ausführbare Dateien zu kompilieren.
PyInstaller kann verwendet werden, um Python-Programme in eigenständige ausführbare Dateien zu konvertieren, unter Windows, Linux, Mac OS X, FreeBSD, Solarisund AIX. Es ist einer der empfohlenen Konverter.
py2exe wandelt Python-Skripte in nur auf der Windows-Plattform ausführbare um.
Cython ist ein statischer Compiler sowohl für die Programmiersprache Python als auch für die erweiterte Programmiersprache Cython.
Diego
Ich möchte einige nützliche Informationen zum Erstellen eigenständiger Dateien unter Windows mit Python 2.7 zusammenstellen.
Ich habe benutzt py2exe und es funktioniert, aber ich hatte einige Probleme.
Es hat einige Probleme beim Erstellen einzelner Dateien in Windows 64 Bit gezeigt: Die Verwendung von bundle_files = 1 mit py2exe funktioniert nicht;
Es ist notwendig, eine setup.py-Datei zu erstellen, damit es funktioniert. http://www.py2exe.org/index.cgi/Tutorial#Step2;
Ich hatte Probleme mit Abhängigkeiten, die Sie lösen müssen, indem Sie Pakete in die Setup-Datei importieren.
Ich war nicht in der Lage, es zusammen mit zu arbeiten PyQt.
Dieser letzte Grund veranlasste mich, es zu versuchen PyInstaller http://www.pyinstaller.org/.
Meiner Meinung nach ist es viel besser, weil:
Ich schlage vor, eine .bat-Datei mit beispielsweise 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 dem Multiprocessing-Paket, das mit diesem Rezept gelöst wurde: https://github.com/pyinstaller/pyinstaller/wiki/Recipe-Multiprocessing.
Also denke ich, dass PyInstaller zumindest für Python 2.7 eine bessere und einfachere Option ist.
Das --onefile
Flag hilft Ihnen nicht dabei, es unter Windows portabel zu machen, da die ausführbare Datei immer noch mit der verknüpfen möchte api-ms-win-crt-runtime-l1-1-0.dll
Bibliothek (oder/und andere), die über installiert werden muss vcredist
Paket. Eine Abhängigkeit ist also noch vorhanden und muss vor dem Lauf installiert werden.
– Andry
13. Juli 2017 um 11:13 Uhr
Paolo
Und eine dritte Option ist cx_Freeze
die plattformübergreifend ist.
Das --onefile
Flag hilft Ihnen nicht dabei, es unter Windows portabel zu machen, da die ausführbare Datei immer noch mit der verknüpfen möchte api-ms-win-crt-runtime-l1-1-0.dll
Bibliothek (oder/und andere), die über installiert werden muss vcredist
Paket. Eine Abhängigkeit ist also noch vorhanden und muss vor dem Lauf installiert werden.
– Andry
13. Juli 2017 um 11:13 Uhr
Peter Mortensen
pyinstaller yourfile.py -F --onefile
Dadurch wird unter Windows eine eigenständige EXE-Datei erstellt.
Wichtiger Hinweis 1: Die EXE-Datei wird in einem Ordner namens „dist“ generiert.
Wichtiger Hinweis 2: Vergessen Sie nicht –onefile Flag
Sie können PyInstaller mit installieren pip install PyInstaller
HINWEIS: In seltenen Fällen gibt es versteckte Abhängigkeiten. Wenn Sie also die EXE-Datei ausführen und den Fehler „fehlende Bibliothek“ erhalten (win32timezone im Beispiel unten), verwenden Sie so etwas:
pyinstaller --hiddenimport win32timezone -F "Backup Program.py"
Der Teil der Frage, der besagt: „Ich möchte meine Clients nicht zwingen, Python und Module zu installieren.“ Es heißt nicht, dass die Clients es nicht können, es sagt, dass der Entwickler nicht verlangen möchte, dass sie es tun. Es hat keinen Sinn, den Punkt hier zu diskutieren, weil die Kunden SO nicht lesen, um für sich selbst zu sprechen. Ich möchte keine Flash-Entwicklungsumgebung installieren, nur um YouTube anzusehen, oder eine C-Entwicklungsumgebung, nur um Sudoku zu spielen, oder eine Python-Entwicklungsumgebung, um eine in Python geschriebene Version von Angry Birds auszuführen. Dafür sind verteilbare Laufzeiten da.
– David
11. November 2011 um 20:03 Uhr
Wäre eine Antwort mit vielen Dateien, aber nur einer zum Ausführen der Anwendung akzeptabel? Ich denke an eine Art Automatisierung des Packens der App + Anforderungen mit portabler Python-Distribution und erstelle ein Installationsskript, um es zu automatisieren.
– np8
16. November 2020 um 19:22 Uhr