You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YAML脚本未在Env_Name环境安装requirements.txt包的问题排查

问题描述

我编写了如下YAML脚本,本应在新建的Env_Name虚拟环境中安装requirements.txt内的依赖包:

- script: |
    python -m venv Env_Name
    cd Env_Name
    .\scripts\Activate
  displayName: 'Create & Activate Env_Name '

- script: |
    python -m pip install --upgrade pip
  displayName: 'Install dependencies'

- script: |
    pip install wheel
  displayName: 'Wheel install' 

- script: |
    pip install python_ldap-3.4.0-cp311-cp311-win_amd64.whl
  displayName: 'Install ldap from wheel' 

- script: |
    type requirements.txt
  displayName: 'display the content of the requirements file'

- script: |
    pip install -r requirements.txt -v
  displayName: 'packages installation'

- script: |
    pip list
  displayName: 'Display packages'

- script: |
    python setup.py sdist
  displayName: 'Artifact creation'

- task: CopyFiles@2
  inputs:
    targetFolder: $(Build.ArtifactStagingDirectory)

- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'My_App'
    publishLocation: 'Container'

执行后,pip list显示依赖包已安装:

pip list
========================== Starting Command Output ===========================
"C:\Windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:\a\_temp\f53d2436-67e2-4d6f-bf00-e90e1dfcb18c.cmd""
Package              Version
-------------------- ------------
asgiref              3.7.2
beautifulsoup4       4.12.2
certifi              2023.7.22
cffi                 1.15.1
charset-normalizer   3.2.0
contourpy            1.1.1
cryptography         41.0.3
cx_Oracle            8.3.0
cycler               0.11.0
Django               4.2.5
django-adminlte3     0.1.6
django-auth-ldap     4.6.0
django-mssql-backend 2.8.1
et-xmlfile           1.1.0
fonttools            4.42.1
idna                 3.4
joblib               1.3.2
kiwisolver           1.4.5
lxml                 4.9.3

但查看Env_Name环境的site-packages目录时,未发现requirements.txt中的包。现咨询:

  1. 这些包实际安装在何处?
  2. 如何通过脚本查看其安装路径?
  3. 如何让包正确安装到Env_Name环境中?
问题解答

1. 包实际安装位置

这些包安装在了系统全局Python环境或构建代理默认的Python环境里。因为每个script任务都是独立进程,第一个脚本里的虚拟环境激活操作仅在当前进程生效,后续脚本任务会启动新进程,不会继承之前的虚拟环境状态,所以所有pip install命令都是调用全局Python的pip执行的。

2. 查看安装路径的脚本方法

在任意script任务中添加以下命令,即可查看当前pip对应环境的路径信息:

# 查看当前pip关联的Python解释器路径
pip --version
# 查看全局包安装路径
python -c "import site; print(site.getsitepackages())"
# 查看单个包的具体安装路径
pip show Django  # 替换为你要检查的包名

3. 正确安装到虚拟环境的方法

有两种可靠方案解决进程隔离导致的环境不继承问题:

方案一:将所有环境相关命令合并到同一个script任务

虚拟环境激活仅在当前进程有效,把创建环境、激活环境、安装依赖的命令放在同一个脚本块中:

- script: |
    python -m venv Env_Name
    .\Env_Name\scripts\Activate
    python -m pip install --upgrade pip
    pip install wheel
    pip install python_ldap-3.4.0-cp311-cp311-win_amd64.whl
    type requirements.txt
    pip install -r requirements.txt -v
    pip list
    python setup.py sdist
  displayName: 'Create Env, Activate & Install Dependencies'

方案二:直接调用虚拟环境的Python和pip

不需要激活环境,每个脚本任务直接指定虚拟环境内的Python解释器和pip路径,明确指向目标环境:

- script: |
    python -m venv Env_Name
  displayName: 'Create Env_Name'

- script: |
    .\Env_Name\Scripts\python.exe -m pip install --upgrade pip
  displayName: 'Upgrade pip in Env_Name'

- script: |
    .\Env_Name\Scripts\pip.exe install wheel
  displayName: 'Install wheel in Env_Name'

- script: |
    .\Env_Name\Scripts\pip.exe install python_ldap-3.4.0-cp311-cp311-win_amd64.whl
  displayName: 'Install ldap from wheel in Env_Name'

- script: |
    type requirements.txt
  displayName: 'display the content of the requirements file'

- script: |
    .\Env_Name\Scripts\pip.exe install -r requirements.txt -v
  displayName: 'Install packages in Env_Name'

- script: |
    .\Env_Name\Scripts\pip.exe list
  displayName: 'Display packages in Env_Name'

- script: |
    .\Env_Name\Scripts\python.exe setup.py sdist
  displayName: 'Artifact creation using Env_Name'

内容的提问来源于stack exchange,提问作者TourEiffel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:05:33