Jenkins+Bazel执行单元测试时遇ImportError,本地无法复现
问题排查方案
1. 大小写匹配问题
Python是大小写敏感语言,报错提示找不到的CustomUtils和导入语句里的Customutils末尾字母大小写不一致(U/u)。本地环境如果是Windows或默认配置的macOS,文件系统不区分大小写,能勉强匹配运行,但Jenkins通常用Linux系统,大小写严格区分,会直接触发导入错误。
- 检查
root/src/custom.py里的类名是否为CustomUtils(大写U) - 把导入语句修正为
from root.src.custom import CustomUtils,保持和类名完全一致
2. Bazel构建配置问题
本地直接用Python解释器加载源码,而Bazel有独立的构建规则,可能存在路径或依赖配置遗漏:
- 确认测试目标的BUILD文件中,是否将
//root/src/custom添加到py_test的deps依赖列表里 - 检查Bazel构建时的Python路径配置,确保
root/src目录被正确加入sys.path,和本地环境的模块搜索路径一致
3. 构建缓存或产物不一致问题
Jenkins可能加载的是Bazel构建后的产物而非原始源码,如果缓存未更新或打包不完整会出错:
- 在Jenkins构建流程中添加
bazel clean步骤,清理旧缓存后重新构建测试 - 检查
custom.py所在目录的BUILD文件,确认py_library规则是否正确包含了该文件,保证模块被完整打包
4. Python版本差异问题
本地和Jenkins的Python版本如果不一致,导入机制可能存在细微差异:
- 分别在本地和Jenkins执行
python --version,对比版本号 - 若版本差异较大,确认代码是否兼容Jenkins上的Python版本导入规则
内容的提问来源于stack exchange,提问作者roulette01
相关产品推荐
相关产品推荐

