NumPy 2.4.0 发布全流程实战:从打 Tag 到发布公告的 8 步完整走查(RELEASE_WALKTHROUGH 指南) NumPy 2.4.0 发布全流程实战从打 Tag 到发布公告的 8 步完整走查RELEASE_WALKTHROUGH 指南【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy本文是 NumPy 官方发布的逐步骤走查walkthrough指南以 Linux 环境下完成 NumPy 2.4.0 特性版本的完整发布为主线覆盖发布前准备、发布 PR、wheel/sdist 构建、GitHub Releases 与 numpy.org 文档上传、maintenance 分支复位、公告与邮件列表发布等全部环节。读完本文你将掌握 NumPy 维护团队从源码仓库走到 PyPI / numpy.org / GitHub Releases 的完整发布执行链路以及每一步对应的工具spin changelog、spin notes、tools/write_release.py、配置文件和常见陷阱可直接对照仓库内已有 2.4.0 发布产物如 doc/changelog/2.4.0-changelog.rst进行实操。该走查是 doc/HOWTO_RELEASE.rst 与 doc/BRANCH_WALKTHROUGH.rst 的具体化执行版后者负责宏观原则与分支创建前者则是发布当天一行行命令的执行手册。一、发布前置设施与环境准备在真正开始发布之前需要确保本机具备发布所需的软件环境。核心依据是仓库根目录下的requirements/*_requirements.txt系列文件其中与发布直接相关的是 requirements/release_requirements.txt内容如下# These packages are needed for a release in addition to those needed # for building, testing, and the creation of documentation. # changelog.py pygithub gitpython3.1.62 # uploading release documentation packaging也就是说发布流程在常规构建、测试、文档依赖之外还需要pygithubspin changelog生成 changelog 时访问 GitHub API 使用见 tools/changelog.py 中的from github import Githubgitpython3.1.62changelog 工具读取本地 git 历史git.shortlog、git.log时使用packaging上传发布文档时使用。这些包可通过 pip 安装其余如编译器、系统库则可能需要apt-get、dnf等系统包管理器按需安装。此外发布文档到 numpy.org 需要GitHub personal access tokenPAT。官方建议将 Git 配置为使用 keyring 存储该 token避免每次输入。二、正式发布前的准备清单1. 增删 Python 版本支持当某个发布周期需要新增或放弃 Python 版本支持时除修改pyproject.toml中的最低版本外还有多个配置与 CI 文件需要同步修改。官方做法是在普通 PR 中针对 main 分支提交这些改动必要时 backport 到维护分支。发布 wheel 的时机是新 Python 发布首个 RC 之后且 manylinux 与 cibuildwheel 均已支持该 Python 版本时。2. Backport 待发布 PR标记为本次发布如 2.4.0的改动需要被 backport 到maintenance/2.4.x分支。3. 更新 2.4.0 Milestone逐一检查带有 2.4.0 milestone 的 issue/PR要么推到后续版本要么移除 milestone必要时新建 milestone。4. 检查 numpy-release 仓库自 2.4.0 起NumPy 的 wheel 构建迁移到了独立的numpy/numpy-release仓库。发布前需要检查两处.github/workflows/wheels.yml中的cibuildwheel 版本openblas_requirements.txt中的OpenBLAS 版本wheel 中链接的 OpenBLAS 来自 openblas-libs 仓库并以重命名后的共享对象随 wheel 分发避免与系统中其他 OpenBLAS 冲突详见 doc/HOWTO_RELEASE.rst 的 OpenBLAS 一节。三、发布 PR四个必须更新的文档发布 PR 打在 maintenance 分支上通常涉及四份文档文档用途The changelog记录合并的 PR 与贡献者列表The release notes面向用户的发布说明.mailmap修正贡献者姓名的规范化映射pyproject.toml设置发布版本号建议的 commit message 模板REL: Prepare for the NumPy 2.4.0 release - Create 2.4.0-changelog.rst. - Update 2.4.0-notes.rst. - Update .mailmap. - Update pyproject.toml1. 设置发布版本编辑 pyproject.toml 中的版本号并视需要更新classifiers如新增/移除 Python 版本支持时$ gvim pyproject.toml2. 检查 doc/source/release.rst确保新版本发布说明已登记到发布说明索引文件 doc/source/release.rst 的 toctree 中$ gvim doc/source/release.rst仓库中该文件已按版本倒序登记了从 1.x 到 2.6.0 的所有发布说明例如2.4.0 release/2.4.0-notes。3. 生成 changelogchangelog 通过spin changelog生成它收集合并的 PR 并按发布就绪的格式输出$ spin changelog $GITHUB v2.3.0..maintenance/2.4.x doc/changelog/2.4.0-changelog.rst其中$GITHUB存放你的 GitHub access token版本区间v2.3.0..maintenance/2.4.x界定本次发布收录的提交范围。底层实现spin changelog对应 .spin/cmds.py 中的changelog()命令它加载 tools/changelog.py 完成实际工作。从 tools/changelog.py 源码可以看到其工作机制用git.shortlog按 author 与 co-author 统计贡献者对比上一版本区间为新贡献者名字追加号并剔除 Homu、dependabot-preview 等机器人用git log --merges/--first-parent提取 PR 编号支持 Merge pull request #N、Auto merge of #N、squash 提交尾部(#N)三种格式通过 pygithub 获取每个 PR 的标题并对标题做清洗空白规范化、单反引号转双反引号、转义星号、超长标题截断等。输出示例可参考仓库中已生成的 doc/changelog/2.4.0-changelog.rst其开头为 A total of 142 people contributed to this release... 加 Pull requests merged 列表。人工校验要点生成后需要检查非标准贡献者姓名PR 标题中的链接建议移除并改为等宽文本。非标准姓名通过更新.mailmap修复工作量大建议提前多跑几轮试生成并用 GitHub issue 联系对应贡献者补充信息。4. 完成发布说明release notes如果 doc/release/upcoming_changes/ 下存在待合并的 news 片段运行spin notes它会把片段并入发布说明并删除片段$ spin notes $ gvim doc/source/release/2.4.0-notes.rst底层实现spin notes对应 .spin/cmds.py 中的notes()命令。它通过towncrier build --version version --yes调用 towncrier 合并片段然后运行 tools/ci/test_all_newsfragments_used.py 校验所有片段均已被消费。片段文件命名如28574.new_feature.rst、31364.c_api.rst类型后缀new_feature、improvement、change、performance、c_api、expired等决定其归入发布说明的哪个小节。合并完成后移除发布说明中残留的.. include:: notes-towncrier.rst指令补齐引言introduction突出重要变更significant changes对于补丁版本patch release可把 changelog 文本追加进发布说明首次特性版本则不加太长。新版本发布说明的骨架可从模板 doc/source/release/template.rst 复制其包含 Highlights 小节占位与.. include:: notes-towncrier.rst指令。另可参考 doc/HOWTO_RELEASE.rst 的说明Highlights 应涵盖重大新特性、弃用与移除、支持的 Python 版本、SciPy 等下游依赖支持的 NumPy 版本等。5. 测试 wheel 构建发布 PR 合并后在浏览器中打开 numpy-release 仓库在maintenance/2.4.x分支上通过 Actions 页面的Run workflow按钮手动触发构建environment 下拉框务必选择 upload target 为none只构建不发布。wheel 构建约需 1 小时GitHub 偶发极慢。若有与本次改动无关的构建失败可在 Actions UI 用re-run failed重跑。构建完成后核对 artifact 数量与 wheel 命名是否符合预期。四、发布走查8 步完整流程以下命令中upstream指 GitHub 上的根仓库origin指你的 fork。若只是本地 clone 未 fork可通过编辑.git/config添加upstream远程。第 1 步给发布提交打 Tag检出维护分支确保最新并清理仓库$ git checkout maintenance/2.4.x $ git pull upstream maintenance/2.4.x $ git submodule update $ git clean -xdfq理智检查跑完整测试$ python3 -m spin test -m full打 tag 并推送需要 numpy 仓库写权限$ git tag -a -s v2.4.0 -mNumPy 2.4.0 release $ git push upstream v2.4.0若出错需删除 tag$ git tag -d v2.4.0 $ git push --delete upstream v2.4.0第 2 步构建 wheels 与 sdist再次前往 numpy-release 仓库手动触发maintenance/2.4.x分支上的 workflow这次 environment 的 upload target 选择pypi。构建同样约 1 小时失败可 re-run failed。核对 artifact 后触发上传PyPI 上传走的是 PyPI 的 trusted publishingCI 自动化完成。第 3 步上传文件到 GitHub Releases访问 numpy/numpy 的 releases 页面找到v2.4.0tag 并编辑将标题改为 v2.4.0 (日期)。发布正文需要 Markdown 格式用脚本把 rst 发布说明转成 md$ python tools/write_release.py 2.4.0该脚本tools/write_release.py会把doc/source/release/2.4.0-notes.rst复制为release/README.rst再用 pandoc 转为release/README.md。之后人工检查结果通常需要修复自动换行解包以及把链接改为等宽文本。把内容复制进文本编辑窗口可能要尝试几次然后从 PyPI 下载 sdistnumpy-2.4.0.tar.gz并以二进制文件上传到 GitHub Releases不能用 pip 完成此操作上传release/README.rst二进制上传doc/changelog/2.4.0-changelog.rst二进制预发布版本勾选 pre-release 按钮点击Publish release。注意请务必确保 3 个文件全部上传且发布文本完整。Releases 被配置为不可变immutable出错后难以轻易修复。第 4 步上传文档到 numpy.org预发布版本可跳过此步仅正式版需要预发布与多数补丁版可跳过。需要 GitHub PAT。make merge-doc会把 numpy/doc 仓库 clone 到doc/build/merge并用新文档更新$ git clean -xdfq $ git co v2.5.0 $ rm -rf doc/build # 让版本保持最新 $ python -m spin docs merge-doc --build如需 PDF 文档注意据 doc/HOWTO_RELEASE.rst团队已不再构建 pdf 文件以下为原走查中遗留步骤$ python -m spin docs latex $ pushd doc/build/latex $ make all-pdf $ popd $ cp doc/build/latex/numpy-user.pdf doc/build/latex/numpy-ref.pdf doc/build/merge/2.5/若这是新的发布系列如 2.5需要在doc/build/merge/index.html的 insert here 注释后新增一节$ pushd doc/build/merge $ gvim index.html /insert here再更新版本切换器 JSON加入新版本并将(stable)与preferred标记切到新版本$ gvim _static/versions.json $ python3 update.py可用浏览器试运行新文档版本下拉框不会变因为它从 numpy.org 拉取信息$ firefox index.html # 或 google-chrome 等更新 stable 软链接并提交上传$ ln -sfn 2.5 stable $ ls -l stable # 检查链接 $ git checkout -b v2.5 $ git add 2.5/*.pdf $ git commit -a -mAdd documentation for v2.5.0 $ git push gitgithub.com:numpy/doc $ popd第 5 步将 maintenance 分支复位为开发状态预发布版本可跳过为下一个版本创建骨架发布说明并设置版本号$ git checkout -b begin-2.4.1 maintenance/2.4.x $ cp doc/source/release/template.rst doc/source/release/2.4.1-notes.rst $ gvim doc/source/release/2.4.1-notes.rst $ git add doc/source/release/2.4.1-notes.rst在发布说明索引 doc/source/release.rst 中添加新版本链接$ gvim doc/source/release.rst更新 pyproject.toml 中的version提交并推送commit message 中加[skip actions]行避免触发 CI$ gvim pyproject.toml $ git commit -a -mMAINT: Prepare 2.4.x for further development $ git rebase -i HEAD^ $ git push origin HEAD然后到 GitHub 建 PR应快速合并。第 6 步在 numpy.org 上公告预发布版本可跳过假设已 fork numpy/numpy.org 仓库$ cd ../numpy.org $ git checkout main $ git pull upstream main $ git checkout -b announce-numpy-2.4.0 $ gvim content/en/news.md所有发布在页面底部添加一行公告链接参照历史公告格式发布周期中的首个.0版本在顶部新增一节简要描述新特性并把 news 链接指向它编辑 news.md 顶部的 newsHeader 与 date 字段编辑content/en/config.yaml第 14 行的 buttonText。提交并推送然后建 PR$ git commit -a -mannounce the NumPy 2.4.0 release $ git push origin HEAD第 7 步公告到邮件列表发布需在numpy-discussion与python-announce-list邮件列表上公告可参照历史公告模板。贡献者与 PR 列表与上面发布说明生成的一致。若交叉发帖务必把 python-announce-list 放在BCC避免回复被发到该列表。第 8 步发布后更新 main预发布版本可跳过将文档变更 forward port 回 main$ git checkout -b post-2.4.0-release-update main $ git checkout maintenance/2.4.x doc/source/release/2.4.0-notes.rst $ git checkout maintenance/2.4.x doc/changelog/2.4.0-changelog.rst $ git checkout maintenance/2.4.x .mailmap # 仅当本次发布更新过 .mailmap $ gvim doc/source/release.rst # 添加新发布说明链接 $ git status # 提交前检查 $ git commit -a -mMAINT: Update main after 2.4.0 release. $ git push origin HEAD最后到 GitHub 建 PR 合并。五、发布流程的完整闭环与配套指南本走查是 NumPy 发布体系的一环建议与以下仓库内文档配合阅读doc/HOWTO_RELEASE.rst发布总览涵盖支持平台macOS/Windows/Linux/BSD 等、toolchainLinux 用 manylinux/musllinux 镜像默认 GCC、macOS 用 Apple Clang、Windows 用 MSVC 与 Clang-cl、OpenBLAS 链接方式、C API 版本号管理numpy/_core/meson.build、numpy/_core/code_generators/cversions.txt、numpy/_core/include/numpy/numpyconfig.h三处同步以及用 towncrier 构建发布说明的流程doc/BRANCH_WALKTHROUGH.rst创建新 maintenance 分支如maintenance/2.3.x、给 main 打v2.4.0.dev0起始 tag、清理 news 片段、创建新版本发布说明骨架等分支期操作。此外spin命令体系在 pyproject.toml 的[tool.spin.commands]中注册Build / Environments / Documentation / Metrics 分组spin docs、spin changelog、spin notes等均在 .spin/cmds.py 中实现是贯穿整个发布流程的核心工具链。六、实践要点速查版本号全局一致命令中的2.4.0需替换为实际版本pyproject.toml、发布说明、changelog、tag 五处保持一致环境下拉框是发布安全阀构建测试选none正式发布选pypi选错会导致意外上传GitHub Releases 不可变3 个二进制附件sdist、README.rst、changelog与发布正文务必一次备齐再点 Publish预发布版本跳过第 4、5、6、8 步对预发布RC均跳过只保留构建、上传 PyPI、GitHub Releases 与邮件列表公告[skip actions]标记第 5 步复位 maintenance 分支的提交需携带该标记避免触发无谓 CIBCC 防串扰交叉公告邮件列表时python-announce-list 必须放 BCC。以 doc/RELEASE_WALKTHROUGH.rst 为执行手册、以 doc/changelog/2.4.0-changelog.rst 与 doc/source/release.rst 为产物参照、以 tools/changelog.py、tools/write_release.py 与 .spin/cmds.py 为工具实现依据即可完整复现 NumPy 从代码冻结到全渠道公告的发布闭环。【免费下载链接】numpyThe fundamental package for scientific computing with Python.项目地址: https://gitcode.com/gh_mirrors/nu/numpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考