我有这个文件夹结构:

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

我在 submodule.py ,我想导入 misc.tools 。我不想使用绝对导入来导入 package.misc.tools ,因为这样我的包只有在 PYTHONPATH 上时才能工作。所以我想使用相对导入。但是,我还希望导入的名称是 misc.tools ,而不仅仅是 tools

是否可以?

最佳答案

关于什么...:

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

print misc.tools.__file__

这使得 misc.tools 可用,正如 print 所确认的那样,并且具有正确的名称和内容。

不可避免地,它也将相同的模块绑定(bind)到一些裸名——我选择 _ 作为典型的“丢弃裸名”,但当然,如果你愿意,你可以在此之后立即 del _ ,这不会影响 misc.tools

此外,在其 misc 中设置的 __init__.py 的任何其他属性(或特别是在 tools.py 中)都将可用,但是,如果裸名 misc 本身可用(因为它必须是复合名称 misc.tools 是必需的),那么它不可避免地会拥有它为自己构建的所有属性(或者从其他执行的代码为它构建的外部属性)。

关于python - Python 中尊重命名空间的相对导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1671362/

10-14 21:21