2017-08-01 10 views
3

Ich kann nicht scheinen, absolute Importe in Python zu arbeiten. Hier ist meine Dateistruktur:Absolute Importe in Python funktioniert nicht, relative Importe arbeiten

a/ 
    b/ 
    __init__.py 
    __init__.py 
    foo.py 

foo.py:

# Including or removing the __future__ import has no effect 
from __future__ import absolute_import 
from a import b # just `import b` works fine 
print "success!" 

ich stattdessen erhalten:

ImportError: No module named a 

Was in der Welt ist denn hier los? Ich habe das Gefühl, etwas Grundlegendes zu vermissen. Während dieses Beispiel trivial ist, brauche ich absolute Importe, um für das reale Projekt zu arbeiten, also ist es einfach, den Import durch einen relativen zu ersetzen. Ich verwende Python 2.7.13

Keine der Lösungen aufgelistet here Hilfe

Vielen Dank im Voraus für jede Einsicht!

+0

Ist 'foo.py' im 'a'-Verzeichnis? Sie zeigen es als außerhalb in Ihrem Diagramm. – user2357112

+0

mein Schlechter, danke für den Haken – lbear

+0

Es hört sich so an, als ob Sie den üblichen Fehler machen, ein Submodul eines Pakets direkt statt als Submodul zu betreiben. Es gibt irgendwo irgendwo einen Betrogenen - Tonnen von Betrogenen, wirklich, aber ich denke, es gibt mindestens einen guten. – user2357112

Antwort

2

Da es nicht gezeigt ist, muss ich davon ausgehen, du bist python a/foo.py ausgeführt wird, stellt dies das Verzeichnis des Skripts ('a') am Anfang sys.path wenn in Wirklichkeit geben Sie das aktuelle Verzeichnis auf dem Anfang sys.path wollen.

Sie sollten stattdessen python -m a.foo ausführen, die die sys.path Wurzeln für Ihre Projektstruktur korrekt initialisiert.

Hier ist a more in-depth writeup, dass ich auf andere Möglichkeiten schrieb, dass das gleiche Problem birnenhaft gehen kann.

+0

Danke! Das ist die Lösung/Erklärung, nach der ich gesucht habe. Der Link ist auch unglaublich hilfreich. – lbear

Verwandte Themen