首页 > 后端开发 > Python教程 > 为什么在 Python 中出现'尝试在非包中进行相对导入”?

为什么在 Python 中出现'尝试在非包中进行相对导入”?

Mary-Kate Olsen
发布: 2024-12-21 13:31:09
原创
801 人浏览过

Why Do I Get

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 进行升序需要模块名称中包含足够的点。

非包模块

但是,名称缺少点的模块不被视为模块的一部分一个包裹。因此,相对导入会因此类模块中的非包错误而失败。

解决方案

要解决该错误,请考虑以下解决方案:

  1. 将模块作为包执行: 使用 python -m package.subpackage1.moduleX 加载模块不将其作为脚本执行。
  2. 将执行与导入分开:在包目录外部运行脚本并从其中导入模块以启用相对导入。

以上是为什么在 Python 中出现'尝试在非包中进行相对导入”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板