Azure DevOps Pipelines无法找到requirements.txt问题及相关疑问求助
问题解决与疑问解答
一、搞定找不到requirements.txt的报错
问题根因
从报错路径/home/vsts/work/1/s/requirements/requirements.txt和你的项目结构来看,十有八九是这两个原因:
- 代码没正确拉取:虽然Azure Pipelines默认会自动checkout代码,但如果你的Pipeline有自定义配置,可能跳过了这一步;或者你本地的
requirements文件夹根本没提交到Azure Repos(比如被.gitignore挡住了)。 - 路径认知错误:Azure Pipelines会把
myreponame里的所有内容直接拉到$(Build.SourcesDirectory),而不是把整个myreponame文件夹放进去。也就是说,你的requirements文件夹应该直接在$(Build.SourcesDirectory)下面,但报错说明它不在。
解决方案
1. 先确认代码已提交
先去Azure Repos的仓库里看看,requirements/requirements.txt是不是真的存在——如果本地有但没推上去,那肯定找不到。
2. 强制添加checkout步骤
在你的Pipeline的steps最开头加上这段,确保代码被拉下来:
steps: - checkout: self fetchDepth: 1
3. 先查清楚文件在哪
在安装依赖的步骤前加个查看目录的命令,搞清楚实际路径:
- script: | echo "当前目录: $(pwd)" ls -la $(Build.SourcesDirectory) ls -la $(Build.SourcesDirectory)/requirements displayName: '确认文件结构'
跑完这个步骤,你就能明确看到requirements.txt到底在不在预期位置。
4. 修正pip命令
如果确认路径没问题,用绝对路径的话要保证变量正确,或者直接用相对路径(Azure Pipelines默认工作目录就是代码根目录):
- script: | python -m pip install --upgrade pip pip install -r $(Build.SourcesDirectory)/requirements/requirements.txt displayName: '安装依赖'
或者直接用相对路径:
pip install -r requirements/requirements.txt
不确定的话,先跑pwd确认当前目录是不是代码根目录。
二、关于requirements.txt的疑问解答
1. 必须运行requirements.txt吗?为啥?
不是“必须”,但非常建议这么做,原因很实在:
- 环境一致:保证CI/CD代理上的包版本和你本地开发、训练模型的版本完全一样,避免“本地跑的好好的,CI里直接报错”,对机器学习来说这尤其重要——不同版本的numpy、scikit-learn可能直接导致模型结果不对或者训练失败。
- 可重复:让整个流程的环境能复现,后面别人接手或者重新跑Pipeline时,能快速搭出一模一样的环境。
- 省事儿:手动装依赖容易漏装、装错版本,用requirements.txt一键搞定,效率高还不出错。
哪怕你不用代理当服务器或部署源,CI里的单元测试、模型训练、打包这些步骤都需要依赖,所以还是得装。
2. 能用Docker镜像或者其他方式替代吗?
当然可以,这甚至是MLOps的最佳实践,给你两种常用方式:
方式一:用预构建的Docker镜像
你可以先做个包含所有依赖的Docker镜像,然后在Pipeline里直接用这个镜像当环境,就不用每次都装依赖了:
- 写个
Dockerfile:
FROM python:3.9-slim WORKDIR /app COPY requirements/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt
- 把镜像推到Azure容器注册表(ACR)或者其他镜像仓库,然后在Pipeline里用:
pool: vmImage: ubuntu-latest container: 你的ACR名称.azurecr.io/你的机器学习镜像:latest
方式二:用Azure Pipelines自带的Python虚拟环境任务
除了手动建虚拟环境,你可以用官方的任务来管理,更规范:
steps: - task: UsePythonVersion@0 inputs: versionSpec: '3.9' addToPath: true - script: | python -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install -r requirements/requirements.txt displayName: '在虚拟环境里装依赖'
内容的提问来源于stack exchange,提问作者Marvin Garcia
相关产品推荐
相关产品推荐

