Windows环境GitHub Workflow配置Python2/3双版本问题求解
Windows环境GitHub Workflow同时配置Python2/Python3独立调用方案
问题根因
update-environment参数警告:该参数未在actions/setup-python@v4版本中正式上线,你查到的参数定义属于后续版本代码,v4版本的合法输入项确实不包含该字段,因此触发警告。- 路径反斜杠丢失:Bash环境下反斜杠
\为默认转义字符,变量赋值时未用引号包裹路径值,反斜杠会被解析为转义符自动移除,最终生成无效路径。 - 额外操作冗余:原配置中重命名Python可执行文件、手动修改PATH的操作没有必要,反而增加了路径处理的出错概率。
实现方案
不需要重命名可执行文件、不需要手动调整PATH顺序,直接通过步骤输出的绝对路径调用对应版本即可,从根源避免路径冲突和转义问题:
- 升级
setup-python到v5版本,该版本正式支持update-environment参数,安装Python2时将该参数设为false,就不会覆盖全局PATH中已安装的Python3环境,保证默认python/pip命令指向Python3版本。 - 所有Bash场景下的Windows路径变量赋值,都用双引号包裹,避免反斜杠被转义吞掉。
- 调用Python2时直接使用步骤输出的绝对路径,和Python3的调用完全隔离,不会出现版本冲突。
可用工作流配置示例
Job1: name: Running Unittests runs-on: windows-latest strategy: matrix: python-version: [3.8] steps: - uses: actions/checkout@v2 # 优先安装Python3,作为全局默认Python版本 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} # 安装Python2,配置为不修改全局环境变量 - name: Set up Python2.7 uses: actions/setup-python@v5 id: setup-python2 with: python-version: 2.7 update-environment: false # 验证两个版本可正常独立调用 - name: Verify Python versions shell: bash run: | # 路径用双引号包裹,避免反斜杠被转义 PYTHON2_PATH="${{ steps.setup-python2.outputs.python-path }}" echo "Default Python3 version:" python --version echo "Python2 install path: $PYTHON2_PATH" "$PYTHON2_PATH" --version # 分别安装两个版本的依赖 - name: Install dependencies shell: bash run: | PYTHON2_PATH="${{ steps.setup-python2.outputs.python-path }}" # 安装Python2版本依赖 curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py "$PYTHON2_PATH" get-pip.py "$PYTHON2_PATH" -m pip install numpy # 安装Python3版本依赖 pip install . # 后续测试步骤调用规则: # 调用Python3直接使用 python 命令 # 调用Python2直接使用 "$PYTHON2_PATH" 命令
可选替代方案
如果不想升级setup-python版本,也可以直接使用Windows自带的py启动器实现多版本调用:两个Python版本安装完成后,用py -2命令调用Python2,py -3命令调用Python3,不需要额外配置路径。但该方案依赖py启动器的安装状态,稳定性略低于直接用绝对路径调用的方案。
内容的提问来源于stack exchange,提问作者Oriane Nedey
相关产品推荐
相关产品推荐

