import eigener Module, Problem mit Pfaden

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
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

Hallo miteinander,
bei meinem python-Programm lagere ich bestimmte Funktionen in eine eigene kleine Bibliothek "meinmodul" aus. Diese befindet sich als Datei im gleich Verzeichnis, in dem das eigentlich Python-Programm "meinskript" liegt. Im Skript importiere ich einfach dieses Modul:

Code: Alles auswählen

import meinmodul
Das funktioniert auch prima, sofern ich das Skript aus dem Verzeichnis heraus starte, in dem es liegt. Ich möchte das Programm aber auch aus anderen Verzeichnissen starten können um dortige Datendateien damit zu analysieren.

Befinde ich mich jedoch in einem anderen Pfad und rufe das Skript auf, dann findet dieses meine Bibliothek nicht, da das working-Verzeichnis anders ist. Bsp. befinde ich mich im Verzeichnis B und mein Skript samt Bibliothek befindet sich in Verzeichnis A. Wenn ich das Skript über die Konsole mit
>>> python A/meinsript.py
starte, dann ist das working-Verzeichnis ja immer noch B und "meinscript" findet "meinmodul" nicht.

Dieses Problem müsste ja jeder haben, der ein Python-Programm mit eigenen Modulen erstellt.
Wie löst man dieses Problem am besten? Diesbezüglich habe ich noch nichts gefunden.
Absolute Pfadangaben können sicher nicht die Lösung sein. Vor allem, wenn man das Programm weitergeben möchte.

Grüße
bastel
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo,

das kann nicht sein. Ein Script sucht bei Importen immer als erstes in dem Verzeichnes, in dem das Script auch liegt. Das Arbeitsverzeichnis hat damit nichts zu tun.

Zeige also bitte immer die Fehlermeldung und den gesamten Traceback, sonst kann man nur raten.
Das Leben ist wie ein Tennisball.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Entweder, Dein Modul muss im selben Verzeichnis wie das gestartete Programm liegen (was Du ja nicht möchtest) oder das Modul muss in einem Pfad liegen, das von Python beim import-Vorgang durchsucht wird.
Diese Pfade sind unter anderem in 'sys.path' zu finden.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

Hallo,
danke für Eure Antworten. Ihr habt vollkommen Recht, mein Modul wird gefunden. Habe da leider etwas verwechselt.

Das Problem tritt jedoch bei einem "glade"-File auf. Habe mit glade eine kleine Oberfläche erstellt und in einem *.glade-File abgespeichert. Und genau diese Datei findet er dann nicht beim Aufruf:

Code: Alles auswählen

gladefile = "glade_gui.glade"  
windowTree = gtk.glade.XML(gladefile)
Dieses Problem tritt definitiv durch das Arbeitsverzeichnis auf, das ja dort ist, von wo das Programm aufgerufen wird. Er findet dann einfach das File nicht:

Code: Alles auswählen

(pyBCH_GTK.py:2438): libglade-WARNING **: could not find glade file 'glade_gui.glade'
Traceback (most recent call last):
  File "/media/ramdisk/pyBCH_GTK.py", line 284, in <module>
    windowTree = gtk.glade.XML(gladefile)
RuntimeError: could not create GladeXML object



Wie sollte ich hier vorgehen?

Grüße
bastel
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Wastel,

innerhalb eines Modules kannst Du mit

Code: Alles auswählen

import os
pfad_wo_das_modul_liegt = os.path.dirname(__file__)
dateiname = os.path.join(pfad_wo_das_modul_liegt,"glade_gui.glade")
auf lokal zum Modul liegende Dateien zugreifen.

Grüße
Sirius
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

Hi Sirius,
danke für das Code-Beispiel. Funktioniert prima!
Wieder was gelernt ;)

Grüße
bastel
Antworten