相对导入错误:超出顶级包
在 Python 3 中,相对导入提供了一种便捷的方式来引用同一包中的模块目录或包。但是,遇到“ValueError:尝试相对导入超出顶级包”错误可能会令人困惑。
考虑以下包结构:
package/ __init__.py A/ __init__.py foo.py test_A/ __init__.py test.py
当尝试从子包(例如,from ..A import foo in test.py),如果满足以下条件,则可能会遇到上述错误满足:
原因这个错误源于 Python 导入机制的一个基本方面。当加载包时,它被视为“顶级包”,并且相对导入只能引用该包或其子包内的模块。但是,直接运行模块时,Python 不会自动将包的父目录识别为包。
因此,在上述场景中,当您从包目录中运行 python -m test_A.test 时,父目录目录 ('package/') 不被视为包,并且来自 ..A import foo 的相对导入有效地尝试超越顶级包。
要解决此错误,请确保您在运行模块时指定整个包路径:
python -m package.test_A.test
以上是为什么我在 Python 中收到'ValueError:尝试相对导入超出顶级包”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!