2014-01-15 16 views
19

Ich habe ein Verzeichnis in meinem Python 3.3-Projekt namens/models.Wie importiere ich die Python-Klassendatei aus demselben Verzeichnis?

von meinem main.py ich einfach eine

from models import * 

in meinem __init__.py

__all__ = ["Engine","EngineModule","Finding","Mapping","Rule","RuleSet"] 
from models.engine import Engine,EngineModule 
from models.finding import Finding 
from models.mapping import Mapping 
from models.rule import Rule 
from models.ruleset import RuleSet 

Diese aus meiner Anwendung funktioniert gut.

Ich habe ein Modell, das auf einem anderen Modell abhängt, so dass in meinem engine.py muss ich finding.py

in engine.py importieren, wenn ich das tue: from finding import Finding

erhalte ich die Fehler No Such Module exists

Wie kann ich Klasse B aus der Datei A im selben Modul/Verzeichnis importieren?

Edit 1: Anscheinend kann ich tun: from .finding import Finding und das funktioniert. Und die Antwort unten spiegelt das ebenfalls wider, also denke ich, dass das einigermaßen korrekt ist. Ich habe meine Dateibenennung korrigiert und meine Tests in ein anderes Verzeichnis verschoben und ich laufe jetzt reibungslos. Vielen Dank!

+0

Welche Version von Python verwenden Sie? – geoffspear

+0

Ich benutze Python 3.3 – Yablargo

+3

Python 3 erlaubt keine impliziten relativen Importe. – geoffspear

Antwort

29

Da Sie Python 3 verwenden, was diese relativen Importe verbietet (es kann zu Verwechslungen zwischen Modulen desselben Namens in verschiedenen Paketen führen).

Verwenden Sie entweder:

from models import finding 

oder

import models.finding 

oder, wahrscheinlich am besten:

from . import finding # The . means "from the same directory as this module" 
+5

Ich denke, dass die letzte "aus" sein sollte. Import Find' (sonst wird SyntaxError ausgelöst - zumindest für mich auf Python 3.5). –

+0

Ich nehme an. Import-Finding ist besser, da der Verzeichnis-Name nicht fest codiert wird, auch eine mögliche Namens-Klasse mit einem anderen Modul wird auf diese Weise abgewendet – minhajul

Verwandte Themen