内容提要
PyPI 现限制版本号最长 128 字符,仅影响新上传,已有版本不变。现有约 990 万个发布中仅 2 个超长,最长 217 字符。超长版本影响页面可读性和无障碍访问。长度按标准化后计算,如 1.00 变 1.0。超限上传会报错,建议将构建日期等信息放变更日志。这是 PyPI 自身政策,非打包标准,pip 等工具无需改动。
延伸解读
实际影响范围极小
PyPI 上约 990 万个发布中,只有 2 个版本号超过 128 字符,最长的一个为 217 字符。这意味着新限制几乎不会影响现有项目,绝大多数开发者无需调整。已有版本不受影响,安装行为不变,因此对日常使用 pip 等工具的用户来说,这一政策变化基本无感。
长度按标准化后计算
PyPI 统计的是标准化后的版本号,例如 1.00 会变成 1.0,1.0-RC1 会变成 1.0rc1。因此,即使原始版本号看起来较长,标准化后可能仍在限制内。开发者在上传前应留意工具自动规范化后的结果,避免因原始写法误判长度而遇到上传错误。
超限上传的应对方式
如果上传的版本号超过 128 字符,PyPI 会返回 400 错误并提示具体长度。此时应缩短版本号后重新上传。构建日期、提交 ID 等附加信息更适合放在变更日志或项目描述中,而不是塞进版本号。这样既能满足限制,也能保持版本号简洁易读。
这是 PyPI 自身政策
该限制并非 Python 打包标准的新规定,而是 PyPI 作为包索引自行设定的政策。社区讨论后认为各索引可自行决定长度限制,因此 pip、uv 等工具无需改动,其他包索引也可以选择不同的策略。开发者应区分平台政策与通用标准,避免混淆。
Q&A
PyPI 对版本号长度有什么新限制?
PyPI 现在拒绝新上传的版本号超过 128 个字符的发布。该限制仅影响新上传,已有版本保持不变,安装方式也不变。
为什么 PyPI 要限制版本号长度?
因为过长的版本号会影响项目页面的可读性,难以在展示版本的地方适配,尤其对使用屏幕阅读器或放大阅读的用户不友好。128 字符远高于实际需要,但仍能保持页面可读性。
版本号长度是如何计算的?
PyPI 按标准化后的形式计算版本号长度,即项目页面上显示的标准化形式。例如 1.00 变为 1.0,1.0-RC1 变为 1.0rc1。含义不变,只是写法不同。
如果上传的版本号超过 128 字符会怎样?
上传时会收到 HTTP 400 错误,提示版本号在标准化后必须不超过 128 字符。需要选择更短的版本号重新上传。构建日期或提交 ID 等细节建议放在变更日志或项目描述中。
这个限制会影响 pip 等工具吗?
不会。这是 PyPI 自身的政策,不是新的打包标准。pip 和 uv 等工具无需更改,其他包索引也可以自行决定是否限制。
目前 PyPI 上有多少版本号超过 128 字符?
在 PyPI 上约 990 万个发布中,只有 2 个版本号超过 128 字符,最长的为 217 字符。因此该限制几乎影响不到任何人。