Python-Importklasse mit demselben Namen wie Verzeichnis [duplizieren]

9

Sagen wir, ich habe das folgende Python-Quelldatei-Layout:

%Vor%

und dann in meinem Quellcode:

%Vor%

Ich erhalte einen Importfehler:

%Vor%

Wie kann ich eine .py-Datei und ein Verzeichnis mit demselben Namen haben, damit ich Folgendes tun kann:

%Vor%

Danke im Voraus!

    
David Williams 26.04.2013, 20:56
quelle

2 Antworten

8

Das eigentliche Problem, das Sie mit einem einzelnen Import haben, liegt an den Paketen Vorrang vor Modulen haben:

  

Beachten Sie, dass bei Verwendung von from package import item das Element beides sein kann   ein Submodul (oder Unterpaket) des Pakets oder ein anderer definierter Name   im Paket, wie eine Funktion, Klasse oder Variable. Der Code%   Die Anweisung prüft zuerst, ob der Artikel im Paket definiert ist. ob   nicht, es nimmt an, dass es ein Modul ist und versucht es zu laden. Wenn es nicht gelingt   finde es, eine import Ausnahme wird ausgelöst.

Trotzdem würde ich stark vorschlagen, die Datei oder das Verzeichnis umzubenennen, da nicht mehr als ein Modul mit einem bestimmten Namen importieren kann. Das Problem tritt auf, weil jedes Modul / Paketobjekt in ImportError gespeichert wird, was eine einfache sys.modules ist und daher nicht mehrere gleiche Schlüssel enthalten kann.

Insbesondere unter der Annahme, dass sich dict und das foo.py -Verzeichnis in verschiedenen Verzeichnissen befinden (und wenn dies nicht der Fall ist, können Sie foo nicht importieren), wenn Sie Folgendes tun:

%Vor%

Es wird foo.py geladen und das Modul in foo.py gesetzt und dann versucht:

%Vor%

Scheitert, weil der Import versucht, das Modul sys.modules anstelle des Pakets zu verwenden.

Das Gegenteil passiert, wenn Sie zuerst foo.py ; Die Importe verwenden das Paket anstelle des Moduls.

    
Bakuriu 26.04.2013, 21:16
quelle
0

Ich bin mir ziemlich sicher, dass Sie das nicht tun sollten, aber Sie können Python zwingen, bestimmte Dateien als Modul zu importieren, indem Sie imp :

%Vor%

jetzt können Sie tun:

%Vor%     
Jacek Przemieniecki 26.04.2013 21:54
quelle

Tags und Links