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

Azure Pipelines中UsePythonVersion@0无法正确设置Python版本

问题:UsePythonVersion@0任务未正确切换Python版本(自托管Linux代理)

已按文档在自托管Agent工具缓存中添加Python 3.9,执行Azure Pipelines管道时,UsePythonVersion@0任务日志显示已找到Python 3.9.1并将其路径加入PATH,但后续脚本执行python --version返回代理机器全局安装的旧版本(Python 2.7.16和3.7.3),任务未生效。

管道代码

trigger: none

pool: 
  name: self-hosted-agent
  demands:
    - Agent.Name -equals agentname
    - agent.name -equals agentname
    - Agent.OS -equals Linux
steps:
- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.9' 
    addToPath: true 
- script: |
    python --version
    python3 --version
    python print('Hello!')

- task: Bash@3
  displayName: Run Python Code
  inputs:
    targetType: inline
    script: |
      python --version
      python print('Hello!')

任务日志

Starting: UsePythonVersion
==============================================================================
Task         : Use Python version
Description  : Use the specified version of Python from the tool cache, optionally adding it to the PATH
Version      : 0.214.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/use-python-version
==============================================================================
Found tool in cache: Python 3.9.1 x64
Prepending PATH environment variable with directory: /home/.../myagent/_work/_tool/Python/3.9.1/x64
Prepending PATH environment variable with directory: /home/.../myagent/_work/_tool/Python/3.9.1/x64/bin
Finishing: UsePythonVersion

脚本执行结果

Starting: CmdLine
==============================================================================
Task         : Command line
Description  : Run a command line script using Bash on Linux and macOS and cmd.exe on Windows
Version      : 2.212.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/command-line
==============================================================================
Generating script.
========================== Starting Command Output ===========================
/usr/bin/bash --noprofile --norc /home/.../myagent/_work/_temp/0225cb7f-9153-4b7c-ad42-321b8b9bfa97.sh
Python 2.7.16
Python 3.7.3

解决方案

1. 验证PATH优先级与Python路径

在脚本任务中先打印完整PATH和Python可执行文件路径,确认工具缓存路径是否生效:

echo $PATH
which python
which python3

如果工具缓存路径已在PATH最前端,但which python仍指向系统旧版本,说明存在shell别名、自定义PATH覆盖或者代理启动时的环境变量锁定问题。

2. 直接调用工具缓存中的Python

通过UsePythonVersion任务的输出变量,直接使用绝对路径调用目标Python版本,避免PATH冲突:

- task: UsePythonVersion@0
  inputs:
    versionSpec: '3.9' 
    addToPath: true 
  name: UsePython39 # 命名任务以引用输出变量

- script: |
    $(UsePython39.pythonLocation)/bin/python --version
    $(UsePython39.pythonLocation)/bin/python -c "print('Hello!')"

3. 切换使用python3命令

Linux环境中Python 3.x通常默认映射为python3,尝试在脚本中替换为python3:

python3 --version
python3 -c "print('Hello!')"

4. 检查工具缓存目录权限

确认自托管代理用户对工具缓存目录有执行权限:

ls -l /home/.../myagent/_work/_tool/Python/3.9.1/x64/bin/

若权限不足,执行chmod +x添加执行权限。

5. 升级任务版本

将UsePythonVersion@0升级至@1版本,新版本修复了部分Linux环境下的PATH处理问题:

- task: UsePythonVersion@1
  inputs:
    versionSpec: '3.9'
    addToPath: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:01:29