Warum Standalone-Python-Apps so schwer zu entwickeln sind

Sie verbringen Wochen damit, ein nützliches Python-Tool zu entwickeln. Auf Ihrem Rechner funktioniert es perfekt. Sie versuchen, es mit einem Teamkollegen zu teilen. Es schlägt fehl, weil dieser kein Python installiert hat.

Das ist ein verbreitetes Problem. Python in eine einzige Datei zu verpacken, die überall funktioniert, ist schwierig. Es liegt nicht nur an einer fehlenden requirements-Datei.

Das Problem beginnt damit, wie Python funktioniert.

Python ist eine dynamische Sprache. Sie trifft viele Entscheidungen, während das Programm läuft. Sie kann Bibliotheken on-the-fly importieren. Sie kann die Funktionsweise von Funktionen während der Ausführung ändern.

Kompilierte Sprachen wie Go oder Rust entscheiden alles, bevor das Programm startet. Sie entfernen ungenutzten Code, um kleine, schnelle Dateien zu erstellen.

Python kann das nicht. Man kann nicht einfach vorhersagen, welche Teile der Laufzeitumgebung der Code benötigen wird. Um die Funktionsfähigkeit zu gewährleisten, muss die gesamte Python-Laufzeitumgebung enthalten sein.

Dies führt zum Bibliotheks-Problem.

In anderen Sprachen nutzen Compiler Tree-Shaking, um Dateien klein zu halten. Python kann dies nicht nutzen. Man muss jede Abhängigkeit und jede Unterabhängigkeit einbinden. Zudem müssen kompilierte Binärdateien enthalten sein. Das führt dazu, dass aus einem kleinen Skript ein 300 MB großes Paket wird.

Sie haben drei Hauptoptionen:

  • Python auf dem Zielrechner voraussetzen. Das funktioniert für Entwickler, scheitert aber bei normalen Anwendern.
  • Den Interpreter bündeln. Tools wie PyInstaller oder Nuitka packen die Laufzeitumgebung in Ihre App. PyInstaller ist weit verbreitet. Nuitka konvertiert Ihren Code in C, um die Geschwindigkeit zu verbessern.
  • Docker verwenden. Dies bietet absolute Zuverlässigkeit, indem die gesamte Betriebssystemschicht einbezogen wird. Das eignet sich gut für Server, erzeugt aber große Dateien.

Neue Tools wie PyApp bieten einen Mittelweg. Sie verwenden einen kleinen Launcher, um die richtige Python-Version für Sie herunterzuladen.

So treffen Sie die Wahl:

• Für technische Teams: Verwenden Sie eine virtuelle Umgebung und eine requirements-Datei. • Für Nicht-Entwickler: Verwenden Sie PyInstaller. Es ist die am besten getestete Methode. • Für Server und Datenpipelines: Verwenden Sie Docker. Hier zählt Zuverlässigkeit mehr als die Dateigröße. • Für Desktop-Apps, bei denen Geschwindigkeit wichtig ist: Verwenden Sie Nuitka.

Python wird seine grundlegende Natur nicht ändern, um dieses Problem zu lösen. Die Sprache bleibt dynamisch. Wir müssen uns auf bessere Tools verlassen, um diese Lücke zu schließen.

Quelle: https://dev.to/azadarjoe/why-standalone-python-apps-are-so-hard-to-build-3g31