首页  >  文章  >  后端开发  >  在 Python 3 中使用相对导入时,为什么我会收到“ModuleNotFoundError:没有名为 x 的模块”?

在 Python 3 中使用相对导入时,为什么我会收到“ModuleNotFoundError:没有名为 x 的模块”?

Linda Hamilton
Linda Hamilton原创
2024-10-28 02:53:02762浏览

 Why am I getting

相对导入和 ModuleNotFoundError:没有名为 x 的模块

尝试在 Python 3 中利用相对导入时,程序员偶尔会遇到“ModuleNotFoundError:没有名为 x 的模块”错误。此错误表示解释器在运行时无法找到具有该特定名称的模块。

要理解此问题,区分绝对导入和相对导入至关重要。绝对导入用于导入 sys.path 上可用的模块,而相对导入用于导入相对于当前模块的模块。然而,相对导入需要当前模块属于一个包。

提供的代码片段由两个文件组成:test.py 和 config.py。 config.py 包含函数和变量,而 test.py 导入配置并访问其“debug”参数。尽管存在 __init__.py 文件,但仍会出现“ModuleNotFoundError: No module named 'config'”错误。

此错误源于正在执行的文件 (test.py) 未包含在一个包结构。因此,它无法执行相对导入。使用绝对导入可以解决这个问题,如下面修改后的代码片段所示:

<code class="python"># test.py
import ryan.config  # Replace config with ryan.config for absolute import
print(ryan.config.debug)</code>

或者,创建一个包结构并将 test.py 放置在其中将允许相对导入。目录结构可能如下所示:

.
├── __init__.py
└── ryan
    ├── __init__.py
    ├── config.py
    └── test.py

总之,仅当当前模块属于包时才允许相对导入。如果正在执行的文件缺少包结构,则应使用绝对导入以避免“ModuleNotFoundError”异常。

以上是在 Python 3 中使用相对导入时,为什么我会收到“ModuleNotFoundError:没有名为 x 的模块”?的详细内容。更多信息请关注PHP中文网其他相关文章!

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