无需重建即可将Python预发布包升级为正式版的方法
无需重建的预发布包转稳定版方案
核心思路:修改已构建包的元数据并重打包
Python的wheel/sdist包本质是归档文件,直接修改其中的版本元数据后重新打包即可,不用从头构建。
1. 提取预发布包内容
假设你已有预发布wheel包(如mypackage-1.0.0rc4-py3-none-any.whl),先解压到临时目录:
mkdir temp_package unzip mypackage-1.0.0rc4-py3-none-any.whl -d temp_package
如果是sdist源码包(.tar.gz/.zip),执行解压命令:
tar -xzf mypackage-1.0.0rc4.tar.gz -C temp_package
2. 修改版本元数据
- Wheel包:找到
temp_package/mypackage.dist-info/METADATA,将Version: 1.0.0rc4替换为Version: 1.0.0;无需手动修改RECORD文件,后续打包工具会自动更新哈希和路径。 - Sdist包:进入解压后的源码目录,修改
pyproject.toml(或setup.cfg/setup.py)中的版本字段为稳定版,比如version = "1.0.0"。
3. 重新打包稳定版包
- Wheel包:用
wheel工具重新打包临时目录,自动生成符合规范的稳定版wheel:
pip install wheel wheel pack temp_package -o mypackage-1.0.0-py3-none-any.whl
- Sdist包:进入解压后的源码目录,快速生成稳定版sdist:
cd temp_package/mypackage-1.0.0rc4 python -m build --sdist
4. 在GitHub Actions中集成流程
- 缓存预发布包:构建预发布版本时,将生成的wheel/sdist包上传为GitHub Artifact或存入Actions缓存。
- 触发稳定版打包:可手动触发工作流,或在预发布版本验证通过后自动触发,从Artifact/缓存中下载预发布包。
- 执行上述修改、重打包步骤,最后用twine上传至内部PyPI仓库。
注意事项
- 确保预发布包已通过所有测试,重打包仅修改版本元数据,不会变更代码内容。
- 若包使用动态版本生成工具(如setuptools-scm),重打包时需禁用动态版本逻辑,避免覆盖手动修改的版本号。
内容的提问来源于stack exchange,提问作者Omri Ziner
相关产品推荐
相关产品推荐

