gpt4 book ai didi

python - 从 __init__.py 文件相对导入抛出错误

转载 作者:太空狗 更新时间:2023-10-29 22:16:01 25 4
gpt4 key购买 nike

所以我使用的是同事设置的模板,作为 python 的新手,我可能遗漏了一些非常明显的东西。

主目录有一个 init 文件,它有一个我需要的模块,用于生成错误的主 python 文件。

同事使用:

from . import X

其中 X 是模块,但是当将此(和填充的初始化文件)复制到我自己的目录时,它会生成此错误:

ValueError: Attempted relative import in non-package

从谷歌和 SO 我收集到这非常好并且合乎逻辑,所以我想知道,作为一个新手,我错过了什么。

最佳答案

您必须了解 Python 如何处理模块。

当您使用脚本启动解释器时,该脚本成为主模块,并具有匹配的名称 __main__

使用 import 时,会在搜索路径中搜索其他模块,您也可以使用 sys.path 访问(和更改)这些模块。 sys.path 的第一个条目通常为空,代表当前目录。

如果搜索路径中的目录包含 __init__.py 文件,则它是一个包。

现在,当您在包含 __init__.py 文件的目录中执行脚本时,该脚本将变为 __main__ 并且该目录不被视为包,因为它不在 sys.path 中!

例如,考虑以下目录布局:

root/    pkg/        __init__.py        b.py        c.py    a.py

当您从 root/ 目录运行 python a.py 时,您可以导入 pkg/ 并在此包中使用相对导入 (例如,from .import c in b.py__init__.py)。

当您从 pkg 目录运行 python b.py 时,您不能使用相对导入,因为 Python 无法将 pkg 识别为包: 它不在 sys.path 中。对于Python,pkg是一个普通的目录,不管它是否包含一个__init__.pyc.py 的完全限定名称只是 c,而不是 pkg.c,因此一个相对的 from .导入 c 将不起作用。

关于python - 从 __init__.py 文件相对导入抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22942650/

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