作者:许昆贞5564 | 来源:互联网 | 2023-09-11 13:29
由 Python 贡献者 Christian Heimes 和 Brett Cannon 提出的一项,从 Python 标准库中删除过时的和未维护的模块的 Python Enhancement Proposal (PEP) 594 已被批准通过。该提案最初于 2019 年提交,但直到近日才(3 月 11 日)被批准用于 Python 3.11。有了这个 PEP,Python 3.11 会将某些模块标记为已弃用,Python 3.12 将是最后一个版本包括这些模块。在 Python 3.13 中,不推荐使用的模块将被完全删除。
此 PEP 提出了一个要从标准库中删除的标准库模块清单。这些模块大多是历史数据格式(例如 Commodore 和 SUN 文件格式)、API 和早已被取代的操作系统(例如 Mac OS 9),或者具有安全隐患和更好替代方案(例如密码和登录)的模块。
一直以来,Python 都有着“batteries included”的理念;其目标是提供一个通用的标准库来处理许多常见的开发任务,用户不必为了编写简单的 Web 服务器或解析电子邮件而弄清楚如何下载和安装单独的包。
但随着时代的变迁,PyPI(née Cheeseshop)、setuptools 和 pip 的引入,下载和安装包变得简单直接。Python 如今也拥有了丰富而充满活力的第三方包生态系统。另一方面,Python 的标准库堆满了杂乱无章的、不必要的功能重复和可有可无的特性。基于此,官方认为:
- 任何额外的模块都会增加 Python 核心开发团队的维护成本。团队资源有限,减少的维护成本可以腾出开发时间用于其他改进。
- 标准库中的模块通常受到青睐,并被视为问题的实际解决方案。大多数用户只有在有令人信服的理由时才会选择第三方模块来替换 stdlib 模块,例如, 用
lxml
替代xml
。删除未维护的 stdlib 模块增加了社区贡献的模块被广泛使用的机会。 - 一个精简的标准库有利于资源有限的平台,例如只有几百 KB 存储空间的设备(如 BBC Micro:bit)。BeeWare 或 WebAssembly(如 pyodide)等移动平台上的 Python 也因下载量减少而受益。
此 PEP 中被弃用的模块要么是因为它们的移除是最没有争议的,要么是最有益的。例如,争议最小的有 30 年前的多媒体格式,如 sunau 音频格式,在 80 年代末期被用于 SPARC 和 NeXT 工作站。crypt
模块具有根本缺陷,可以在标准库之外更好地解决。
此外,该 PEP 也指定了一些模块为未计划删除的模块。有些模块已经被废弃了几个版本,或者乍一看没有必要。然而,将这些模块保留在标准库中是有好处的,这主要是针对那些不能从 PyPI 安装软件包的环境;包括 ftplib、optparse、 getopt 以及 wave 模块。
CPython 核心开发人员 Gregory P. Smith 在批准 PEP 的讨论线程中表示,PEP-594 从 Python 标准库中删除了一组没有争议的、非常老的、没有维护的或过时的库。Python 指导委员会希望这个 PEP 是个一次性事件,而未来的废弃将以不同的方式处理。
“解决围绕我们如何长期定义 stdlib 的持续讨论并不妨碍这个 PEP。对我们来说,每隔几个版本就对 stdlib 的内容进行一次定期审查似乎是值得的,这样我们就可以避免积累这么多的 dead batteries,但这超出了这个特定 PEP 的范围。”