2016-09-16 49 views
1

我有很多理解python模塊導入系統的麻煩。相關的Python模塊

我想創建一個簡單的文件夾結構如下。

SomeModule 
    __init__.py 
    AnotherModule 
     AnotherModule.py 
     __init__.py 
     Utils 
      Utils.py 
      __init__.py 

要使用SomeModule我可以這樣做:

SomeModule.Foo() 

現在裏面AnotherModule.py我想導入我的Utils目錄。

爲什麼我要做

import SomeModule.AnotherModule.Utils.Foo 

爲什麼我不能只是做

import Utils.Foo 
+2

因爲_explicit優於implicit._ – wim

+0

所以模塊必須知道它的完整路徑?你不能將模塊移動到另一個模塊目錄而不改變文件中的每個導入? – marsh

+0

如果你感覺很勇敢,你可以在'import .Utils'處去。 – wim

回答

0

要縮短了,你必須在你的代碼來調用實際的函數名,可以隨時做:

from SomeModule.AnotherModule.Utils import * 

雖然這仍然不會讓你擺脫一個較短的進口聲明在頂部您的腳本,您只需調用其功能名稱即可訪問.Utils中的所有功能(即, foo(x)而不是SomeModule.AnotherModule.Utils.foo(x)

冗長導入聲明的部分原因來自@wim的評論。在python解釋器中輸入import this來查看。

0

import sys 
import SomeModule.AnotherModule 
sys.modules['AnotherModule'] = SomeModule.AnotherModule 

在SomeModules __init__.py