Warum beeinflusst eine __import__ Anweisung die Gültigkeit der nächsten?

8

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:

%Vor%

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?

    
Rob Watts 18.06.2014, 01:51
quelle

2 Antworten

4

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%     
Peter Gibson 18.06.2014, 02:22
quelle
5

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.

    
Rob Watts 18.06.2014 03:02
quelle