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

如何通过GitHub Actions将Release标签版本纳入Python包构建

解决Python包发布时GitHub Actions版本不匹配问题

问题描述

发布Python包时,GitHub Actions构建持续失败,流程仍引用已删除的测试版本0.1.0。尽管已经将setup.py中的版本更新为0.1.1,但创建新Release时构建依然使用旧版本号,需配置GitHub Actions的.yml文件使其正确关联Release标签版本。

当前配置文件

GitHub Actions 配置文件(.yml)

name: Upload Python Package

on:
  release:
    types: [published]

permissions:
  contents: read

jobs:
  deploy:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.x'
    - name: Check that tag version matches code version
      run: |
          tag=${GITHUB_REF#refs/tags/}
          version=$(python setup.py --version)
          echo 'tag='$tag
          echo "version file="$version
          test "$tag" == "$version"
    
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install build
    - name: Build package
      run: python -m build

setup.py 文件

from setuptools import find_packages, setup

# from sphinx.setup_command import BuildDoc

with open("README.md", "r", encoding="utf-8") as fh:
    long_description = fh.read()

setup(
    name="arxiv-summarizer",
    version="0.1.1",
    description="A happy toolkit for arxiv paper summarization and understanding.",
    long_description=long_description,
    long_description_content_type="text/markdown",
    url="https://github.com/ArchanGhosh/Arxiv-Summarizer",
    project_urls={
        "GitHub": "https://github.com/ArchanGhosh/Arxiv-Summarizer",
        "Homepage": "https://github.com/ArchanGhosh/Arxiv-Summarizer",
    },
    author="",
    author_email="",
    maintainer="",
    maintainer_email="",
    keywords="",
    license="Apache",
    package_dir={"": "src"},
    packages=find_packages(where="src"),
    include_package_data=True,
    py_modules=['__main__'],
    entry_points={
        'console_scripts': [
            'arxiv_summarizer = arxiv_summarizer.__main__:cli',
        ],
    },
    # cmdclass={"build_sphinx": BuildDoc},
    # these are optional and override conf.py settings
    command_options={
        "build_sphinx": {
            "project": ("setup.py", ""),
            "version": ("setup.py", "0.1.1a"),
            "release": ("setup.py", "0.1"),
            "source_dir": ("setup.py", "docs"),
        }
    },
    install_requires=[
        # Arxiv & PDF
        "langchain",    # For loading Arxiv PDFs
        "arxiv",        # `langchain` dependency
        "pymupdf",      # `langchain` dependency

        # ML
        "transformers", # For Transformer models
        #"gradio",       # For Web Interface
        "torch==2.1.2", # For Machine Learning

        # CLI
        "click",        # For CLI arguments
        "rich",         # For Rich Text in CLI

        # Tests
        "pytest",       # For Unit Tests
    ],
    extras_require={
        "dev": [
            "nox",
            "pytest",
        ],
        "docs": [
            "sphinx",
            "sphinxemoji",
            "pydata-sphinx-theme",
            "numpydoc",
            "sphinx_panels",
            "matplotlib",
            "Ipython",
            "sphinx-hoverxref",
        ],
    },
    classifiers=[
        # License
        "License :: OSI Approved :: Apache Software License",
        # Project Maturity
        "Development Status :: 3 - Alpha",
        # Topic
        "Topic :: Communications",
        # Intended Audience
        "Intended Audience :: Science/Research",
        # Compatibility
        "Operating System :: Microsoft :: Windows",
        "Operating System :: MacOS",
        "Operating System :: POSIX :: Linux",
        #Environment
        "Environment :: Console",
        "Environment :: GPU",
        
        # Python Version
        #"Programming Language :: Python :: 3",
        #"Programming Language :: Python :: 3.4",
        #"Programming Language :: Python :: 3.5",
        #"Programming Language :: Python :: 3.6",
        #"Programming Language :: Python :: 3.7",
        "Programming Language :: Python :: 3.8",
        "Programming Language :: Python :: 3.9",
        "Programming Language :: Python :: 3.10",
        "Programming Language :: Python :: 3.11",
    ],
)

修复步骤

1. 统一setup.py内的所有版本引用

你的setup.py中,command_options下的build_sphinx配置里,version设为0.1.1a、release设为0.1,这会导致python setup.py --version返回非预期值。需将这些值与主版本0.1.1统一:

command_options={
    "build_sphinx": {
        "project": ("setup.py", ""),
        "version": ("setup.py", "0.1.1"),  # 与主版本保持一致
        "release": ("setup.py", "0.1.1"),  # 与主版本保持一致
        "source_dir": ("setup.py", "docs"),
    }
},

2. 确保Release标签与setup.py版本完全匹配

创建Release时,标签必须和setup.py里的version字段完全相同(如0.1.1)。如果习惯用v前缀(如v0.1.1),需修改Actions中的版本提取逻辑:

tag=${GITHUB_REF#refs/tags/v}  # 移除标签的v前缀

3. 强制拉取最新代码

避免Actions缓存旧代码,在actions/checkout步骤中添加fetch-depth: 0确保拉取完整历史:

- uses: actions/checkout@v4
  with:
    fetch-depth: 0

4. 优化版本校验逻辑

增强校验步骤的调试输出,便于排查版本不匹配问题:

run: |
    tag=${GITHUB_REF#refs/tags/}
    echo "当前标签: $tag"
    version=$(python setup.py --version)
    echo "setup.py版本: $version"
    if [ "$tag" != "$version" ]; then
        echo "版本不匹配: 标签=$tag, 代码版本=$version"
        exit 1
    fi

5. 重新触发构建

提交所有配置修改到主分支,删除旧的Release和标签,重新创建标签为0.1.1的Release,触发Actions构建即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 08:15:14