首页 >后端开发 >Python教程 >如何解决由于路径问题导致的 pytest 中的'ImportError: No module name...”问题?

如何解决由于路径问题导致的 pytest 中的'ImportError: No module name...”问题?

Linda Hamilton
Linda Hamilton原创
2024-12-16 12:33:12950浏览

How to Solve

pytest 的 PATH 问题:“ImportError: No module nameed...”

在使用 pytest 时,经常会因为路径问题而遇到 ImportError 异常。这在不同的操作系统和项目结构中尤其普遍。让我们解决这个问题并探索潜在的解决方案。

Conftest 解决方案(pytest

解决路径问题的一种有效方法是利用 conftest.py 文件。 Pytest 在测试收集期间搜索 conftest 模块以收集自定义挂钩和固定装置。通过将空的 conftest.py 文件放置在项目的根目录(运行 pytest 的位置)中,pytest 会自动将父目录添加到 sys.path,使您的应用程序模块可供导入。

示例:

对于这样的项目结构:

repo/
   |--app.py
   |--settings.py
   |--models.py
   |--tests/
          |--test_app.py

只需将一个空的 conftest.py 文件添加到 repo/

Pythonpath 设置 (pytest >= 7)

对于最新版本的 pytest(7 及更高版本),更方便的解决方案是利用 pythonpath 设置。这允许您直接通过 pytest 配置修改 sys.path。在 pyproject.toml 或 pytest.ini 文件中,添加以下内容:

[tool.pytest.ini_options]
pythonpath = ["."]

这是一种更简洁的方法,不需要任何自定义代码或对 sys.path 进行操作。

其他注意事项

项目结构:根据情况调整conftest.py文件或pythonpath配置的位置你的项目结构。例如,在典型的基于 src 的布局中,将 conftest.py 放在 src 目录中,而不是根目录中。

src 布局: 将 src 添加到 PYTHONPATH 时要小心。它可能会破坏使用 src 布局的好处,因为您最终测试的是存储库代码而不是已安装的包。

以上是如何解决由于路径问题导致的 pytest 中的'ImportError: No module name...”问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

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