Jenkins执行pytest遇ModuleNotFoundError: No module named 'easynmt'
问题排查与解决步骤
1. 定位核心原因
Jenkins日志显示找不到torch==2.2.2的匹配版本,这是根本问题——因为easynmt依赖torch,torch安装失败会导致easynmt也无法正常安装(即使requirements里声明了,pip会跳过依赖不满足的包),最终触发ModuleNotFoundError: No module named 'easynmt'。
2. 解决torch版本安装问题
情况1:Jenkins代理的Python版本不兼容
torch==2.2.2仅支持Python 3.8-3.11,先检查Jenkins环境的Python版本:
python --version
如果Python版本不在该范围内,要么降级/升级Python,要么更换兼容的torch版本(比如torch==2.3.0支持Python 3.8-3.12)。
情况2:Jenkins代理的系统架构/平台不支持
torch的部分版本仅提供特定平台的预编译包,比如ARM架构机器可能没有torch==2.2.2的预编译包,先检查Jenkins节点的系统信息:
uname -m && cat /etc/os-release # Linux system_profiler SPSoftwareDataType # macOS
如果是小众架构,可选择:
- 更换为支持该架构的torch版本(比如
torch==2.2.0开始支持ARM64) - 从源码编译torch(不推荐,耗时且易出问题)
情况3:pip源问题导致无法拉取包
国内环境或私有网络可能无法访问PyPI官方源,可切换到国内镜像源安装:
pip install torch==2.2.2 easynmt==2.0.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
如果是私有源,需在pip命令中添加--extra-index-url指定源地址。
3. 验证依赖安装状态
在Jenkins执行脚本中,安装依赖后添加验证步骤,确认包是否真的安装成功:
pip list | grep -E "torch|easynmt"
如果输出为空,说明依赖未装上,回到步骤2排查;如果有输出,再检查Python环境是否正确(比如是否激活了虚拟环境)。
4. 确保Jenkins脚本正确激活虚拟环境
很多时候Jenkins脚本创建虚拟环境后,未正确激活就执行pip安装和pytest,导致依赖装到系统Python而非虚拟环境中。正确脚本示例:
# 创建并激活虚拟环境 python -m venv venv source venv/bin/activate # Linux/macOS # 或 venv\Scripts\activate.bat # Windows # 安装依赖 pip install -r test_requirements.txt # 或从setup.py安装(若为可分发项目) pip install -e .[test] # 验证依赖 pip list | grep -E "torch|easynmt" # 执行测试 python -m pytest tests/
5. 额外检查项
- 确认
setup.py或test_requirements.txt中无拼写错误,比如torch的包名、版本号是否正确 - 如果使用conda环境,确保Jenkins脚本正确激活conda环境,且conda源配置正常
内容的提问来源于stack exchange,提问作者rik
相关产品推荐
相关产品推荐

