2009-11-04 132 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),那么它的设置它不可避免地会拥有它为自己构建的所有属性(或者从其他执行代码为其构建的外部属性)。