首页 >后端开发 >Python教程 >为什么我的 Python 3 相对导入失败,如何修复它们?

为什么我的 Python 3 相对导入失败,如何修复它们?

Linda Hamilton
Linda Hamilton原创
2024-12-25 05:21:18281浏览

Why Are My Python 3 Relative Imports Failing, and How Can I Fix Them?

Python 3 中的相对导入:理解和解决方法

相对导入,通常用于在同一目录中导入模块,有时会导致错误,例如 ImportError 或 ModuleNotFoundError。了解根本原因对于解决这些问题至关重要。

Python 3 中的相对导入行为

在 Python 3 中,相对导入仅在模块导入其他模块时才起作用位于同一个包内。包是包含 __init__.py 文件的目录,指示其包状态。如果包中包含带有其他模块的子目录,从这些子目录到其他子目录中的模块的相对导入将会失败。

根包包含

要解决此问题,请确保所涉及模块的父目录是一个包,由 __init__.py 文件的存在表明。如果父目录不是包,则相对导入将失败,并显示错误“尝试在没有已知父包的情况下进行相对导入。”

错误:“ModuleNotFoundError:没有名为 'mymodule' 的模块”

当指定路径中不存在正在导入的模块(本例中为 mymodule)时,会发生此错误。验证模块是否存在且命名正确。

错误:“SystemError: 父模块 '' 未加载,无法执行相对导入”

此错误表明父模块(包含相对导入的模块)尚未加载。在尝试相对导入之前,确保父模块正在执行或导入。

相对导入的解决方法

如果避免相对导入不可行,可以使用以下解决方法:

  • 使用绝对导入: 替换 from .mymodule import myfunction with from mypackage.mymodule import myfunction,使用根包的绝对路径。
  • 修改 PYTHONPATH: 将包的父目录添加到 PYTHONPATH 环境变量中,使其可供模块搜索路径。
  • Frob PYTHONPATH in Code: 将父目录追加到sys.path 使用类似于给定答案中提供的代码片段。

关于在包中运行脚本的警告

Guido van Rossum,的创建者Python 认为在包中运行脚本是一种反模式,并将其视为不必要的。不过,对于有必要的场景,可以采用上述解决方法。

以上是为什么我的 Python 3 相对导入失败,如何修复它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

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