Python Skript installieren?
Hey,
wenn ich ein Python Skript mit vielen Abhängigkeiten habe, und ich möchte dieses pythonscript jetzt aber jm. mitgeben, der nicht in der lage ist mit pip mal eben kurz diese abhängigkeiten zu installieren, auf dessen pc kein python installiert ist, wie kann ich das anstellen?
Folgende Möglichkeit habe ich gefunden:
- In eine EXE konvertieren | Problem: Exen lassen sich nur unter windows ausführen. Oder mit wine, aber dann funktioniert vieles auch nicht richtig.
Ich habe folgende Idee:
- Jar Datei erstellen. Dann lässt es sich unter android, linux, windows und mac OS ausführen.
Was meint ihr?
:)
4 Antworten
Du hast eine der großen Schwächen von Python gefunden: Konfigurationsmanagement und Verteilung. Es gibt keine Patentlösung. In serverseitigen Installationen werden oft Docker-Container verteilt, was natürlich bei Privatanwendern und clientseitig schwierig ist. Ansonsten ist auch Anaconda beliebt - das löst das Problem auch nicht ganz, aber man zumindest getrennte Umgebungen machen.
Jar Datei erstellen. Dann lässt es sich unter android, linux, windows und mac OS ausführen.
Klar, man kann auf Python verzichten und stattdessen Java oder eine andere JVM-Sprache verwenden (Jython ist leider in seinen Möglichkeiten begrenzt).
ich brauche aber python XD, es geht um einen discord bot, der gratis beliebig viele datein online speichert, und die pythonapi für discord ist deutlich besser als die java api
Die Python Virtual Environment (venv) dürfte deine beste Option sein.
Ich hatte vor einer Weile mal ein Python Projekt mit der PyCharm IDE erstellt. Ein Virtual Environment wurde automatisch dazu erstellt. Wie man es nachträglich erstellen kann, weiß ich nicht.
Die Umgebung ist dazu da, um sich vom installierte Python und den Abhängigkeiten zu lösen. Manche Abhängigkeiten könnten untereinander konflikte auslösen, oder Python 3.8 ist kompatibel, aber Python 3.9 nicht mehr.
In dem Projekt Ordner mit venv wird u.A. dein Python Script(e) gespeichert, aber auch Python selber, sowie alle pip Module. Mit den beigelegten Activate Scripten kann man die Umgebung aktivieren und das Python Script ausführen.
Kein Ahnung, ob Python noch Runtime Abhängigkeiten hat, welche nicht in der Umgebung gespeichert sind. Ich weiß auch nicht, wie es aussieht, wenn ein pip Modul eine dynamische plattformabhängige Bibliothek (.dll, .dylib, .so) benötigt. Eventuell werden diese nicht in der Virtuellen Umgebung gespeichert.
Die Aktivierungsscripte gibt es für CMD (.bat), für PowerShell (.ps1) und als Bash Script. Die Python Binaries sind nur für Windows beigelegt, also .exe Dateien.
Du könntest dein Projekt erstmal zu einer Virtual Environemt hinzufügen und dort alle Abhängigkeiten hinzufügen. Bevor du es jemanden schickst, könntest du es auf einem zweiten PC oder in einer VM austesten.
Da in der virtuellen Umgebung viele kleine Dateien zum Einsatz kommen, könnten das packen in eine Zip Datei vom Vorteil sein. Das Verteilen über einen Git Server dürfte auch sehr gut sein.
Ich denke nicht, dass man mit einen Python Skript eine .jar Datei erstellen kann.
.jar Dateien lassen sich nur von Java erstellen
dann kannst du es mit java wieder kompilieren und schon hast du ne jardatei, die frage ist nur, funktioniert danach alles noch so wie vorher?
Keine Standardimplementierung von Python geht auf die JVM, es gibt nur das eher eingeschränkte Jython. Selbst dann hast du noch ein Problem: viele Python-Libraries sind zumindest teilweise in nativem Code geschrieben, müssen dann also wieder für jede Plattform spezifisch ausgeliefert werden.
Da fragst du den falschen xD Aber gefühlsmäßig ist es denke ich gar keine gute Idee. Entweder du macht das mit wasch echtem Java, um eine jar zu bekommen oder mit Python, wo du aber nur eine exe generieren kannst.
Ergänzung: GraalVM wäre eine modernere Variante statt Jython, leidet aber unter demselben Problem mit Abhängigkeiten. Ist auch noch am Anfang.
Benutze eine requirements.txt: https://note.nkmk.me/en/python-pip-install-requirements/
In manche IDEs integriert, z.B.: https://www.jetbrains.com/help/pycharm/managing-dependencies.html#create-requirements
Also gehen tut das aufjedenfall, du kannst python in bytecode kompilieren und dann mit javadecompilator wieder entkompilieren...