Import funktioniert nicht aus allen Verzeichnissen

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
Azrael
User
Beiträge: 5
Registriert: Donnerstag 31. März 2005, 13:57

Dienstag 26. Juli 2005, 09:55

Hi!

Ich schreibe das erste Mal hier etwas rein, und hoffe ich mache alles richtig ;-) Mein Problem ist wahrscheinlich sehr simpel, aber ich finde es über die Suche nirgends, auch nicht in den Dokus und von daher frage ich doch lieber direkt:

Ich habe in einem größeren existierenden Python-Projekt ein Verzeichnis mit mehreren Unetrverzeichnissen. In einem der Unterverzeichnisse lag eine Python-Datei die eine Klasse aus einer Datei des Hauptverzeichnisses importierte:

Code: Alles auswählen

from analyzer.frame_main import OpenFileEvent
analyzer ist das Hauptverzeichnis, frame_main eine Datei darin, in der die Klasse OpenFileEvent definiert wurde. Das hat funktioniert, alles ist richtig geschrieben, die Namen stimmen. Ich habe diese Datei aus dem einen Verzeichnis in ein neu erstelltes weiteres direktes Unterverzeichnis geschoben, und nun funktioniert die Import-Anweisung nicht mehr - obwohl die Pfadangabe immernoch stimmt.
Nach einigen weiteren Änderungen habe ich das Problen noch ein weiteres Mal:

Ich habe jetzt drei direkte Unterverzeichnisse die diese Klasse aus der Datei aus einem Ordner höher importieren - in einem Unterverzeichnis klappt es, in den beiden anderen nicht. Die import-Anweisung ist identisch. Ich denke es ist irgendwas mit den Package-Definitionen von Python, aber ich komme nicht dahinter. Alle Verzeichnisse haben __init__.py Dateien, die jedoch außer im Hauptverzeichnis fast leer sind.

Bestimmt was ganz simples, aber ich werde da nicht schlau draus! Freue mich über jede Hilfe :-)

Gruß,
Martin
linde_user
User
Beiträge: 25
Registriert: Mittwoch 20. April 2005, 11:47

Dienstag 26. Juli 2005, 10:25

Also ich habe zur Zeit ein ähnliches Problem. Zur __init__.py kann ich Dir aber sagen, dass diese Datei anzeigt, dass der Ordner über import- Befehle geladen werden kann- Genauso wie ein normales Modul. Die Frage ist lediglich ob das System den Ordner findet. Ich habe nach der Installation von Zusatzpaketen immer die PATH- Variablen geändert, aber diesmal funktioniert das bei meinem Problem, welches mit Deinem im Prinzip identisch ist auch nicht. Aber versuchen kannst Du es mal. :arrow:
Azrael
User
Beiträge: 5
Registriert: Donnerstag 31. März 2005, 13:57

Dienstag 26. Juli 2005, 10:31

Der Ordner selbst wird glaube ich schon gefunden, weil ich mehrere andere import-Anweisungen habe, die funktionieren, wie zum Beispiel:

Code: Alles auswählen

from analyzer.codecheck.filter_panel import FilterPanel
nur die Dateien direkt aus dem Ordner analyzer scheinen Probleme zu machen.... :-(
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Dienstag 26. Juli 2005, 13:47

Hoi,

ganz einfach. Das geht so:

Angenommen Du hast ein Hauptverzeichnis (HV) mit Deinem Hauptskript/-Programm. Und außerdem noch Unterverzeichnisse (UV). Dann sieht Deine Verzeichnisstruktur z. B. so aus:

HV
|
|-> meinscript.py
|
|-> UV1
| |
| |-> __init__.py (leer)
| |-> modul1.py
|
|-> UV2
...

Dann kannst Du in meinscript.py folgendermaßen importieren:

Code: Alles auswählen

from UV1.modul1 import meine_klasse
#oder
import UV1.modul1
#oder ...
Eigentlich muß __init__.py nur in den Unterverzeichnissen liegen und stehts leer sein - Python screibt sich dann schon das rein, was es braucht (in die pyc-Dateien).

Gruß,
Christian
Azrael
User
Beiträge: 5
Registriert: Donnerstag 31. März 2005, 13:57

Donnerstag 28. Juli 2005, 09:42

Danke! :-)
Aber mein Problem war andersrum -> ich will im Unterverzeichnis aus dem Hauptverzeichnis importieren (also quasi myscript.py aus deinem Beispiel). Hab in der Zwischenzeit die Verzeichnisstruktur so geändert, daß ich von der gleichen Verzeichnistiefe importiere und jetzt geht es - weiß Gott warum das vorher nicht ging... ;-) Aber ich glaube so ist es auf jeden Fall besser - ein Unterverzeichnis sollte wahrscheinlich programmiertechnisch gesehen sowieso nicht von oberhalb importieren!
Trotzdem Danke :-)
Gruß,
Martin
Antworten