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

如何让Azure Pipeline运行脚本时相对路径正常工作?

Azure Pipeline 相对路径问题解决方案

问题背景

流水线运行gen.py时,依赖的sanity_check.py通过相对路径open('config.yml')读取配置文件,触发FileNotFoundError。目前仅能通过硬编码绝对路径临时解决,但需修改大量代码且无法兼容本地执行,需寻找低侵入性的兼容方案。

问题根源

Azure Pipeline执行python $(Build.Repository.LocalPath)\cfg\gen.py时,当前工作目录并非cfg目录,而是流水线默认的工作路径。此时相对路径config.yml会指向默认工作目录,而非cfg目录下的目标文件,导致找不到文件。

解决方案

方案1:切换工作目录后执行脚本(无需修改Python代码)

修改流水线中Run gen.py步骤,先切换到cfg目录再执行gen.py,让脚本的工作目录与本地执行一致:

- script: |
    set PYTHONPATH=$(Build.Repository.LocalPath)\cfg\00-config-tools-ext
    cd $(Build.Repository.LocalPath)\cfg
    python gen.py
  displayName: 'Run gen.py'

原理:切换到cfg目录后,所有相对路径都会基于该目录解析,和本地运行时的上下文完全一致,无需改动任何Python代码即可兼容本地与Pipeline环境。

方案2:通过环境变量兼容路径(仅需修改一行Python代码)

如果不想调整工作目录,可以利用已设置的CONFIG_PATH环境变量,在sanity_check.py中添加一行逻辑,优先读取环境变量,不存在时使用相对路径:

import yaml
import os

def check_sanity_config():
    # 优先使用流水线环境变量,本地执行时自动 fallback 到相对路径
    config_path = os.getenv('CONFIG_PATH', 'config.yml')
    with open(config_path, "r", encoding="utf-8") as stream:
            config_yml = yaml.safe_load(stream)

原理:本地执行时CONFIG_PATH环境变量不存在,自动使用相对路径;Pipeline中已配置该变量,直接读取绝对路径,仅需修改一行代码,侵入性极低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:58:24