Wie mit ausführbarer Datei für eigene Bibliothek umgehen?
Verfasst: Samstag 30. Juli 2011, 06:57
Ich habe meinem Projekt Launchit nun eine ausführbare Datei spendiert, welche einfach ein Python-Skript ohne `.py`-Endung ist und im Verzeichnis `bin` direkt unterhalb des Wurzelverzeichnisses liegt. Dieses Skript führt letztlich die `gui.main()` aus.
Da es derzeit noch kein Installationsskript für das Paket gibt und weil ich auch später den Anwender nicht dazu zwingen möchte, Launchit komplett zu installieren, wenn er es eigentlich nur mal aus dem Repo zum Ausprobieren aufrufen will, behelfe ich mir mit ein paar Zeilen zusätzlichem Code, um Launchit importieren zu können, obwohl die besagte Datei selbst nicht Teil eines Pakets ist (keine `__init__.py`). Dazu setze ich beim Aufruf des Executables einfach das darüberliegende Verzeichnis an den Anfang von `sys.path` und mache den Import von Launchit anschließend.
So weit, so gut. Was mich jetzt aber stört, ist der Gedanke, wenn es das Skript irgendwann mal als installierte Variante a la `/usr/bin/launchit` gibt. In diesem Fall würde es unsinnigerweise das darüberliegende Verzeichnis `/usr` in `sys.path` setzen, was von Pythons Import-Mechanismus zwar lautlos übergangen werden müsste, aber ja irgendwie trotzdem doof ist. Gibt es dafür irgendein besseres Vorgehen? Ist vielleicht auch meine Idee an sich schon blöde?
Ich freue mich auf eure Vorschläge.
Achso, hier die Umsetzung zum Zeitpunkt als der Beitrag verfasst wurde: https://github.com/seblin/launchit/blob ... n/launchit
Da es derzeit noch kein Installationsskript für das Paket gibt und weil ich auch später den Anwender nicht dazu zwingen möchte, Launchit komplett zu installieren, wenn er es eigentlich nur mal aus dem Repo zum Ausprobieren aufrufen will, behelfe ich mir mit ein paar Zeilen zusätzlichem Code, um Launchit importieren zu können, obwohl die besagte Datei selbst nicht Teil eines Pakets ist (keine `__init__.py`). Dazu setze ich beim Aufruf des Executables einfach das darüberliegende Verzeichnis an den Anfang von `sys.path` und mache den Import von Launchit anschließend.
So weit, so gut. Was mich jetzt aber stört, ist der Gedanke, wenn es das Skript irgendwann mal als installierte Variante a la `/usr/bin/launchit` gibt. In diesem Fall würde es unsinnigerweise das darüberliegende Verzeichnis `/usr` in `sys.path` setzen, was von Pythons Import-Mechanismus zwar lautlos übergangen werden müsste, aber ja irgendwie trotzdem doof ist. Gibt es dafür irgendein besseres Vorgehen? Ist vielleicht auch meine Idee an sich schon blöde?
Ich freue mich auf eure Vorschläge.
Achso, hier die Umsetzung zum Zeitpunkt als der Beitrag verfasst wurde: https://github.com/seblin/launchit/blob ... n/launchit