命名空间 - 尊重Python中的相对导入

Ram*_*hum 3 python import relative-path

我有这个文件夹结构:

package/
    __init__.py
    misc/
        __init__.py
        tools.py
    subpackage/
        __init__.py
        submodule.py
Run Code Online (Sandbox Code Playgroud)

我在submodule.py,我想导入misc.tools.我不想使用绝对导入来导入package.misc.tools,因为那时我的包只能在PYTHONPATH上使用.所以我想使用相对导入.但是,我还想要导入的名称misc.tools,而不仅仅是tools.

可能吗?

Ale*_*lli 5

关于什么...:

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

print misc.tools.__file__
Run Code Online (Sandbox Code Playgroud)

misc.tools可以作为print确认,并使用正确的名称和内容.

不可避免地,它将同一个模块绑定到一些名字 - 我选择_了一个典型的"丢弃的名字",但当然你可以del _在那之后,如果你愿意,那不会影响misc.tools.

而且,任何其他属性misc集的__init__.py(或特有tools.py)将是可用的,但是呢,如果barename misc本身是可用的(因为它必须是如果化合物名称misc.tools是必需的),那么这是不可避免的,它将拥有所有属性它建立为自己(或从其他代码执行外部构建).