2009-11-04 48 views
3

相對進口我有這樣的文件夾結構:命名空間,尊重在Python

package/ 
    __init__.py 
    misc/ 
     __init__.py 
     tools.py 
    subpackage/ 
     __init__.py 
     submodule.py 

我在submodule.py,我想進口misc.tools。我不想使用絕對導入來導入package.misc.tools,因爲那時我的包只能在PYTHONPATH上運行。所以我想使用相對導入。但是,我還希望導入的名稱是misc.tools,而不僅僅是tools

可能嗎?

回答

5

怎麼樣...:

from .. import misc 
from ..misc import tools as _ 

print misc.tools.__file__ 

這使得misc.tools可用,爲print確認,並用正確的名稱和內容。

不可避免的是,它也結合同一模塊一些barename - 我選擇_作爲一個典型的「扔掉的barename」,當然你可以用鼠標右鍵後,如果你願意的話,那del _不會影響misc.tools

而且,misc任何其他屬性在其__init__.py(或在tools.py特有)將是可用的,但是然後,如果barename misc本身是可用的(因爲它必須是如果需要化合物名稱misc.tools),那麼它的設置它不可避免地會擁有它爲自己構建的所有屬性(或者從其他執行代碼爲其構建的外部屬性)。