Azure DevOps流水线运行Python单元测试找不到已安装的requests模块如何解决
故障原因
- Azure DevOps 中每个
script任务都是独立的 Shell 会话,上一个任务执行的source venv/bin/activate虚拟环境激活操作仅在当前会话生效,不会延续到后续的script任务。 - 依赖安装步骤将 requests 等包安装到了自建的 venv 虚拟环境中,单元测试步骤调用的是系统全局的 Python 3 解释器,全局环境未安装对应依赖,因此触发模块找不到的报错。
解决方法
方案1:合并依赖安装与测试执行步骤(最便捷)
将单元测试逻辑放到依赖安装的同一个script块中,共用激活后的虚拟环境,修改后的流水线配置如下:
- stage: Build displayName: Build stage jobs: - job: 'Build' pool: vmImage: '$(vmImageName)' steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python3 -m venv venv source venv/bin/activate python3 -m pip install --upgrade pip pip3 install setup pip3 install -r requirements.txt # 同一脚本内直接执行测试,虚拟环境仍生效 python3 PoC1/tests.py workingDirectory: $(projectRoot) displayName: 'Install requirements and run unittests'
方案2:每个步骤单独激活虚拟环境
如果需要拆分步骤保证可读性,在执行测试的步骤前先执行虚拟环境激活操作:
- script: | source venv/bin/activate python3 PoC1/tests.py workingDirectory: $(projectRoot) displayName: 'Run unittests'
方案3:取消虚拟环境直接全局安装依赖
流水线运行环境是一次性的隔离实例,无需做环境隔离的情况下可以直接省略虚拟环境创建,把依赖装到全局Python环境中,修改依赖安装的脚本部分即可:
python3 -m pip install --upgrade pip pip3 install setup pip3 install -r requirements.txt
内容的提问来源于stack exchange,提问作者patryk_ostrowski
相关产品推荐
相关产品推荐

