Python-Interpreter findet Modul nicht

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
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Montag 21. Februar 2011, 13:02

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

Montag 21. Februar 2011, 13:14

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?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Montag 21. Februar 2011, 13:35

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

Montag 21. Februar 2011, 14:04

@snakemake: Ich würde einfach mal behaupten, dass es das Verzeichnis `/A/a1` gar nicht gibt. Das ist ein *absoluter* Pfad!
snakemake
User
Beiträge: 32
Registriert: Sonntag 6. Juni 2010, 19:20

Montag 21. Februar 2011, 14:24

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 21. Februar 2011, 21:43

Nein, er durchsucht Pfade nicht rekursiv. Wozu auch, es gibt Packages.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten