Ich habe mir Code mit zwei __import__
-Anweisungen angeschaut, und die zweite __import__
-Anweisung funktioniert nur, wenn der erste bereits ausgeführt wurde.
Die Verzeichnisstruktur ist wie folgt:
%Vor% Der Code enthält zwei __import__
-Anweisungen:
Der erste macht Sinn - es ist in etwa das Äquivalent von
%Vor%, ermöglicht jedoch, dass das Unterverzeichnis und die Datei dynamisch bereitgestellt werden. Es ist die zweite Aussage, die ich nicht verstehe, warum es funktioniert. Es sieht so aus, als sollte es das Äquivalent von
sein %Vor% Dies sollte nicht funktionieren, da file2.py
in subdir1
ist, aber mein aktuelles Arbeitsverzeichnis liegt zwei Ebenen darüber. Darüber hinaus sind alle __init__.py
-Dateien leer.
Wie zu erwarten, schlägt die zweite Importanweisung mit einem ImportError
fehl, wenn sie selbst ausgeführt wird. Nachdem jedoch die erste Importanweisung ausgeführt wurde, wird die zweite ausgeführt. Warum?
Es sind nicht nur die __import__-Anweisungen, da ich dieses Verhalten nicht replizieren kann.
%Vor%Gibt folgende Struktur:
%Vor%Der von Ihnen gepostete 2. __import__ -Befehl schlägt jedoch erwartungsgemäß fehl:
%Vor% Es stellt sich heraus, dass die Erklärung ziemlich dumm ist. file1
ändert sys.path
, um subdir1
zum Pfad hinzuzufügen. Mit subdir1
auf dem Pfad kann es offensichtlich file2
direkt finden, ohne irgendwelche Pakete angegeben zu haben.
Moral der Geschichte - Nebenwirkungen (wie Dinge passieren, wenn Sie ein Modul importieren) sind dumm, weil es häufig Probleme verursachen kann, die bizarr erscheinen und schwer zu diagnostizieren sind.
Tags und Links python python-import python-2.7