Hi,
Ich habe ein Excel Plugin in Python programmiert und möchte dieses jetzt gerne so verpacken, dass der Endanwender das möglichst einfach über einen Installiert installieren kann.
Ich habe dazu mit InnoSetup einen Installer gebaut, der das Excel Plugin in den XLSTART Ordner kopiert und die Python Dateien nach %APPDATA%/<meinprogramm>.
Funktioniert wunderbar, allerdings stehe ich jetzt vor einer anderen Herausforderung.
Ich möchte nicht dass sich der Endanwender mit der Installation vom Python Interpreter und Abhängigkeiten rumschlagen muss.
Das sollte ebenfalls vom Installer gehandelt werden.
Ich habe gesehen dass es auf der Python Website eine Embedded Version gibt, die könnte ich doch einfach mitliefern und für mein Programm als Interpreter festlegen.
Jetzt zu meiner Frage:
Wie genau bekomme ich meine Abhängigkeiten in eben diese embedded Version?
Normalerweise erstelle ich eine .venv und installiere diese mit pip.
https://stackoverflow.com/a/52641359
Hier wird geschrieben, einfach die Dateien rüber kopieren, aber das scheint mir doch eine etwas "komische" Lösung zu sein.
Programm inkl. Python Env an Endanwender verteilen?
Ja PyInstaller ist schon sehr gut, aber schmeißt alles in ein directory, ich muss eine Datei aber woanders hin packen.
Aber ich werde einfach erst PyInstaller benutzten und dann ein Installer mit InnoSetup erstellen.
Probiere ich morgen mal aus.
Aber ich werde einfach erst PyInstaller benutzten und dann ein Installer mit InnoSetup erstellen.
Probiere ich morgen mal aus.
PyInstaller hat auch die --onefile Option. Dann hast du den Ordner als ausführbares selbst-entpackendes Archiv als eine einzelne Datei vorliegen. Das verlängert natürlich den Startvorgang deines Programms.
Er hat ja das Problem, dass eine einzige Datei aus dem ganzen Bundle an eine andere Stelle muss und das Programm gar nicht selbst ausgeführt werden muss, sondern aus Excel heraus getriggertwird, wenn ich das richtig sehe.
Man kann mit InnoSetup auch einen Installer bauen der Python mitbringt, prüft ob Python installiert ist, und Python installiert, wenn das nicht der Fall ist.
Alternativ kann man auch den Interpreter inklusive packages einfach kopieren. So machen das Programme wie Inkscape auch, wenn ich mich richtig erinnere.
Man kann mit InnoSetup auch einen Installer bauen der Python mitbringt, prüft ob Python installiert ist, und Python installiert, wenn das nicht der Fall ist.
Alternativ kann man auch den Interpreter inklusive packages einfach kopieren. So machen das Programme wie Inkscape auch, wenn ich mich richtig erinnere.
Korrekt. Deswegen brauche ich auch keine .exe/.pyz sondern reine .py files mit nem Interpreter und den ganzen dependencies.
Du meinst quasi `.venv/*` einfach mit schicken und an entsprechende Stelle entpacken? Ist es bei .venv nicht so, dass das irgendwie an den Ort gebunden ist? Sobald man den Ordner umbenennt oder verschiebt funktioniert der Spaß schon nicht mehr.
PyInstaller habe ich mir jetzt mal angeschaut, aber da kriege ich entweder nur ne .exe raus oder einen Ordner mit den ganzen Libs + .exe --> Ich kann mit der exe leider nichts anfangen, weil ich im Excel plugin den Pfad zum Python Interpreter setzen muss, welcher dann für die .py files augerufen wird.
Ich verstehe nicht, warum da keine Exe geht. Hat das was damit zu tun, wie diese “Plugins” aufgerufen werden? Ist das der gleiche Mechanismus wie beim “start some.py”-Kommando? Da würde ich jetzt vermuten klappt auch eine Exe.
Wenn es zwingend über eine Assoziation einer Endung zu einem Interpreter gehen muss, dann kannst du ja eine Fantasieendung wie pyp (Python Plugin) nehmen, und via registry mit einer pyinstaller-exe assoziieren. Am Ende ist das eh dann der echte Interpreter. Diese Assoziation sollte auch Inno anlegen können.
Wenn es zwingend über eine Assoziation einer Endung zu einem Interpreter gehen muss, dann kannst du ja eine Fantasieendung wie pyp (Python Plugin) nehmen, und via registry mit einer pyinstaller-exe assoziieren. Am Ende ist das eh dann der echte Interpreter. Diese Assoziation sollte auch Inno anlegen können.
Ich verwende als Library XLWings. https://docs.xlwings.org/en/stable/
Da gibt es ein VBA Modul für Excel, welches die Schnittstelle zwischen Excel und Python darstellt.
Für dieses VBA Modul muss man einen Python Interpreter einstellen.
Dieser Interpreter wird dann aufgerufen, importiert die gewünschte Funktion aus einer .py Datei und führt diese aus.
Da gibt es ein VBA Modul für Excel, welches die Schnittstelle zwischen Excel und Python darstellt.
Für dieses VBA Modul muss man einen Python Interpreter einstellen.
Dieser Interpreter wird dann aufgerufen, importiert die gewünschte Funktion aus einer .py Datei und führt diese aus.
Du meinst den, der in PRO enthalten ist?
Naja, weil PRO halt 1500€ im Jahr kostet und das hier ein Hobby-Projekt ist.
Ich habe jetzt eine Lösung gefunden, die erst mal zufriedenstellend ist. Über InnoSetup lade ich den Python installer runter und installiere einfach ne komplette Python Installiere auf dem Zielrechner. Inno Setup bietet auch die Möglichkeit externe Programme aufzurufen, also installiere ich die Abhängigkeiten einfach via pip.
Naja, weil PRO halt 1500€ im Jahr kostet und das hier ein Hobby-Projekt ist.
Ich habe jetzt eine Lösung gefunden, die erst mal zufriedenstellend ist. Über InnoSetup lade ich den Python installer runter und installiere einfach ne komplette Python Installiere auf dem Zielrechner. Inno Setup bietet auch die Möglichkeit externe Programme aufzurufen, also installiere ich die Abhängigkeiten einfach via pip.