首页 >后端开发 >Python教程 >为什么我在 Python 中收到'ValueError:尝试相对导入超出顶级包”错误?

为什么我在 Python 中收到'ValueError:尝试相对导入超出顶级包”错误?

Linda Hamilton
Linda Hamilton原创
2024-11-26 04:48:14552浏览

Why Am I Getting a

相对导入错误:超出顶级包

在 Python 3 中,相对导入提供了一种便捷的方式来引用同一包中的模块目录或包。但是,遇到“ValueError:尝试相对导入超出顶级包”错误可能会令人困惑。

考虑以下包结构:

package/
    __init__.py
    A/
        __init__.py
        foo.py
    test_A/
        __init__.py
        test.py

当尝试从子包(例如,from ..A import foo in test.py),如果满足以下条件,则可能会遇到上述错误满足:

  1. 您正在从包目录 (package/) 中运行模块(例如,python -m test_A.test),并且
  2. 您没有使用以下命令指定该包为顶级包(例如 python -m package.test_A.test)。

原因这个错误源于 Python 导入机制的一个基本方面。当加载包时,它被视为“顶级包”,并且相对导入只能引用该包或其子包内的模块。但是,直接运行模块时,Python 不会自动将包的父目录识别为包。

因此,在上述场景中,当您从包目录中运行 python -m test_A.test 时,父目录目录 ('package/') 不被视为包,并且来自 ..A import foo 的相对导入有效地尝试超越顶级包。

要解决此错误,请确保您在运行模块时指定整个包路径:

python -m package.test_A.test

以上是为什么我在 Python 中收到'ValueError:尝试相对导入超出顶级包”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn