Programm inkl. Python Env an Endanwender verteilen?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
JohnSnock
User
Beiträge: 15
Registriert: Mittwoch 11. August 2021, 19:44

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.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Embedded Python ist für andere Zwecke gedacht. Du Sicht sowas wie pyinstaller.
JohnSnock
User
Beiträge: 15
Registriert: Mittwoch 11. August 2021, 19:44

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.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
JohnSnock
User
Beiträge: 15
Registriert: Mittwoch 11. August 2021, 19:44

sparrow hat geschrieben: Samstag 8. Oktober 2022, 09:11das Programm gar nicht selbst ausgeführt werden muss, sondern aus Excel heraus getriggertwird, wenn ich das richtig sehe.
Korrekt. Deswegen brauche ich auch keine .exe/.pyz sondern reine .py files mit nem Interpreter und den ganzen dependencies.
sparrow hat geschrieben: Samstag 8. Oktober 2022, 09:11 Alternativ kann man auch den Interpreter inklusive packages einfach kopieren.
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.
JohnSnock
User
Beiträge: 15
Registriert: Mittwoch 11. August 2021, 19:44

Hm ich tu mich hier echt schwer. Das ist so ziemlich das erste mal wo ich ne Anwendung in dieser Form verpacken und vertreilen möchte. Alles was man im Netz so findet ist entweder zu exe oder als Python package.
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
JohnSnock
User
Beiträge: 15
Registriert: Mittwoch 11. August 2021, 19:44

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.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum machst du dir so einen Aufwand, wenn es doch von xkwings den 1-click installer gibt?
JohnSnock
User
Beiträge: 15
Registriert: Mittwoch 11. August 2021, 19:44

Du meinst den, der in PRO enthalten ist?
Naja, weil PRO halt 1500€ im Jahr kostet und das hier ein Hobby-Projekt ist. :D

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.
Antworten