You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

GitHub Actions配置Conda环境后执行Python脚本测试遇Runner无响应问题排查求助

GitHub Actions配置Conda环境后执行Python脚本测试遇Runner无响应问题排查求助

你的工作流主要存在三个关键问题,其中第一个直接导致了Runner无法拾取任务的现象,另外两个会导致后续测试执行失败:

1. 语法错误导致Runner无法分配(直接引发等待问题)

runs-on字段中,你错误地写了$${{ matrix.platform }}——这里多了一个额外的美元符号。GitHub Actions的表达式语法只需要单层${{ ... }}包裹,多余的$会让表达式解析失败,工作流无法识别要使用的目标运行平台,自然无法分配对应的Runner,从而卡在"Waiting for a runner to pick up this job..."状态。

修复方式:将该字段修改为正确的表达式:

runs-on: ${{ matrix.platform }}

2. 缺失代码检出步骤

你完全没有添加拉取仓库代码的步骤!GitHub Actions的Runner是全新的干净环境,默认不会包含你的仓库文件,所以后续执行conda env create -f environment.yml时,会因为找不到environment.yml文件直接失败。

修复方式:在所有依赖仓库文件的步骤之前,添加actions/checkout步骤:

- uses: actions/checkout@v4

3. Conda环境激活的Shell兼容性问题

在GitHub Actions的非交互式Shell中,直接使用conda activate可能会遇到初始化问题——默认Shell没有加载Conda的初始化脚本,导致conda activate命令无法生效。

你可以通过两种方式解决:

方式一:配置Setup Miniconda使用登录Shell

setup-miniconda步骤中指定shell参数,确保Shell加载Conda的初始化配置:

- uses: conda-incubator/setup-miniconda@v3
  with:
    miniconda-version: "latest"
    python-version: ${{ matrix.python-version }}
    shell: bash -l {0}  # 登录Shell会自动加载Conda初始化

方式二:使用conda run替代手动激活

不需要手动激活环境,直接用conda run在目标环境中执行测试命令,这种方式更适合非交互式场景:

- name: Run tests
  run: |
    conda env create -f environment.yml
    conda run -n price_predictor_env python -m pytest tests/

修复后的完整工作流示例

name: conda

on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - main

jobs:
  tests:
    name: tests
    strategy:
      fail-fast: false
      matrix:
        platform: [windows-latest, macos-latest, ubuntu-latest]
        python-version: ['3.12']

    runs-on: ${{ matrix.platform }}

    steps:
    # 新增:拉取仓库代码
    - uses: actions/checkout@v4

    # 配置Miniconda,指定Python版本并启用登录Shell
    - uses: conda-incubator/setup-miniconda@v3
      with:
        miniconda-version: "latest"
        python-version: ${{ matrix.python-version }}
        shell: bash -l {0}

    - name: Run tests
      run: |
        conda env create -f environment.yml
        conda activate price_predictor_env
        cd tests
        python -m pytest

备注:内容来源于stack exchange,提问作者sodiumnitrate

火山引擎 最新活动