PEP 102 – Python 微版本发布
- 作者:
- Anthony Baxter <anthony at interlink.com.au>, Barry Warsaw <barry at python.org>, Guido van Rossum <guido at python.org>
- 状态:
- 已取代
- 类型:
- 信息性
- 创建日期:
- 2002年1月9日
- 发布历史:
- 取代者:
- 101
替换说明
尽管此PEP中的待办事项清单比PEP 101中的要少得多,但这不足以证明信息重复的合理性,而且还存在其中一个副本过时的风险。因此,此PEP不再维护,微版本发布完全由PEP 101涵盖。
摘要
进行Python发布是一个艰巨的过程,即使对于经验丰富的发布者,也至少需要半天的工作量。直到最近,大部分(如果不是全部)负担都由Guido本人承担。但最近的几次发布是由其他人完成的,因此此PEP试图将进行Python错误修复版本发布所需的所有步骤集中在一处。
主要的Python发布过程在PEP 101中有所涵盖——此PEP只是PEP 101的精简版,只包含与微版本发布(即补丁或错误修复版本发布)相关的部分。
它以一个食谱的形式组织,您可以实际打印出来并在完成时勾选项目。
如何进行发布
以下是进行 Python 发布所采取的步骤。有些步骤比其他步骤更模糊,因为几乎没有什么可以自动化的(例如编写 NEWS 条目)。如果某个步骤通常由专家执行,则会给出该专家的姓名。否则,假设该步骤由发布经理 (RM)(执行发布的指定人员)完成。下面提到 RM 的几乎所有地方,该步骤当然也可以由 BDFL 完成!
XXX:我们应该包含一个依赖关系图,以说明可以并行执行的步骤,或者依赖于其他步骤的步骤。
在下面的示例中,我们使用以下约定。如果给定发布号,则其形式为 X.Y.MaA,例如 Python 2.1.2 候选版本 1 的 2.1.2c1,其中“a”表示 alpha,“b”表示 beta,“c”表示发布候选版本。最终版本在 CVS 中标记为“releaseXYZ”。微版本发布是根据主要版本的维护分支制作的,例如 Python 2.1.2 是根据 release21-maint 分支制作的。
- 向 python-dev@python.org 发送一封电子邮件,表明发布即将开始。
- 冻结维护分支的签入。此时,除RM(或其正式指定的代理人,即BDFL Guido、文档负责人Fred Drake或Windows负责人Thomas Heller)之外,任何人都不应向该分支提交任何内容。如果RM搞砸了,并且需要对分支进行一些紧急的最后修改,这可能意味着Fred和Thomas的额外工作。因此,尽量避免这种情况!
- 在分支上,更改 Include/patchlevel.h 中的两个位置,以反映您刚刚创建的新版本号。您需要更改 PY_VERSION 宏,以及 PY_VERSION 上方的一个或几个版本子部分宏,视情况而定。
- 将 Misc/RPM/python-2.3.spec 的“%define version”行更改为与上述
PY_VERSION更改为相同的字符串。例如%define version 2.3.1
您可能还需要将 %define release 行重置为“1pydotorg”(如果它不是)。
- 如果您正在更改 Python 的版本号(例如,从 Python 2.1.1 更改为 Python 2.1.2),您还需要更新 README 文件,该文件的顶部有一个大横幅宣告其身份。如果您只是发布新的 alpha 或 beta 版本,请不要这样做,但如果您发布新的微版本、次要版本或主要版本,则/务必/这样做。
- LICENSE 文件也需要更改,因为其中包含多个对版本号的引用。与 README 文件一样,更改这些内容对于新的微版本、次要版本或主要版本是必要的。
LICENSE 文件包含一个描述 Python 法律传承的表格;您应该为您正在制作的 X.Y.Z 版本添加一个条目。您还应该更新 CVS 主干上的 LICENSE 文件中的此表格。
- 当年份发生变化时,许多地方的版权声明需要更新,包括 README 和 LICENSE 文件。
- 对于 Windows 构建,需要更新其他文件。
PCbuild/BUILDno.txt 包含 Windows 构建编号,请参阅此文件中的说明以了解如何更改它。保存项目文件 PCbuild/pythoncore.dsp 也会导致 PCbuild/pythoncore.dsp 发生更改。
PCbuild/python20.wse 设置 Windows 安装程序版本资源(当您右键单击安装程序 .exe 并选择“属性”时显示),并且还包含 Python 版本号。
(在 2.3.2 版之前,需要手动编辑 PC/python_nt.rc,现在此步骤已由构建过程自动化。)
- 启动该过程后,接下来最重要的事情是更新 Misc/NEWS 文件。Thomas 将需要它来进行 Windows 发布,而且他喜欢熬夜。这一步可能相当乏味,因此最好在创建分支后立即进行,甚至在创建分支之前进行。越早越好(但再次提醒,在发布完成之前,请注意新的签入!)。
添加本次发布的新高级项目。例如,如果我们要发布 2.2a3,则文件顶部必须有一个部分解释“Python 2.2a3 的新功能”。后面将有一个标题为“Python 2.2a2 的新功能”的部分。
请注意,您**希望**开发人员在向主干添加新功能时已相应地更新了 NEWS 文件。您不能确定,所以请仔细检查。如果您是 Unix 爱好者,与 Thomas 核实 Windows 上的更改,与 Jack Jansen 核实 Mac 上的更改会有所帮助。
此命令应该能帮助您(但请替换正确的 -r 标签!)。
% cvs log -rr22a1: | python Tools/scripts/logmerge.py > /tmp/news.txt
换句话说,您正在打印从上次发布到现在的所有 cvs 日志条目。然后,您可以浏览 news.txt 文件,查找要添加到 NEWS 中的有趣内容。
- 将您的 NEWS 更改签入维护分支。很容易忘记更新此文件中的发布日期!
- 将 IDLE 的 NEWS.txt 的任何更改签入。更新 Lib/idlelib/NEWS.txt 中的标题以反映其发布版本和日期。更新 Lib/idlelib/idlever.py 中的 IDLE 版本以匹配。
- 发布过程启动后,需要按照 PEP 101 中的说明构建文档并发布到 python.org 上。
请注意,Fred 负责将主干的文档更改合并到分支,并在清理阶段将分支的任何更改合并到主干。基本上,如果它在 Doc/ 中,Fred 将会处理它。
- Thomas 使用 MSVC 6.0 SP5 编译所有内容,并将 python23.chm 文件移动到 src/chm 目录。然后使用 Wise Installation System 生成安装程序可执行文件。
安装程序包含 MSVC 6.0 运行时,位于 MSVCRT.DLL 和 MSVCIRT.DLL 文件中。如果这些文件取自构建安装程序的机器的系统目录,将会导致灾难,相反,必须绝对确保这些文件来自 MSVC SP5 CD 中包含的 VCREDIST.EXE 可再发行软件包。VCREDIST.EXE 必须使用 winzip 解包,Wise Installation System 会提示输入目录。
构建安装程序后,应使用 winzip 打开它,并再次提取 MS dll 文件,并检查其版本号是否与从 VCREDIST.EXE 解压出来的版本号相同。
Thomas 将此文件上传到星舰。然后他向 RM 发送一份通知,其中包括 Windows 可执行文件的位置和 MD5 校验和。
请注意,Thomas 创建 Windows 可执行文件可能会在分支上生成更多提交。Thomas 将负责将 Windows 特定更改从主干合并到分支,以及从分支合并到主干。
- 肖恩施展他的 Red Hat 魔法,生成了一套 RPM。他将这些文件上传到 python.org。然后他向 RM 发送一份通知,其中包含 RPM 的位置和 MD5 校验和。
- 是构建时间了!
现在,您已准备好构建源 tarball。首先 cd 到您的分支工作目录。例如,% cd …/python-22a3
- 在此目录中执行“cvs update”。不要包含 -A 标志!
您不应该看到任何“M”文件,但可能会看到几个“P”和/或“U”文件。也就是说,您最好不要在工作目录中有任何未提交的更改,但您可能会收到 Fred 或 Thomas 的一些最后一分钟的更改。
- 现在使用符号名称“rXYMaZ”标记分支,例如 r212
% cvs tag r212
请务必只标记 Python CVS 树的 python/dist/src 子目录!
- 切换到一个中立目录,即一个您可以对分支进行全新、原始 CVS 导出的目录。您将在该位置创建一个新目录,命名为“Python-X.Y.M”。对已标记的分支进行 CVS 导出。
% cd ~ % cvs -d cvs.sf.net:/cvsroot/python export -rr212 \ -d Python-2.1.2 python/dist/src
- 生成 tarball。请注意,我们没有在 tar 命令中使用“z”选项,因为 1) 据我们所知,只有 GNU tar 支持此选项,2) 我们将最大限度地提高压缩级别,这不是一个受支持的选项。我们生成 tar.gz 和 tar.bz2 两种格式,因为后者大约小六分之一。
% tar -cf - Python-2.1.2 | gzip -9 > Python-2.1.2.tgz % tar -cf - Python-2.1.2 | bzip2 -9 > Python-2.1.2.tar.bz2
- 计算您刚刚创建的 tgz 和 tar.bz2 文件的 MD5 校验和。
% md5sum Python-2.1.2.tgz
请注意,如果您没有 md5sum 程序,Tools/scripts/md5sum.py 文件中有一个 Python 替代品。
- 为每个文件创建 GPG 密钥。
% gpg -ba Python-2.1.2.tgz % gpg -ba Python-2.1.2.tar.bz2 % gpg -ba Python-2.1.2.exe
- 现在您要执行非常重要的一步,即检查您刚刚创建的 tarball,以确保完全干净、原始的构建通过回归测试。以下是最佳步骤:
% cd /tmp % tar zxvf ~/Python-2.1.2.tgz % cd Python-2.1.2 % ls (Do things look reasonable?) % ./configure (Loads of configure output) % make test (Do all the expected tests pass?)
如果测试通过,那么您就可以放心地认为 tarball 没问题。如果某些测试失败,或者新解压的目录看起来有任何异常,您最好现在停止并找出问题所在。
- 您需要将 tgz 和 exe 文件上传到 creosote.python.org。此步骤可能需要很长时间,具体取决于您的网络带宽。将这两个文件从您自己的机器通过 scp 传输到 creosote。
- 等待时,您可以开始修改网页以包含公告。
- 在 python.org 网站 CVS 树的顶部,为 X.Y.Z 版本创建一个子目录。实际上,您可以复制早期补丁版本的子目录,但请务必删除 X.Y.Z/CVS 目录并“cvs add X.Y.Z”,例如:
% cd .../pydotorg % cp -r 2.2.2 2.2.3 % rm -rf 2.2.3/CVS % cvs add 2.2.3 % cd 2.2.3
- 编辑文件的内容:通常您可以全局替换 X.Ya(Z-1) 为 X.YaZ。但是,您需要考虑“有什么新功能?”部分。
- 将 Misc/NEWS 文件复制到 python.org 的 X.Y.Z 目录中的 NEWS.txt;这包含自此 Python 版本上次发布以来对 Python 的所有更改。
- 也将您之前创建的 .asc GPG 签名复制到此处。
- 此外,更新 MD5 校验和。
- 通过执行“make”或“make install”预览网页(只要您已为此版本创建了新目录!)。
- 同样,编辑 ../index.ht 文件,即 python.org 主页。在“大蓝色公告块”中,将新版本的段落移到顶部,并加粗“Python X.YaZ 已发布”短语。编辑内容并在本地预览,但**不要**立即执行“make install”!
- 在 python.org 网站 CVS 树的顶部,为 X.Y.Z 版本创建一个子目录。实际上,您可以复制早期补丁版本的子目录,但请务必删除 X.Y.Z/CVS 目录并“cvs add X.Y.Z”,例如:
- 现在我们正在等待 scp 到 creosote 完成。嗒嗒嗒,嗒嗒嗒,嗯,嗯,嗒嗒嗒。
- 一旦完成,您需要前往 creosote.python.org 并将所有文件移动到正确的位置。我们的策略是每个 Python 版本都有自己的目录,但每个目录可能包含多个发布。我们保留所有旧的发布,当有新的发布时,将它们移动到“prev”子目录中。
所以,有一个名为“2.2”的目录,其中包含 Python-2.2a2.exe 和 Python-2.2a2.tgz,以及一个名为“prev”的子目录,其中包含 Python-2.2a1.exe 和 Python-2.2a1.tgz。
所以……
- 在 creosote 上,cd 到 ~ftp/pub/python/X.Y,如果需要则创建它。
- 将以前的发布文件移动到一个名为“prev”的目录中,如果需要则创建该目录(确保该目录具有 g+ws 位)。如果这是新的 Python 版本的第一个 alpha 发布,请跳过此步骤。
- 将 .tgz 文件和 .exe 文件移动到此目录。确保它们对所有用户可读。它们也应该是组可写,并由 webmaster 组拥有。
- 对文件进行 md5sum 校验,并确保它们完整上传。
- 如有必要,请编辑 X.Y/bugs.ht 文件。最好在此步骤中征求 BDFL 的意见。
- 返回父目录(即网页层次结构的根目录)并在此处执行“make install”。您的版本现在已上线!
- 现在是时候为邮件列表撰写公告了。这是模糊的部分,因为很多都无法自动化。您可以使用 Guido 以前的公告作为模板,但请务必编辑其内容!
公告准备好后,将其发送到以下地址:
python-list@python.org python-announce@python.org python-dev@python.org
- 发送关于发布到 SourceForge 的新闻条目。从项目“菜单栏”中,选择“新闻”链接;进入新闻后,选择“提交”链接。在“主题”框中输入适当的主题(例如“Python 2.2c1 发布”:-),在“详细信息”框中添加一些文本(至少包括 www.python.org 上的发布 URL 以及您对发布感到满意的事实),然后单击“提交”按钮。
随意删除任何旧新闻条目。
现在是时候做一些清理工作了。这些步骤非常重要!
- 编辑文件 Include/patchlevel.h,使 PY_VERSION 字符串显示类似“X.YaZ+”的内容。请注意末尾的“+”,表示主干将继续向前发展。例如,该行应如下所示:
#define PY_VERSION "2.1.2+"确保其他
PY_版本宏包含正确的值。提交此更改。 - 对于格外小心的人,请对发布进行完全干净的测试。这包括从 www.python.org 下载 tarball。
- 确保 md5 校验和匹配。然后解压 tarball,并进行一次干净的 make test。
% make distclean % ./configure % make test
以确保回归测试套件通过。如果失败,那您就在某个地方搞砸了!
步骤 5 …
验证!这可以与步骤 4 交错进行。假装您是用户:从 python.org 下载文件,然后从中构建 Python。这一步太容易被忽视了,我们曾多次遇到无用的发布文件。一次是通用服务器问题导致所有文件神秘损坏;一次是源 tarball 构建不正确;不止一次是 SF 上的文件上传过程截断了文件;等等。
下一步?
高兴吧。喝酒。狂欢。写一篇像这样的 PEP。或者像 Guido 一样去度假。
您刚刚发布了一个 Python 版本!
实际上,还有一个步骤。您应该将分支的所有权转交给 Jack Jansen。这意味着现在他将负责向分支提交代码。他将利用这一点来构建 MacOS 版本。他可能会向您发送有关 Mac 版本的信息,这些信息应合并到 www.python.org 上的信息页面中。完成后,他将为分支打上类似“rX.YaZ-mac”的标签。他还将负责将任何 Mac 相关更改合并回主干。
最终发布说明
任何主要版本的最终发布,例如 Python 2.2 最终版,都有特殊要求,特别是因为它将是生命周期最长的发布之一(即 beta 版不会持续超过几周,但最终版可以持续数年!)。
出于这个原因,我们希望在三个主要版本之间有更高的协调:Windows、Mac 和源代码。Windows 和源代码版本受益于各自发布机器人之间的紧密联系。但 Mac 机器人 Jack Jansen 离我们有 6 小时之遥。因此,我们为最终版本的发布过程增加了这一额外步骤:
- 暂缓最终发布,直到 Jack 批准,或者直到我们失去耐心 <眨眼>。
当发布新的 bug 修复版本时,python.org 网站也需要进行一些调整。
- 文档应安装在 doc/<version>/。
- 从 doc/<previous-minor-release>/index.ht 添加一个链接到新版本的文档。
- 所有旧的 doc/<old-release>/index.ht 文件都应更新,以指向新版本的文档。
- /robots.txt 应修改,以防止搜索引擎抓取旧版本的文档。
Windows 注意事项
Windows 有一个图形用户界面安装程序,各种 Windows 版本都有“特殊限制”,Windows 安装程序还打包了预编译的“外部”二进制文件(Tcl/Tk、expat 等)。因此,Windows 测试虽然繁琐,但非常必要。
在上传安装程序的同时,Thomas 会两次从安装程序中安装 Python:一次安装到安装程序建议的默认目录中,另一次安装到名称中包含嵌入空格的目录中。每次安装,他都会从 DOS 命令行运行完整的回归测试套件,并且分别使用和不使用 -0 选项。
他还尝试了“开始”->“菜单”->“Python 组”下创建的**所有**快捷方式。以这种方式尝试 IDLE 时,您需要验证“帮助”->“Python 文档”是否有效。以这种方式尝试 pydoc(“模块文档”开始菜单项)时,请确保“启动浏览器”按钮有效,并确保您可以搜索一个随机模块(Thomas 使用“random”<眨眼>),然后确保“转到选定”按钮有效。
令人惊讶的是,这里可能会出多少问题——更令人惊讶的是,临时的签入经常会破坏其中之一。如果你是“Windows 技术狂人”,请记住,你很可能是唯一一个定期在 Windows 上进行测试的人,而且 Windows 简直是一团糟。
在至少一个 Win9x 版本和一个 NT/2000/XP 版本上重复上述所有操作。在 NT/2000/XP 上,尝试管理员帐户和普通用户(非高级用户)帐户。
关于上面步骤 5(验证发布媒介),由于当发布文件准备好下载时,Thomas 通常已经对上传的安装程序运行了许多 Windows 测试,所以他通常不会为步骤 5 做任何事情,除了对下载的文件与他上传的文件进行完整的字节比较(如果使用 Windows shell,则是“fc /b”)。
版权
本文档已置于公共领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0102.rst
最后修改时间:2025-02-01 08:55:40 GMT