终于,Python 标准库要做“瘦身手术”了!
大家好,我是猫哥。
Python 社区有一个比较独特的概念是“内置电池”(Batteries Included),指的是 Python 自带丰富多样的标准库,开箱即用,动力十足。根据官方文档显示,Python 内置了 200 多个标准库,它们对于 Python 的流行功不可没。
但是,Python 已经发展了 30 年,很多标准库已经过时了,已经在“漏电”了,这对于语言的发展来说,并不是一件好事。
在 2019 年的官方 PyCon 大会后,PEP-594 被提了出来,旨在为标准库动一次“手术”,剔除掉质量差、功能落后、代码过时的标准库,让 Python 保持轻量高效,持续焕发生机活力。
当时,猫哥得知了这一消息,兴致冲冲地写了一篇文章《聊聊 Python 的内置电池》(点击阅读),向广大 Python 开发者传达了这一个好消息。
当时,PEP-594 正处于草案状态,没想到一晃就是三年,如今这个 PEP 终于是被接受了!
从 3.11 版本到 3.13 版本,Python 内置电池的“瘦身手术”将会进行。
让我们祝愿它变得越来越好,越来越健康!
---以下是 PEP-594 被采纳的新闻报道---
由 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 是个一次性事件,而未来的废弃将以不同的方式处理。
还不过瘾?试试它们