2014-01-15 57 views
19

我在我的Python 3.3項目中有一個目錄叫/ models。如何從同一目錄導入python類文件?

從我main.py我只是做了

from models import * 

在我__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 

這從我的應用程序的偉大工程。

我有一個模型依賴於其他模型,使得我engine.py我需要導入finding.py

在engine.py

,當我這樣做:from finding import Finding

我得到的錯誤No Such Module exists

如何從同一模塊/目錄中的文件A導入類B?

編輯1: 顯然我可以這樣做:from .finding import Finding這個工程。下面的答案反映了這一點,所以我想這是相當正確的。我修復了我的文件命名並將我的測試移到了不同​​的目錄,現在我的運行順利。謝謝!

+0

您正在使用什麼版本的Python? – geoffspear

+0

我正在使用Python 3.3 – Yablargo

+3

Python 3不允許隱式相對導入。 – geoffspear

回答

29

由於您使用的Python 3不允許這些相對導入(它可能會導致不同軟件包中同名模塊之間的混淆)。

二者必選其一:

from models import finding 

import models.finding 

,或者可能是最好的:

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

我認爲最後一個應該是'from'。導入發現「(否則,會引發SyntaxError - 至少對於python 3.5來說)。 –

+0

我想從。導入查找更好,因爲它不會對目錄名稱進行硬編碼,也可以通過這種方式避免使用其他模塊的任何可能的名稱類別 – minhajul

相關問題