如何配置GitHub Actions仅在Python 3.6及以上版本执行任务?
解决GitHub Actions构建矩阵中Python版本判断问题
问题分析
你的构建矩阵混合了数字类型(如2.7、3.5)、字符串补丁版本(如'3.9.1')和主版本标识(3,对应最新Python 3.x),直接用matrix.python-version >= 3.6会因类型不统一导致判断失效,且硬编码特定版本的写法扩展性差,新增版本时需手动修改条件。
优化方案
通过实际获取安装后的Python版本进行判断,避免依赖矩阵中版本的格式。具体步骤如下:
- 添加一个步骤,提取Python的主版本+次版本(如3.6、3.9),并判断是否满足>=3.6的要求,将结果存入输出变量;
- 后续安装依赖的步骤根据该输出变量决定是否执行。
修改后的完整配置
jobs: run-tests: name: Run tests runs-on: ubuntu-latest defaults: run: shell: bash -l {0} strategy: matrix: python-version: [2.7, 3.5, 3.6, '3.9.1', 3] fail-fast: false steps: - uses: actions/checkout@v2 - uses: conda-incubator/setup-miniconda@v2 with: auto-update-conda: true python-version: ${{ matrix.python-version }} - name: 判断是否需要安装3.6+依赖 id: check-python-version run: | # 获取Python主版本和次版本,格式如3.6、3.9 PY_MAJOR_MINOR=$(python -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')") # 比较版本是否>=3.6,输出判断结果 if (( $(echo "$PY_MAJOR_MINOR >= 3.6" | bc -l) )); then echo "needs_deps=true" >> $GITHUB_OUTPUT else echo "needs_deps=false" >> $GITHUB_OUTPUT fi - name: Install testing dependencies (Python 3.6+) if: ${{ steps.check-python-version.outputs.needs_deps == 'true' }} run: | conda install -c anaconda -c conda-forge --file requirements-linting-old.txt libstdcxx-ng
方案优势
- 兼容性强:不管矩阵中版本是数字、字符串还是主版本标识,都基于实际安装的Python版本判断,避免格式问题;
- 扩展性好:新增Python 3.10、3.11等版本时,无需修改判断条件,自动适配;
- 逻辑清晰:将版本判断逻辑独立成步骤,配置结构更易读维护。
内容的提问来源于stack exchange,提问作者j13r
相关产品推荐
相关产品推荐

