web-dev-qa-db-de.com

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

Ich möchte eine einzelne ausführbare Datei aus meinem Python Projekt erstellen. Ein Benutzer sollte sie herunterladen und ausführen können, ohne Python installiert zu haben. Wenn ich nur verteilt hätte Ich könnte ein Paket mit pip, wheel und PyPI erstellen und verteilen, aber dazu muss der Benutzer Python und weiß, wie man Pakete installiert. Was kann ich zum Erstellen eines eigenen Pakets verwenden? -inhaltige ausführbare Datei aus einem Python Projekt?

69
ShadowFlame

Hier sind einige gebräuchliche. Sofern nicht ausdrücklich vermerkt, werden alle unten aufgeführten Projekte seit meiner letzten Bearbeitung (August 2018) aktiv gepflegt.

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

Sofern nicht anders angegeben, erzeugen alle unten aufgelisteten Programme eine Exe speziell für das Betriebssystem, unter dem sie ausgeführt werden. Wenn Sie also Pyinstaller unter Windows ausführen, wird eine Windows-Exe erstellt, wenn Sie Pyinstaller unter Linux ausführen, wird jedoch eine Linux-Exe erstellt. Wenn Sie eine EXE-Datei für mehrere Betriebssysteme erstellen möchten, müssen Sie sich mit der Verwendung virtueller Maschinen oder mit der Verwendung von Wine befassen.


Die folgenden Programme funktionieren alle auf ähnliche Weise - sie werden zusammen mit Python und Ihrem Programm gebündelt 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.7 (?) Unter Windows, Mac und Linux.
  • pyapp:

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

Hinweis: frühere Versionen dieses Beitrags enthielten Zuschreibungen für py2exe ( repo ) und - bbfreeze ( repo ). Beide Projekte wurden aus dieser Liste gestrichen: Sie haben mehrere Jahre lang kaum Aktivitäten gesehen und scheinen völlig unbehandelt zu sein. Siehe Bearbeitungsverlauf für die alten Zuschreibungen.


Natürlich ist das nicht die einzige Möglichkeit, Dinge zu tun:

  • pynsist:

    • Links: Website || Repo || PyPi
    • Unterstützt: Alle Python Versionen? Hinweis - erstellt Windows-Installer nur.
    • Weitere Hinweise: Pynsist scheint es zu unterstützen, beliebige Python= -Versionen mit Ihrer Anwendung zu bündeln. Dies ist jedoch für das Tool selbst erforderlich Python 3.5+ ausführen.

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

  • 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.
    • Sonstige Hinweise: Nuitka kompiliert buchstäblich Ihren Python Code und erzeugt eine exe (im Gegensatz zu den anderen Projekten, die Fügen Sie einfach Python hinzu, um Ihren Code zu beschleunigen. Als Nebeneffekt erhalten Sie auch eine praktische Exe-Datei, 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.7 (?) unter Windows, Mac und Linux.
    • Andere Anmerkungen: Cython ähnelt Nuitka darin, dass es ein Python) - Compiler ist 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.

Ich persönlich bevorzuge die Verwendung von PyInstaller, da es für mich am einfachsten war, mit PyInstaller zu arbeiten, mit verschiedenen gängigen Bibliotheken wie Numpy oder Pygame zusammenzuarbeiten und eine hervorragende Kompatibilität mit verschiedenen Betriebssystemen und Python Versionen.

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

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

Insbesondere halte ich pynist für eine gute Möglichkeit, die gesamte Problematik der Codeverteilung zu umgehen: Auf Macs und Linux wird Python bereits nativ unterstützt, und nur die Installation von Python unter Windows könnte das sein sauberste Lösung. (Der Nachteil ist jetzt, dass Sie sich Gedanken über das Targeting mehrerer Versionen von Python + Installation von Bibliotheken) machen müssen.).

Nuitka und Cython (nach meiner begrenzten Erfahrung) scheinen ziemlich gut zu funktionieren. Ich habe sie selbst noch nicht ausgiebig getestet, und meine wichtigste Beobachtung ist, dass es anscheinend viel länger dauert, bis eine Exe-Datei erstellt wird, als es die "Freeze" -Stilprogramme tun.

Wenn Sie nur Linux unterstützen möchten, möchten Sie möglicherweise ein Distributionspaket für Ihr Paket erstellen, anstatt es in eine ausführbare Datei zu verwandeln. Das Auflisten von Tools, die Ihnen dabei helfen können, würde den Rahmen dieses Beitrags sprengen, aber hier ist einiges Lesematerial , wenn Sie sich dazu entschließen, diese Route zu erkunden.

93
Michael0x2a

pyinstaller befindet sich noch in der aktiven Entwicklung. Sie können die letzten Ä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. Es unterstützt nicht Python 3, aber es gibt einen experimentellen Python 3-Zweig .

Aktualisieren

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

10
jterrace