想象一下以下目录结构:
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 提出了一种相对于引用模块的机制主模块。在 Python 2.6 及更高版本中,您可以使用以下语法导入相对于主模块的模块:
from . import mod2 from .. import sub2
此行为与子包导入的预期功能一致,确保一致且直观的导入机制。
以上是如何解决Python中的'尝试在非包中进行相对导入”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!