我有这个文件夹结构:
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/