2015-09-30 73 views
0

這裏是我的目錄結構的圖片:Python模塊的進口問題

parts.py 
machine/ 
    __init__.py 
    parts.py 

我有一個目錄(包)被稱爲機

它有__init__.py和parts.py

處於與機器同一級別,在parts.py中有一個名爲parts.py

的文件,代碼如下所示:

#parts.py 
class Parts(object): 
    pass 

在machine.parts代碼看起來像這樣

#machine.parts 
from parts import Parts 
class MachineParts(Parts): 
    pass 

當我嘗試導入machine.parts,我得到一個導入錯誤。我不想改變我的目錄結構。我應該如何解決這個問題並保持良好的PEP8風格?

+0

在你說的是什麼意思machine.parts'從零部件進口Parts' – praba230890

+0

的感謝!我更正了錯字 – pepper

+1

您應該將它全部包裝(通過在parts.py'附近添加'__init __。py')並使用絕對導入,例如'from mypackage.parts import Parts'。 – alexanderlukanin13

回答

1

提到你應該讓包通過添加頂級__init__.py,併爲頂級目錄提供一些有意義的名稱:

mypackage 
    __init__.py 
    parts.py 
    machine/ 
     __init__.py 
     parts.py 

然後,使用絕對導入:

#machine.parts 
from mypackage.parts import Parts 
class MachineParts(Parts): 
    pass 
0

由於import支持相對導入,請嘗試:

from ..parts import Parts 

另一種選擇是使用絕對導入:

from appname.parts import Parts 

正如How to import a Python class that is in a directory above?

+0

相對進口被認爲是不好的風格 – pepper

+1

但它是PEP328的一部分 - 那種不好的風格?命名文件相同的名稱也可能被認爲是不好的風格...混淆你的開發夥伴(考慮'parent_parts.py'?) – Incognos

+0

公平,我只讀不使用谷歌styleguide中的相對導入。雖然 – pepper