gpt4 book ai didi

python - 更多相对进口奇数 : . 。符号

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:02 25 4
gpt4 key购买 nike

我注意到我提出了大约 5 个问题来询问相对导入,每个问题都有可行的解决方案,但情况不同。我阅读文档的次数越多,尝试不同案例的次数越多,我就越感到困惑,并质疑我是否真的正确地阅读了这些词。

来自 pep 328:

A single leading dot indicates a relative import,starting with the current package. Two or more leading dotsgive a relative import to the parent(s) of the current package,one level per dot after the first.

我的理解是“当前包”是这里的关键词。什么是“当前包”?它是执行开始的模块的包吗? (即:具有 __ 名称 __ == "__ main __"的文件)。

无论如何,这是我使用 .. 的简单情况符号。

main/  lib/    __init__.py    myLib.py  plugin/    __init__.py    needLib.py  run.py

run.py 导入 needLib:from plugin import needLib

needLib 导入 myLib:from ..lib import myLib

我的脑子里在想什么:(needLib) 上一个包,进入 lib,获取 myLib

以下是我的执行方式:python run.py

结果:尝试相对导入超出顶层包

但是当我将导入调用更改为 from .lib import myLib 时, 它有效。

我不明白为什么后者有效,而 ..符号没有。当然,main不是一个包,所以我只是扔一个 <strong>init</strong>.py 怎么样?也有,导致

main/  lib/    __init__.py    myLib.py  other/    __init__.py    needLib.py  __init__.py  run.py

但这并没有什么不同;仍在尝试导入超出顶级包

查看此问题:python: forcing relative imports to search from script file

..符号实际上有效!现在想想,我不明白为什么会这样。该场景中的执行从相对导入发生的位置向上 2 级开始,而该场景中的执行从相对导入发生的位置向上 1 级开始。除了我开始执行的地方,情况是相同的。

两者都是我说的“向上一个目录,进入 lib 包,然后获取你想要的模块”。

这种情况与引用情况之间的主要区别是什么?为什么 ..在那里工作,但不在这里?我使用 2.6 与此有什么关系吗?或者也许我是如何执行它的? python run.py

最佳答案

如您所见,from ..lib import myLib 不起作用,因为 main 不是包。相对导入仅适用于模块自己的包。在您的示例中,libother 是两个不同的包。

__init__.py 放入 main 仅当您将 run 移动到新创建的 main 之外时才有效包,以便当前目录(sys.path 的一部分)在包内。

关于python - 更多相对进口奇数 : . 。符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com