gpt4 book ai didi

python - 为什么当上层与当前目录中的模块匹配时,导入点分模块名称会失败?

转载 作者:行者123 更新时间:2023-11-28 21:30:04 25 4
gpt4 key购买 nike

我正在尝试一个 Python 标准库模块,我们将其命名为 foo.bar.baz

所以我写了一个小脚本,开头为

import foo.bar.baz

并将其保存为foo.py

当我执行脚本时,我收到了导入错误。我花了一段时间(我还在学习Python),但我终于意识到问题出在我如何命名脚本上。一旦我将 foo.py 重命名为其他名称,问题就消失了。

所以我知道 import foo 语句将在查找标准库 foo 之前查找脚本 foo.py,但它是当我说 import foo.bar.baz 时,我不清楚它在寻找什么。有什么方法可以使 foo.py 的内容有意义吗?如果不是,为什么 Python 解释器不继续寻找具有适当 __init__.py 的目录层次结构,例如 foo/bar ?。

最佳答案

import foo.bar.baz这样的导入语句首先导入foo,然后向其询问bar,然后询问 foo.bar 代表 bazfoo 一旦导入后是否能够满足 barbar.baz 的请求对于 foo 的导入并不重要。它只是一个模块。只有一个 foo 模块。 import fooimport foo.bar.baz 都会找到相同的模块——就像导入 foo 模块的任何其他方式一样。

实际上有一种方法可以让 foo 成为单个模块,而不是一个包,并且仍然能够满足像 import foo.bar.baz 这样的语句:它可以将 "foo.bar""foo.bar.baz" 添加到 sys.modules 字典中。这正是 os.path 模块所做的:它为平台导入正确的“路径”模块(posixpath, >ntpathos2path 等),并将其分配给 path 属性。然后它执行 sys.modules["os.path"] = path 以使该模块可作为 os.path 导入,因此像 import os.path 这样的语句 有效。确实没有理由这样做 - os.path 无需导入即可使用 - 但这是可能的。

关于python - 为什么当上层与当前目录中的模块匹配时,导入点分模块名称会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846821/

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