使用pytest进行单元测试时出现ModuleNotFoundError错误是什么原因?
pytest运行时报
ModuleNotFoundError: No module named 'package'解决方案 报错原因
Python导入模块时会扫描sys.path列表中存储的所有路径,匹配对应的模块文件。默认直接运行pytest命令时,不会自动将你的项目根目录加入sys.path,因此tests目录下的测试文件无法找到上层的package模块。
解决方案
方案1:安装可编辑版本的本地包(最推荐)
你的项目根目录已经存在setup.py,直接在根目录执行以下命令,将本地包以可编辑模式安装到当前Python环境中,全局可导入:
pip install -e .
注意执行该命令前请先激活你当前使用的Python虚拟环境,避免安装到全局环境中。
后续不管在哪里运行pytest都可以正常导入package下的模块。
方案2:修改pytest配置
在项目根目录新建pytest.ini配置文件,写入以下内容,指定pytest运行时自动将根目录加入模块搜索路径:
[pytest] pythonpath = .
配置完成后直接运行pytest即可正常导入。
方案3:用Python模块方式启动pytest
运行测试时不直接执行pytest命令,改用以下命令启动:
python -m pytest
python -m启动模块的逻辑会自动将当前工作目录加入sys.path,无需额外修改配置。
方案4:测试文件临时修改搜索路径(不推荐)
如果仅临时调试不想修改全局配置,可以在每个测试文件的最开头加入以下代码:
import sys sys.path.append('.')
该方法侵入性较强,仅适合临时调试使用。
内容的提问来源于stack exchange,提问作者ezzeddin
相关产品推荐
相关产品推荐

