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

发布于 2024-08-09 19:54:09 字数 404 浏览 4 评论 0原文

我有这样的文件夹结构:

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

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

是否可以?

I have this folder structure:

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

I am in submodule.py, and I would like to import misc.tools. I don't want to use absolute import to import package.misc.tools, because then my package would only work when it's on the PYTHONPATH. So I want to use relative imports. But then, I also want the imported name to be misc.tools, and not just tools.

Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自我难过 2024-08-16 19:54:09

怎么样...:

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

print misc.tools.__file__

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

不可避免地,它将相同的模块绑定到一些裸名 - 我选择_作为典型的“一次性裸名”,但当然您可以如果您愿意,可以在之后立即删除 _,这不会影响 misc.tools

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

What about...:

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

print misc.tools.__file__

This makes misc.tools available, as the print confirms, and with the right name and contents.

Inevitably, it also binds the same module to some barename -- I've chosen _ as a typical "throw-away barename", but of course you can del _ right after that, if you wish, and that won't affect misc.tools.

Also, any other attribute of misc set in its __init__.py (or peculiarly in tools.py) will be available, but then, if the barename misc itself is available (as it must be if compound name misc.tools is required), then it's inevitable that it will have all attributes it builds for itself (or that get externally built for it from other code that executes).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文