如何通过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
相关产品推荐
相关产品推荐

