使用pytest运行测试报ModuleNotFoundError找不到string_helper模块
pytest运行提示
ModuleNotFoundError: No module named 'string_helper'解决方法 报错根因
报错是Python模块搜索路径不匹配导致的:从项目根目录执行pytest命令时,Python默认将项目根目录加入模块搜索路径,string_helper.py实际存放在src目录下,而src/main.py中直接写from string_helper import string_sum时,Python会优先在根目录查找对应模块,不会自动检索src子目录,因此触发找不到模块的错误。
另外原有代码还存在两个会阻断测试运行的小问题:
src目录未被明确标记为Python包,部分环境下会出现导入识别异常main()函数未定义入参,测试用例中调用main(1,2)会触发参数数量不匹配报错
推荐修复方案(符合Python包开发规范)
按以下步骤调整即可:
- 在
src目录下新建空文件__init__.py,用于标记src为可导入的Python包 - 修改
src/main.py的导入语句,将同目录模块的导入改为包内相对导入,同时给main函数加上默认参数适配测试调用,修正后完整代码如下:
# src/main.py from .string_helper import string_sum def main(a=2, b=1): r = string_sum(a, b) return r if __name__ == "__main__": r = main() print(r)
- 无需修改
src/string_helper.py和测试文件内容,回到项目根目录重新执行pytest -v即可正常运行所有测试用例。
轻量替代方案(无需修改现有导入语句)
如果不想调整原有导入写法,可以在项目根目录新建pytest.ini配置文件,让pytest执行时自动将src目录加入模块搜索路径,配置内容如下:
[pytest] pythonpath = src
注意使用该方案时,依然需要给main()函数添加对应入参,否则测试调用时会抛出参数错误。
内容的提问来源于stack exchange,提问作者Gabriel Muñumel
相关产品推荐
相关产品推荐

