PEP 715 – 在 PyPI 上禁用 bdist_egg 分发包上传
- 作者:
- William Woodruff <william at yossarian.net>
- 发起人:
- Donald Stufft <donald at stufft.io>
- PEP 代理人:
- Donald Stufft <donald at stufft.io>
- 讨论至:
- Discourse 帖子
- 状态:
- 最终版
- 类型:
- 标准跟踪
- 主题:
- 打包
- 创建日期:
- 2023年6月6日
- 发布历史:
- 2023年6月9日
- 决议:
- 2023年6月24日
摘要
本 PEP 建议弃用,然后禁用 PyPI 上 bdist_egg
分发类型的新的上传。同时,本 PEP 建议弃用,然后禁用带有 .egg
后缀的分发文件名的新的上传。
在本 PEP 之后,PyPI 将只接受 sdist
和 bdist_wheel
类型的新的上传,分别对应带有 .tar.gz
/.zip
和 .whl
后缀的文件。
本 PEP 不建议移除或以其他方式影响任何以前上传的 bdist_egg
分发包或带有 .egg
后缀的文件。
基本原理
前期工作
这项提案的基础是 PEP 527,该提案建议弃用并最终移除对少量未(充分)使用的文件扩展名和分发类型上传的支持。
特别是,PEP 527 建议移除 bdist_dumb
、bdist_rpm
、bdist_dmg
、bdist_msi
和 bdist_wininst
分发类型,以及分发文件名上的 .tar
、.tar.bz2
、.tar.xz
、.tar.Z
、.tgz
和 .tbz
文件扩展名。
PEP 527 已通过 Warehouse 的 PR #7529 完全实施,该 PR 于 2020 年 4 月 13 日合并。
bdist_egg
格式
bdist_egg
文件类型标识 egg 格式的分发包。egg 格式由 setuptools 于 2004 年引入,其功能大致相当于 wheel 格式,后者由 PEP 427 于 2012 年首次引入,作为 二进制分发包的标准化格式。
尽管 egg 格式存在已久,但在 PyPI 上的采用率有限。该问题的一些观察结果:
- 2023 年 5 月,
bdist_egg
上传占 PyPI 所有分发包上传的 0.2%; pip
在 2016 年弃用了其--egg
选项;setuptools
自 2019 年以来一直认为 egg 支持已弃用;build
只支持sdist
和bdist_wheel
文件类型。
鉴于上述情况,本 PEP 建议移除 bdist_egg
格式,理由与 PEP 527 中提出的相同,即:
- Egg 分发包对更广泛的生态系统用途有限,因此代表着一种非互惠的维护负担;
- 拥有额外的内置分发格式会给最终用户造成困惑,他们可能会错误地选择它而不是 wheel 格式;
本 PEP 此外还提出了基于标准化和重复性的移除论点:egg 格式未通过任何 PEP 或其他社区标准进行标准化,并且与其标准化且受良好支持的替代方案(wheel)大量重叠。
.egg
文件扩展名
.egg
文件扩展名专门用于 bdist_egg
格式的分发包。因此,在 PyPI 禁用 bdist_egg
分发包的新上传的情况下,它没有任何作用。
移除过程
本 PEP **不**建议从 PyPI 中移除任何现有文件,而只禁止上传新文件。
PyPI 将提供一个月的弃用期。在弃用期开始时,自 2023 年 1 月 1 日以来上传过一个或多个 egg 分发包的项目维护者将收到一封一次性电子邮件,告知他们即将停止支持 egg 分发包上传。
在弃用期内,用户将继续被允许向新项目和现有项目上传 egg 分发包。在此期间上传 egg 分发包也将向项目所有维护者发送类似上述的电子邮件,提醒他们即将停止支持。
弃用期结束后,PyPI 将不再支持上传 egg 分发包。
先行实践
上述移除过程基于 PEP 527,并进行了以下更改:
- 在弃用期内,所有项目将继续被允许上传 egg,而不仅仅是那些以前上传过的项目。
- 在弃用期内上传 egg 也将触发向维护者发送电子邮件,除了开始时的一次性电子邮件。
向后兼容性
有限影响
正如在理由部分所述,本 PEP 预计对绝大多数 PyPI 用户和项目没有影响,并且在过去 1 年半的时间里已经进行了大量的社区协调,以尽量减少对少数剩余用例的影响。
托管文件
本 PEP **不**建议移除任何已上传到 PyPI 的 egg 分发包。所有以前上传的 egg 分发包将保持可下载状态,确保现有用户将继续能够下载它们。
弃用期
本 PEP 使用上面记录的移除过程,该过程规定了对以前已将 egg 分发包上传到 PyPI 的项目有一个月的弃用期。
弃用期结束后,PyPI 将不再支持上传新的 egg 分发包。
安全隐患
本 PEP 未发现与移除 egg 分发包上传支持相关的任何正面或负面安全隐患。
如何教授
作为移除过程的一部分,PyPI 将向 2023 年曾上传过 egg 分发包的所有项目维护者发送电子邮件。
此外,PyPI 将在 PyPI 博客上发布一篇博文,公开宣布弃用期的开始和结束。
版权
本文档置于公共领域或 CC0-1.0-Universal 许可证下,以更宽松者为准。
来源:https://github.com/python/peps/blob/main/peps/pep-0715.rst