首页 >后端开发 >Python教程 >如何解决Python中的'尝试在非包中进行相对导入”错误?

如何解决Python中的'尝试在非包中进行相对导入”错误?

Barbara Streisand
Barbara Streisand原创
2024-12-24 02:21:15204浏览

How Can I Solve

Python 中的相对导入:综合指南

问题:跨子包导入模块

想象一下以下目录结构:

app/
   __init__.py
   sub1/
      __init__.py
      mod1.py
   sub2/
      __init__.py
      mod2.py

要从 mod1 模块中的 mod2 导入某些内容,以下代码是尝试:

from ..sub2 import mod2

但是,这会导致错误:“尝试在非包中进行相对导入。”

解决方案:声明包

发生错误的原因是通过将 mod1.py 参数传递给解释器来运行模块作为 __main__ ,Python 将其视为顶级模块,忽略包

要解决此问题,必须在 sub1 和 sub2 目录中正确初始化 __init__.py 文件。这意味着这些目录确实是包,我们可以使用相对导入来导入它们。

有了 __init__.py 文件,以下代码将成功在 mod1 中导入 mod2:

from ..sub2 import mod2

相对导入和 PEP 366

PEP 366 提出了一种相对于引用模块的机制主模块。在 Python 2.6 及更高版本中,您可以使用以下语法导入相对于主模块的模块:

from . import mod2
from .. import sub2

此行为与子包导入的预期功能一致,确保一致且直观的导入机制。

以上是如何解决Python中的'尝试在非包中进行相对导入”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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