Python导入语句触发Coverage运行错误,如何修复并支持多场景执行?
问题根因
你使用的无包前缀导入逻辑会触发Python默认模块搜索规则,由于系统标准库路径中存在同名p.py文件,搜索优先级高于你的本地项目目录,导致导入了系统模块而非你自定义的p.py,最终找不到P类报错。
修复方案
1. 统一修改导入逻辑
所有项目内的模块导入改为带v包名的绝对导入,完全避开和系统模块重名冲突,同时在可直接执行的文件开头添加自动路径适配代码,兼容任意执行位置。
修改v/e.py
# 开头新增路径适配代码 import sys from pathlib import Path if __name__ == "__main__": root = Path(__file__).resolve() while root.name != "v": root = root.parent sys.path.insert(0, str(root.parent)) # 导入改为带包名格式 from v.b import B from v.p import P class E(object): def run(self): pass if __name__ == "__main__": e = E() e.run()
修改v/b.py
from v.p import P class B(object): def run(self): pass
修改v/e_test.py
# 开头新增路径适配代码 import sys from pathlib import Path root = Path(__file__).resolve() while root.name != "v": root = root.parent sys.path.insert(0, str(root.parent)) from v.e import E import unittest class ETest(unittest.TestCase): def testSomething(self): pass if __name__ == '__main__': unittest.main()
其余单测文件(b_test.py、files_test.py)按照e_test.py的格式修改开头路径适配代码和导入语句即可。
2. 验证执行要求
所有命令可直接在v目录下执行,均能正常运行:
- 执行覆盖率测试:
coverage run e_test.py b_test.py files_test.py - 直接运行单测:
python3 e_test.py - 直接运行业务代码:
python3 e.py
内容的提问来源于stack exchange,提问作者TrongBang
相关产品推荐
相关产品推荐

