Erstellen Sie eine einzelne ausführbare Datei aus einem Python-Projekt

87

Ich möchte eine einzelne ausführbare Datei aus meinem Python-Projekt erstellen. Ein Benutzer sollte es herunterladen und ausführen können, ohne dass Python installiert sein muss. Wenn ich nur ein Paket verteilen würde, könnte ich Pip, Wheel und PyPI verwenden, um es zu erstellen und zu verteilen. Dies setzt jedoch voraus, dass der Benutzer über Python verfügt und weiß, wie Pakete installiert werden. Was kann ich verwenden, um eine eigenständige ausführbare Datei aus einem Python-Projekt zu erstellen?

ShadowFlame
quelle
Ich schreibe immer noch in 2.x (2.7.2 um genau zu sein), sehe aber möglicherweise die Notwendigkeit, auf 3.x zu übertragen (wenn Module und dergleichen kompatibel sind) und würde dann auch eine Lösung benötigen.
ShadowFlame
Beachten Sie, dass die Verpackung die Problemdiagnose erheblich erschwert. Nicht nur Sie (oder pdb) haben keinen einfachen Zugriff auf die ausgeführten Dateien py2exe(keine Ahnung von den anderen) enthalten keine .pyDateien, sodass Sie keine Quellzeilen in Stapelspuren sehen.
ivan_pozdeev
Nur als Punkt des Interesses, ich habe angefangen, Pyinstaller
ShadowFlame

Antworten:

115

Hier sind einige gebräuchliche. Sofern nicht ausdrücklich angegeben, werden alle unten aufgeführten Projekte ab meiner letzten Bearbeitung (Januar 2020) aktiv gepflegt.

Ich habe auch Links zu den jeweiligen Websites, Repos und PyPi-Listen hinzugefügt, falls Sie selbst überprüfen möchten, wie oft sie aktualisiert wurden.

Sofern nicht anders angegeben, erzeugen alle unten aufgeführten Programme eine Exe speziell für das Betriebssystem, auf dem sie ausgeführt werden. Wenn Sie beispielsweise Pyinstaller unter Windows ausführen, wird eine Windows-Exe erstellt, während Sie Pyinstaller unter Linux ausführen, wird eine Linux-Exe erstellt. Wenn Sie eine Exe für mehrere Betriebssysteme erstellen möchten, müssen Sie die Verwendung virtueller Maschinen oder die Verwendung von etwas wie Wine prüfen .


Die folgenden Programme funktionieren alle ähnlich - sie bündeln Python und Ihr Programm und kombinieren sie effektiv, um eine ausführbare Datei zu erstellen.

  • PyInstaller:

    • Links : Website || Repo || PyPi
    • Unterstützt : Python 2.7 und Python 3.4 - 3.7 unter Windows, Mac und Linux.
  • cx_Freeze:

    • Links: Website || Repo || PyPi
    • Unterstützt: Python 2.7 und 3.5 - 3.8 unter Windows, Mac und Linux.
  • py2app:

    • Links: Website || Repo || PyPi
    • Unterstützt: Python 2.7 und 3.3 (?) - 3.7 (?) Nur auf dem Mac.
    • Hinweis: Bei meiner letzten Bearbeitung konnte ich den genauen Bereich der von pyapp unterstützten Python-Versionen nicht endgültig bestimmen. In der neuesten Version wird die Unterstützung von Python 3.7 erwähnt.

Hinweis: Frühere Versionen dieses Beitrags enthielten Zuschreibungen für py2exe ( Repo ) und bbfreeze ( Repo ). Beide Projekte wurden aus dieser Liste gestrichen: Sie haben seit mehreren Jahren kaum oder gar keine Aktivitäten gesehen und scheinen völlig unbeaufsichtigt zu sein. Siehe Bearbeitungsverlauf für die alten Zuschreibungen.


Das ist natürlich nicht die einzige Möglichkeit, Dinge zu tun:

  • pynsist:

    • Links: Website || Repo || PyPi
    • Unterstützt: Alle Python-Versionen? Hinweis - erstellt nur Windows-Installationsprogramme .
    • Weitere Hinweise: Pynsist scheint die Bündelung beliebiger Python-Versionen mit Ihrer Anwendung zu unterstützen. Für das Tool selbst ist jedoch Python 3.5+ erforderlich.

      Pynsist erstellt ein Windows-Installationsprogramm für Ihr Programm, das Python direkt auf dem Computer des Benutzers installiert, anstatt es mit Ihrem Code zu bündeln, und Verknüpfungen erstellt, die auf Ihr Python-Skript verweisen. Obwohl dieses Programm nur Windows-Installationsprogramme erstellt, können Sie Pynsist anscheinend weiterhin auf Mac- und Linux-Computern ausführen .

  • Nuitka:

    • Links: Website || Repo (Github-Spiegel) || PyPi
    • Unterstützt: Python 2.6 - 2.7 und Python 3.3 - 3.7 unter Windows, Mac und Linux.
    • Weitere Hinweise: Nuitka kompiliert Ihren Python-Code buchstäblich und erstellt eine Exe (im Gegensatz zu den anderen Projekten, die einfach Python enthalten), um Ihren Code zu beschleunigen. Als Nebeneffekt erhalten Sie auch eine praktische Exe, die Sie verteilen können. Beachten Sie, dass auf Ihrem System ein C ++ - Compiler verfügbar sein muss.
  • Cython:

    • Links: Website || Repo || PyPi
    • Unterstützt: Python 2.6 - 2.7 und Python 3.2 - 3.8 unter Windows, Mac und Linux.
    • Weitere Hinweise: Cython ähnelt Nuitka darin, dass es sich um einen Python-Compiler handelt. Anstatt Ihren Code direkt zu kompilieren, wird er jedoch zu C kompiliert. Sie können dann diesen C-Code nehmen und Ihren Code in eine Exe verwandeln . Auf Ihrem System muss ein C-Compiler verfügbar sein.

Meine persönliche Präferenz ist die Verwendung von PyInstaller, da es für mich am einfachsten war, es in Betrieb zu nehmen, für verschiedene gängige Bibliotheken wie Numpy oder Pygame geeignet ist und eine hervorragende Kompatibilität mit verschiedenen Betriebssystemen und Python-Versionen aufweist.

Ich habe jedoch auch erfolgreich verschiedene Exes mit cx_Freeze ohne allzu große Schwierigkeiten erstellt, daher sollten Sie auch in Betracht ziehen, dieses Programm auszuprobieren.

Ich hatte noch keine Gelegenheit, Pynist, Nuitka oder Cython ausgiebig auszuprobieren, aber sie scheinen ziemlich interessante und innovative Lösungen zu sein. Wenn Sie Probleme mit der ersten Gruppe von Programmen haben, kann es sich lohnen, eines dieser drei Programme auszuprobieren. Da sie grundlegend anders funktionieren als die Programme im Pyinstaller / cx_freeze-Stil, können sie in Fällen mit ungeraden Kanten erfolgreich sein, in denen die erste Gruppe ausfällt.

Insbesondere denke ich, dass Pynist eine gute Möglichkeit ist, das gesamte Problem der Verteilung Ihres Codes zu umgehen: Macs und Linux unterstützen Python bereits nativ, und die Installation von Python unter Windows ist möglicherweise die sauberste Lösung. (Der Nachteil ist nun, dass Sie sich Gedanken über die Ausrichtung auf mehrere Versionen von Python + machen müssen, in denen Bibliotheken installiert werden.)

Nuitka und Cython (nach meiner begrenzten Erfahrung) scheinen ziemlich gut zu funktionieren. Auch hier habe ich sie nicht ausgiebig selbst getestet, und daher ist meine Hauptbeobachtung, dass die Erstellung einer Exe viel länger zu dauern scheint als die Programme im "Freeze" -Stil.


Abgesehen davon ist die Konvertierung Ihres Python-Programms in eine ausführbare Datei nicht unbedingt die einzige Möglichkeit, Ihren Code zu verteilen. Weitere Informationen zu den anderen verfügbaren Optionen finden Sie unter den folgenden Links:

Michael0x2a
quelle
1
Beachten Sie, dass Sie müssen auch in Ihrem Paket enthalten das Microsoft C ++ Redistributables (aka msvcrxx.dll, wo xxeine Versionsnummer ist ) , um die .exe laufen zu lassen (oder Benutzer fragen , es selbst zu installieren). Dies ist erforderlich, da Python mit Visual Studio unter Windows erstellt wird.
gaborous
Es sieht also so aus, als ob keine der Python-IDEs (pycharm oder pydev - eclipse pluggin) die Funktion zum Kompilieren in eine einzelne ausführbare Datei noch nicht in die IDE selbst integriert hat. Ist das korrekt? :-)
Nelda.techspiress
Wenn Sie Ihren Quellcode sicher aufbewahren möchten, ist Cython wahrscheinlich die beste Wahl, da es C-Code kompiliert. Programme, die im Allgemeinen die Gefriertechnik verwenden, können leicht dekompiliert werden.
Martín De la Fuente
PyInstaller wird oben als unterstützend für Python 3.7 aufgeführt. Dies trifft nach meiner Erfahrung und der Beschreibung auf pyinstaller.org nicht zu, in der es heißt "PyInstaller funktioniert mit Python 2.7 und 3.3—3.6".
Tom
1
@Tom - Nach ein wenig mehr Graben sieht es so aus, als ob Pyinstaller selbst Python 3.7 unterstützt, aber offiziell keine neue Version mit 3.7-Unterstützung veröffentlicht hat. ( Zum Beispiel gibt ihr Github-Repo an , dass sie Python 3.7 + unterstützen. Sie scheinen keine offenen Probleme mehr im Zusammenhang mit 3.7 zu haben, aber die neueste Version von Pyinstaller auf PyPi ist ab Dezember 2017). Wenn Sie also 3.7-Unterstützung benötigen, können Sie versuchen, pyinstaller direkt aus dem Quellcode zu erstellen und zu installieren, oder bis zur nächsten Version warten. (Oder verwenden Sie natürlich ein anderes Programm)
Michael0x2a
10

pyinstaller befindet sich noch in der aktiven Entwicklung. Sie können die neuesten Änderungen auf GitHub sehen.

Es unterstützt alle drei Hauptplattformen:

  • Windows (32-Bit und 64-Bit)
  • Linux (32-Bit und 64-Bit)
  • Mac OS X (32-Bit und 64-Bit)

und es unterstützt Python-Versionen 2.6 und 2.7. Python 3 wird nicht unterstützt, es gibt jedoch einen experimentellen Python 3-Zweig .

Aktualisieren

Ab Version 3.2.1 werden Python 2.7, 3.3-3.5 unterstützt

jterrace
quelle
2

Bessere Verwendung, pip install auto-py-to-exedie eine schöne Benutzeroberfläche mit allen Optionen bietet, die zum Erstellen einer ausführbaren Datei erforderlich sind.

Geben Sie nach der Installation einfach auto-py-to-exeIhr Terminal oder Ihre Eingabeaufforderung ein.

Auto-py-to-exe

Ratnesh Kushwaha
quelle
Vielen Dank, dass Sie immer noch auf einen so alten Thread wie diesen geantwortet haben. Es scheint ein erstaunlicher Fund zu sein und die Arbeit beim Einrichten wirklich zu vereinfachen sowie den tatsächlich verwendeten Befehl
bereitzustellen