2015-04-22 35 views
1

所以我有一個bbb在主要範圍以及ccc模塊。from __future__ import absolute_import not working?子模塊不可見

我加入了一個名爲tools庫裏面也有2個模塊稱爲bbbccc

工具

  • __init__.py
  • aaa.py
  • bbb.py
  • ccc.py

bbb.py我進口的主要範圍BBB有:

from __future__ import absolute_import 
import bbb 

ccc.py做同樣的事情:

from __future__ import absolute_import 
import ccc 

,但是當我輸入工具和DIR它,我只能看到:

['__builtins__', '__doc__', '__file__', 
'__name__', '__package__', '__path__', 'aaa'] 

b看起來不可見的bbbccc

我在這裏錯過了什麼嗎?

+0

是否有您所使用的'__future__'東西,在這種情況下,任何特殊的原因嗎? – Joe

+1

'from __future__ import absolute_import'專門關閉您嘗試使用的隱式相對導入行爲。 – user2357112

+0

@Joe我認爲我的具體案例沒有正確解釋。有一些模塊ccc和bbb與主範圍中的名稱相同。我有兩個模塊下具有相同名稱的工具,並在每個我從主範圍導入相應的模塊。這就是爲什麼我認爲我需要明確表示進口是絕對的。 – mtmt

回答

3

但是當我導入工具和目錄時,我只能看到:

['__builtins__', '__doc__', '__file__', 
'__name__', '__package__', '__path__', 'aaa'] 

bbbccc似乎不可見。

導入包不會自動加載其所有子模塊。如果你想使用tools.bbb包,你需要做的

import tools.bbb 
# or 
from tools import bbb 

import tools不會削減它。或者,你可以有tools明確載入其子模塊的__init__.py

# in __init__.py 
from . import aaa, bbb, ccc 
+0

這就解釋了一切。謝謝! – mtmt

+0

此外,如果工具是在另一個模塊下方topmodulename.tools直接使用tools.bbb.calls()的最佳方法是什麼?你如何導入這個,所以你不需要像topmodulename.tools.bbb.calls()這樣長時間的調用如果你不想導入工具中的所有子模塊.__ init__? – mtmt

+0

@mtmt:'from topmodulename.tools import bbb' – user2357112

1

使用點符號:

bbb.py,如果要導入aaa.py

from . import aaa 

從外面的工具,如果你想導入tools/aaa.py

from tools import aaa 
+0

謝謝。我仍然可以導入工具並調用tools.bbb.somemethod()? – mtmt

+0

@mtmt:你可以。 – user2357112

+0

嗯 - 這不完全是我以後的事情。我需要從bbb.py(bbb模塊在主範圍內)導入bbb,這就是爲什麼我使用的是absolute_import,但在導入工具時仍然無法看到bbb.py和ccc.py模塊; tools.bbb(「工具沒有叫做bbb的模塊」) – mtmt

相關問題