PyOxidizer verwendet Rust, um ausführbare Python-Dateien zu erstellen

Ein neues Projekt, das in Rust geschrieben wurde, soll das Packen und Verteilen einer Python-Anwendung als eigenständige ausführbare Binärdatei vereinfachen - etwas, das für Python-Entwickler seit langem ein Problem darstellt.

PyOxidizer ist laut GitHub README „eine Sammlung von Rust-Kisten, mit denen Bibliotheken und Binärdateien mit Python-Interpreten erstellt werden können“. Mit PyOxidizer, so die Entwickler, ist es möglich, eine ausführbare Datei für eine Python-App zu erstellen, in die ein Python-Interpreter eingebettet ist, ohne dass andere Laufzeitabhängigkeiten bestehen.

PyOxidizer erfordert eine Installation von Rust 1.31 oder besser und verpackt nur Apps, die mit Python 3.7 geschrieben wurden. Um PyOxidizer zu verwenden, erstellt der Entwickler eine TOML-Datei, in der beschrieben wird, wie eine bestimmte Python-App eingebettet wird. Anschließend wird PyOxidizer mit einer Umgebungsvariablen erstellt und ausgeführt, die auf diese TOML-Datei verweist.

PyOxidizer unterscheidet sich von anderen Verpackungslösungen durch die Verwendung eines benutzerdefinierten Builds des Python-Interpreters, der statisch verknüpft und in ein anderes Programm eingebettet werden soll. Andere Lösungen wie PyInstaller verteilen die vorhandene CPython .DLL auf Lager - praktisch und kompatibel, aber nicht sehr flexibel. PyOxidizer packt auch den Bytecode für die Python-App in das ausführbare Image und lädt ihn direkt aus dem Speicher (schnell) und nicht aus dem Dateisystem (langsamer).

Wie PyInstaller führt PyOxidizer jedoch keine Optimierungen für den Python-Code durch. Ein anderes Projekt, Nuitka, kompiliert nicht nur Python-Apps zu eigenständigen ausführbaren Dateien, sondern versucht auch, Leistungsoptimierungen auf den kompilierten Code anzuwenden. Nuitka wird jedoch immer noch als Beta-Projekt betrachtet, und viele der geplanten Leistungsverbesserungen sind noch nicht verfügbar.

PyOxidizer selbst ist noch ein sehr frühes Projekt. Es können nur Linux-Binärdateien generiert werden, da eines der Upstream-Projekte, von denen es abhängt, die einbettbare Version von CPython, derzeit nur in Linux-Builds verfügbar ist.