Python 中的相对导入:详细说明
使用包含多个子包的结构化目录时,从其他子包导入模块可以是共同要求。但是,使用相对导入的标准方法(例如 from ..sub2 import mod2)在某些情况下可能会失败。
开发人员尝试在提供的目录结构中从 mod1 导入 mod2 就是这种情况在问题中。错误消息“尝试在非包中进行相对导入”表示相对导入存在问题。
问题的根源在于模块作为 __main__ 运行,并将其作为参数传递给口译员。根据 PEP 328,相对导入使用模块的 __name__ 属性来确定其在包层次结构中的位置。当模块的名称设置为 __main__ 时,无论模块在文件系统中的实际位置如何,都会像模块是顶级模块一样解析相对导入。
尝试导入时,此行为可能会导致混乱来自其他子包的模块。要解决此问题,建议将代码放在脚本中,并使用绝对导入显式导入相关子包,例如 import sub2.mod2.
但是,在 Python 2.6 及更高版本中,引用模块的能力相对于主模块进行了介绍。 PEP 366 描述了这一变化。为了有效地使用相对导入,必须引用主模块而不是使用 __main__。这可以通过多种方式实现,例如:
通过采用这些技术,开发人员可以有效地利用相对导入来组织他们的 Python 项目并以结构化方式管理模块之间的依赖关系。
以上是当模块作为'__main__”运行时,为什么 Python 中的相对导入会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!