相对导入中超出顶级包错误
当尝试超出顶级包的相对导入时,Python 会抛出“ValueError: attempts”相对导入超出顶级包”错误。为了理解原因,让我们分析一下提供的包结构:
package/ __init__.py A/ __init__.py foo.py test_A/ __init__.py test.py
在 test.py 中,来自 ..A import foo 的行尝试从 A 子包导入,该子包无法从test_A 子包。 Python 要求相对导入保留在当前包的范围内。
从包文件夹中执行 python -m test_A.test 时,Python 将 test_A.test 解释为当前包中的模块。但是,它不再将 package 视为包,因为 -m 标志直接调用该模块。这会导致相对导入尝试超出顶级包(package),从而触发错误。
相反,当从父文件夹执行 python -m package.test_A.test 时,Python 会识别 package作为一个包并允许在其范围内进行相对导入。这成功地解析了 from ..A import foo,因为 A 子包可以在 package 包内访问。
此错误凸显了确保相对导入保留在当前包范围内的重要性。当直接使用 -m 标志调用模块时,Python 不会将当前工作目录视为一个包,这可能会导致像遇到的错误。
以上是为什么 Python 会抛出'ValueError:尝试相对导入超出顶级包”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!