Seite 1 von 1

import eigener Module, Problem mit Pfaden

Verfasst: Samstag 10. November 2012, 17:30
von bastel-wastel
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

Re: import eigener Module, Problem mit Pfaden

Verfasst: Samstag 10. November 2012, 18:01
von EyDu
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.

Re: import eigener Module, Problem mit Pfaden

Verfasst: Samstag 10. November 2012, 18:02
von mutetella
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

Re: import eigener Module, Problem mit Pfaden

Verfasst: Sonntag 11. November 2012, 16:59
von bastel-wastel
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

Re: import eigener Module, Problem mit Pfaden

Verfasst: Sonntag 11. November 2012, 17:10
von Sirius3
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

Re: import eigener Module, Problem mit Pfaden

Verfasst: Sonntag 11. November 2012, 17:16
von bastel-wastel
Hi Sirius,
danke für das Code-Beispiel. Funktioniert prima!
Wieder was gelernt ;)

Grüße
bastel