Python 中的相对导入
在使用相对导入时,经常会出现“尝试在非包中进行相对导入”的常见错误Python。本文旨在阐明相对导入的概念并提供解决此错误的解决方案。
脚本和模块之间的差异
主要区别在于 Python 文件的方式已加载。直接使用 python myfile.py 执行的文件被视为顶级脚本。相反,在另一个文件中使用 import 语句导入的文件是一个模块。这种区别对于理解相对导入至关重要。
命名的重要性
加载后,每个文件都会被分配一个存储在 name 属性中的名称。如果作为脚本加载,其名称将设置为 __main__。如果作为模块导入,其名称会反映其所属的包和文件名。
例如,在提供的目录结构中:
package/ __init__.py subpackage1/ __init__.py moduleX.py moduleY.py subpackage2/ __init__.py moduleZ.py moduleA.py
导入 moduleX 将为它分配名称package.subpackage1.moduleX,而导入 moduleA 时会产生 package.moduleA 的名称。但是,直接执行任一模块都会将其 name 设置为 __main__,从而抑制包信息。
相对导入
相对导入使用以下方式导航包层次结构模块的名称。例如, from .. import foo 表示在层次结构中向上移动。使用 from .. import 进行升序需要模块名称中包含足够的点。
非包模块
但是,名称缺少点的模块不被视为模块的一部分一个包裹。因此,相对导入会因此类模块中的非包错误而失败。
解决方案
要解决该错误,请考虑以下解决方案:
以上是为什么在 Python 中出现'尝试在非包中进行相对导入”?的详细内容。更多信息请关注PHP中文网其他相关文章!