Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 775 – 使 zlib 成为构建 CPython 的必需项

作者:
Gregory P. Smith <greg at krypto.org>, Stan Ulbrych <stanulbrych at gmail.com>, Petr Viktorin <encukou at gmail.com>
讨论至:
Discourse 帖子
状态:
已撤回
类型:
标准跟踪
创建日期:
2025年2月24日
Python 版本:
3.14
发布历史:
2023年1月23日, 2025年3月1日

目录

摘要

将不再支持在没有 zlib 压缩库的情况下构建 CPython,并且 zlib 模块将成为标准库的必需项。唯一的例外是 WASI,因为 zlib 目前在 WASI 上的 CPython 中不受支持。在没有 zlib 的情况下构建解释器可能仍然是可能的,但正式不受支持。

PEP 撤回

此 PEP 已于 2025-05-07 被作者撤回。经过进一步反思,我们意识到它没有提供足够的价值,并且遭到了大量的负面反馈,尤其是在提议的 WASI 例外方面。

动机

zlib 库为 zlib Python 模块提供支持,该库在除 WASI 以外的所有支持的系统上均可用。

PyPI 上的许多 wheel,包括 pip 安装程序,都需要 zlib。pip 用户会认为没有 zlib 的 CPython 是损坏的,但他们大多没有注意到,因为所有主流 CPython 构建都包含 zlib。

CPython 开发者也几乎没有注意到。事实证明,在撰写本文时,至少有一个 CPython 测试在没有 zlib 的情况下会失败(test_peg_generator.test_c_parser 中的“skip”装饰器应用得太晚了),但我们的 CI 没有捕获到这一点。

此 PEP 将此视为文档和消息传递中的一个问题。实际上,我们已经不支持在没有 zlib 的情况下构建 CPython;我们应该就此明确说明。

基本原理

对于无 zlib 构建,存在可能的用例,例如嵌入和引导,以及一些未预见的场景。因此,我们不会移除对无 zlib 系统的支持;我们将标记它们为不受支持,并邀请受影响的用户进行自己的测试,或分享可以让我们重新考虑此决定的用例。

zlib 尚未在 WASI 平台上默认使用——主要是因为添加它在那里还没有成为优先事项。(请注意,Pyodide,WASI 的主要“实际”CPython 发行版,确实包含 zlib。)我们将此视为一个机会,继续测试没有 zlib 的平台,这样我们就不会无意中破坏目前不受支持的构建。

规范

在标准库模块中,如果它们为可选功能使用 zlib,那么在使用该功能时将引发 ImportError。用于生成更“友好”错误消息或预检查 zlib 是否可用的代码将被删除。如果缺少 zlib,所有与 zlib 无关的功能仍然可以使用。

这会影响以下模块,以及更多通过依赖关系间接受影响的模块:

即使由于缺少 zlib 而无法使用,shutil.get_archive_formats() 仍将始终包含 zipgztar 作为已注册的格式。

在 WASI 以外的平台上,当找不到 zlib 时,configure 脚本将发出警告。

在 WASI 以外的平台上,test_zlib 将会失败。所有其他测试将继续被跳过——即,@test.support.requires_zlib 的用法将保留,以惠及 WASI、不受支持的构建以及任何可能的恢复。

PEP 11 将被调整,将“不含 zlib 的系统(WASI 除外)”标记为不受支持。

向后兼容性

实际上,除了错误情况外,并没有重大变化——例如,在缺少 zlib 的情况下尝试使用 tar 压缩将引发 ImportError 而不是 CompressionError

安全隐患

未知。

如何教授此内容

我们不期望需要更改任何说明,因为 zlib 已经在所有相关上下文中可用。

参考实现

可以在 CPython 存储库的一个拉取请求中找到一个参考实现:python/cpython#130297

未来工作

未来,如果没有找到无 zlib 构建的用例,zlib 可能会被完全强制要求。为此所需的主要更改将是使 configure 脚本引发一个硬错误,并移除 @test.support.requires_zlib


来源:https://github.com/python/peps/blob/main/peps/pep-0775.rst

最后修改:2025-05-09 13:52:32 GMT