我有这个文件夹结构:
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
。
此外,在其 __init__.py
(或特别是在 tools.py
)中设置的 misc
的任何其他属性都将可用,但是然后,如果裸名 misc
本身可用(如果需要复合名称 misc.tools
就必须可用),那么它将不可避免地具有它为之构建的所有属性本身(或者从其他执行的代码中为它构建的外部代码)。
关于python - Python 中尊重命名空间的相对导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1671362/