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

pytest运行测试导入继承抽象基类的模块报ModuleNotFoundError如何解决

导入错误原因

你遇到的报错是Python模块导入规则的正常表现,和抽象基类无关:当你运行测试时,测试文件用from project.JsonParser import JsonParser导入,相当于把JsonParser作为project包下的子模块加载,此时JsonParser.py里写的from Parser import Parser会被Python解析为搜索顶层的独立Parser模块,但你的Parser.py是存放在project包内部的,自然无法找到。

可直接落地的解决方案

方案1:统一使用包级绝对导入(适配所有场景,推荐)

所有内部模块导入都带上顶层包名,适配脚本运行、测试等所有场景:

  • 把JsonParser.py内的导入语句修改为:from project.Parser import Parser
  • 解决路径搜索问题,二选一即可:
    1. 在你执行pytest的目录下新建pytest.ini配置文件,写入以下内容:
    [pytest]
    pythonpath = .
    
    注意:如果你是直接cd到project文件夹内部执行pytest,pythonpath要改为..,确保Python能找到project包所在的上级目录
    配置完成后直接执行pytest tests/test_JsonParser.py即可正常运行,project.py直接启动也不会出现导入问题。
    2. 不用修改配置,每次运行pytest时用模块调用方式执行:python -m pytest tests/test_JsonParser.py,Python会自动把当前工作目录加入模块搜索路径。

方案2:使用相对导入,调整脚本启动方式

如果不想修改为带包名的绝对导入,可以用相对导入解决冲突:

  • 把JsonParser.py内的导入语句修改为:from .Parser import Parser
  • 之前直接运行python project.py会报错,是因为直接执行的脚本会被视为顶层入口脚本,不支持相对导入,调整启动命令为python -m project.project即可正常运行,pytest执行测试也不会出现导入问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:57:01