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

标签 python import relative-path

我有这个文件夹结构:

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/

相关文章:

mysql - 尝试将数据导入 mySql 时找不到 frm 文件

javascript - 从 D3 中的多个 csv 文件导入数据

r - 保留大数

c# - 如何在 C# 中使用相对路径实例化新的 ChromeDriver?

python - 如何使用 Python 和 GTK 创建具有自定义文本和透明背景的状态图标/系统托盘图标?

python - Twilio 模块通过 Python 发送电子邮件内容

c++ - 异常退出失败,c++ 调用 python 脚本

python - 如何在python中删除包含非ascii值的行

string - 从PowerShell中的绝对路径获取相对路径

php - 为什么许多 PHP 开发人员使用 "__DIR__ . ' ../otherFolder'"?