在使用 pytest 时,经常会因为路径问题而遇到 ImportError 异常。这在不同的操作系统和项目结构中尤其普遍。让我们解决这个问题并探索潜在的解决方案。
解决路径问题的一种有效方法是利用 conftest.py 文件。 Pytest 在测试收集期间搜索 conftest 模块以收集自定义挂钩和固定装置。通过将空的 conftest.py 文件放置在项目的根目录(运行 pytest 的位置)中,pytest 会自动将父目录添加到 sys.path,使您的应用程序模块可供导入。
对于这样的项目结构:
repo/ |--app.py |--settings.py |--models.py |--tests/ |--test_app.py
只需将一个空的 conftest.py 文件添加到 repo/
对于最新版本的 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中文网其他相关文章!