Seite 1 von 1

Python-Interpreter findet Modul nicht

Verfasst: Montag 21. Februar 2011, 13:02
von snakemake
Hallo,

ich habe eine einfache Ordnerstruktur, die so aussieht (Linux Kubuntu):

/A
|__a1--db.py
|__a2--experiment.py
/B
|__b1--...
|__b2...

Ich bin in experiment.py im Unterordner (Pythonpackage) a2 und hab folgendes geschrieben:

Code: Alles auswählen

import sys
sys.path.insert(0, "/A/a1")
from a1 import db
Leider kriege ich die Meldung:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named a1
Ich habe auch den PYTHONPATH überprüft und mein Verzeichnis ist drin, also sollte der Interpreter eigentlich das Verzeichnis finden. Das passiert auch, wenn ich weitere Module aus a1 importieren will. Warum? Früher hat es immer so funktioniert. Jetzt auf einmal nicht mehr...

Re: Python-Interpreter findet Modul nicht

Verfasst: Montag 21. Februar 2011, 13:14
von sparrow
Ich habe noch nicht verstanden was du vor hast, aber denkst du daran, dass ein Modul immer eine __init__.py enthalten muss um als solches erkannt zu werden?

Re: Python-Interpreter findet Modul nicht

Verfasst: Montag 21. Februar 2011, 13:35
von cofi
sparrow hat geschrieben:Ich habe noch nicht verstanden was du vor hast, aber denkst du daran, dass ein Modul immer eine __init__.py enthalten muss um als solches erkannt zu werden?
Das gilt für packages und der OP umgeht das. indem er den Pfad aendert.

Die saubere Variante sind aber packages und relative Importe.

Re: Python-Interpreter findet Modul nicht

Verfasst: Montag 21. Februar 2011, 14:04
von BlackJack
@snakemake: Ich würde einfach mal behaupten, dass es das Verzeichnis `/A/a1` gar nicht gibt. Das ist ein *absoluter* Pfad!

Re: Python-Interpreter findet Modul nicht

Verfasst: Montag 21. Februar 2011, 14:24
von snakemake
also die __init__ Datei existiert.

Mir ist etwas aufgefallen. Wenn ich schreibe:

sys.path.insert(0, "/home/me/scripts")

wird dann der Interpreter in scripts auch alle Unterordner (also rekursiv) nach meinen importierten Modulen durchsuchen? Ich habe nämlich die genannten Verzeichnisse A, B usw. in einem Unterordner von "scripts". Vorhin, als ich nur

sys.path.insert(0, "/home/me")

hatte, kam halt die Fehlermeldung, aber sobald ich "scripts" hinzugefügt habe, hat es geklappt...

Re: Python-Interpreter findet Modul nicht

Verfasst: Montag 21. Februar 2011, 21:43
von Leonidas
Nein, er durchsucht Pfade nicht rekursiv. Wozu auch, es gibt Packages.