You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pytest-cov统计行覆盖率时报No module named 'src'导入错误

问题原因

两种执行方式的Python模块搜索路径逻辑不一致,是报错的核心原因:

  • 执行python -m pytest tests/时,Python会自动将当前命令执行的工作目录(即MATCHING_CC项目根目录)加入sys.path导入搜索路径,因此代码中写的from src.xxx import xxx可以正常找到src模块。
  • 直接执行pytest --cov=MATCHING_CC tests/时,pytest-cov会在测试收集阶段提前加载覆盖率追踪钩子,修改默认模块加载逻辑,此时项目根目录未被加入导入搜索路径,就会触发ModuleNotFoundError: No module named 'src'报错。

额外说明:你传入的--cov=MATCHING_CC参数本身也有误,MATCHING_CC是外层文件夹名称,并非存放业务代码的Python包,你的业务代码全部存放在src目录下,参数值错误也会导致覆盖率统计失效。

解决方案

按改造成本从低到高,可任选以下方案:

方案1:统一启动命令(零配置改动)

直接复用能正常跑通测试的python -m启动方式,同时修正cov参数指向实际的代码目录src即可:

python -m pytest --cov=src tests/

该方式完全复用原有正常运行的路径逻辑,不需要改任何配置文件,执行后即可正常收集测试用例并统计覆盖率。

方案2:修改pytest配置固定导入路径

在现有pytest.ini中增加路径配置,让pytest执行时自动将项目根目录加入搜索路径,适配直接调用pytest命令的场景。
修改后的pytest.ini内容如下:

[pytest]
addopts = -p no:warnings
filterwarnings = ignore:.*U.*mode is deprecated:DeprecationWarning
pythonpath = .

如果你的pytest版本低于7.0,不支持pythonpath配置,可以将最后一行替换为addopts = -p no:warnings --import-mode=append实现相同效果。
配置完成后,直接执行以下命令即可正常运行:

pytest --cov=src tests/

方案3:项目安装为可编辑包(长期维护推荐)

当前导入逻辑强依赖执行命令时的工作目录,换目录执行、CI环境运行都容易重复出现导包问题,最稳妥的方式是将项目配置为可安装的Python包:

  1. 在MATCHING_CC根目录新建pyproject.toml文件,写入以下内容:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "matching_cc"
version = "0.1.0"
packages = ["src", "src.services"]
  1. 在项目根目录执行可编辑安装命令:
pip install -e .

安装完成后,无论在什么路径下执行pytest命令、是否加cov参数,都不会出现模块找不到的问题。

内容的提问来源于stack exchange,提问作者Atilio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:15:28