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

如何通过Bash从setup.py或PKG-INFO获取版本并导出为环境变量用于GitHub Action

从setup.py或PKG-INFO提取版本号的Bash实现方案

适用于Bash环境下提取Python包版本号并导出为环境变量,可直接用于GitHub Action流水线场景。


方案实现

1. 从PKG-INFO提取(优先推荐)

PKG-INFO是Python打包生成的标准元数据文件,格式固定,提取准确率100%,用以下命令即可提取:

grep '^Version:' PKG-INFO | awk '{print $2}'

2. 从setup.py提取

稳妥方案(无格式依赖)

直接调用Python原生解析setup.py内容,不会受注释、字符串引号格式、跨行等场景影响,提取结果最准确:

python3 -c "import setuptools; with open('setup.py') as f: exec(f.read()); print(version)"

纯Bash正则备选方案

仅适用于setup.py中version参数固定为双引号包裹、无跨行、无同名注释的场景:

grep -Po '(?<=version=")[^"]+' setup.py

导出为环境变量的完整脚本

优先读取PKG-INFO,不存在则读取setup.py,自动导出环境变量:

if [ -f "PKG-INFO" ]; then
  PACKAGE_VERSION=$(grep '^Version:' PKG-INFO | awk '{print $2}')
else
  PACKAGE_VERSION=$(python3 -c "import setuptools; with open('setup.py') as f: exec(f.read()); print(version)")
fi

# 导出为当前shell环境变量
export PACKAGE_VERSION
# 打印验证
echo "PACKAGE_VERSION=${PACKAGE_VERSION}"

GitHub Action中使用示例

在GitHub Action流水线中需将提取到的版本号写入GITHUB_ENV或GITHUB_OUTPUT供后续步骤调用:

steps:
  - name: 检出代码
    uses: actions/checkout@v4

  - name: 提取包版本号
    id: get_version
    run: |
      if [ -f "PKG-INFO" ]; then
        VERSION=$(grep '^Version:' PKG-INFO | awk '{print $2}')
      else
        VERSION=$(python3 -c "import setuptools; with open('setup.py') as f: exec(f.read()); print(version)")
      fi
      # 写入全局环境变量,所有后续步骤都可以直接读取
      echo "PACKAGE_VERSION=$VERSION" >> $GITHUB_ENV
      # 写入当前步骤输出,可按需调用
      echo "version=$VERSION" >> $GITHUB_OUTPUT

  - name: 验证版本号
    run: |
      echo "全局环境变量读取:${{ env.PACKAGE_VERSION }}"
      echo "步骤输出读取:${{ steps.get_version.outputs.version }}"

注意事项

  • Python解析setup.py的方案要求运行环境已安装Python和setuptools,GitHub Action默认Ubuntu运行环境已自带依赖,无需额外安装
  • 若setup.py中的版本号是从外部文件(如独立的VERSION文件)导入,两种提取方案均可以正常拿到正确值
  • 纯正则提取方案容错率低,仅建议确认setup.py格式完全匹配的场景下使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:27:03