首页IT科技python标准库在哪(Python冷知识:如何找出新版本增加或删除了哪些标准库?)

python标准库在哪(Python冷知识:如何找出新版本增加或删除了哪些标准库?)

时间2025-05-04 19:37:28分类IT科技浏览3650
导读:“内置电池”是 Python 最为显著的特性之一,它提供了 200 多个开箱即用的标准库。但是,历经了 30 多年的发展,很多标准库已经成为了不得不舍弃的历史包袱,因为它们正在“漏电”!...

“内置电池           ”是 Python 最为显著的特性之一            ,它提供了 200 多个开箱即用的标准库           。但是                 ,历经了 30 多年的发展     ,很多标准库已经成为了不得不舍弃的历史包袱      ,因为它们正在“漏电                 ”!

好消息是                 ,Python 正在进行一场“瘦身手术      ”           ,详情可查阅:

Python 3.12 正在移除大量的模块 终于      ,Python 标准库要做“瘦身手术           ”了! 聊聊 Python 的内置电池

那么                 ,我们会有这样一个话题:当 Python 发布了一个新版本的时候           ,如何找出它比上一个版本(或者更早版本)增加或删除了哪些标准库呢?

比如,当 Python 发布 3.11.1 版本时                 ,如何找出它相比于上一个版本(即 3.11.0)                ,增删了哪些标准库呢?

也许你马上就想到了一个办法:查看官方的版本变更文档啊~

没错,官方文档里肯定包含了我们所需的变更信息            ,但是                ,每个版本的《Whats New》里信息太多了     ,这种没有特定目标的搜索            ,只会费时费力                 。

假如要跨多个版本进行比较的话                 ,比如 3.12 与 3.10 间的差异            、或者未来的 3.x 跟现在的 3.11 比较     ,这个方法就更不好用了吧!

在 3.10 版本之前      ,想要获知标准库的变化情况                 ,确实不太方便      。但是           ,自 3.10 起      ,Python 提供了一个非常便捷的方法:sys.stdlib_module_names!

官方文档的描述:

来源:https://docs.python.org/zh-cn/3/library/sys.html?#sys.stdlib_module_names

简单查看下它的内容:

如上可见                 ,sys.stdlib_module_names 返回的是一个 frozenset 类型的对象           ,其元素是所有标准库的名称           。

有了详细的标准库清单后,我们就可以通过以下的步骤                 ,比较出不同 Python 版本间的差异啦:

(1)获取旧版本的标准库(比如 3.10.0)                ,序列化后存储到文件/数据库中

>>> import sys >>> import pickle >>> with open("libs", "wb") as f: ... pickle.dump(sys.stdlib_module_names, f) ...

(2)获取新版本的标准库(比如 3.11.0),与旧版本的标准库进行比较

>>> import sys >>> import pickle >>> with open("libs", "rb") as f: ... old_libs = pickle.load(f) ... >>> sys.stdlib_module_names - old_libs frozenset({_typing, _scproxy, _tokenize, tomllib}) >>> old_libs - sys.stdlib_module_names frozenset({binhex})

从以上示例中            ,我们可以得知                ,3.11 相比于 3.10 增加了_typing                 、_scproxy     、_tokenize 以及 tomllib     ,同时它也减少了一个binhex                  。

简简单单几行代码            ,这种方法比翻阅繁杂的文档要便捷且准确得多了      。

值得注意的是                 ,sys.stdlib_module_names 是 3.10 版本的新特性     ,在它之前      ,有一个相似的sys.builtin_module_names                 ,但它返回的只是被解释器使用到的内置模块:

那么           ,除了上文提到的获知 Python 标准库删减情况的用途之外      ,这个新特性还有什么用处呢?换句话说                 ,Python 官方为什么突然新增了sys.stdlib_module_names 这项功能呢?

原文链接:https://mp.weixin.qq.com/s/NoZniWQU3dUA_0TmZ2kHzw

其实           ,社区中有一个三方库stdlib-list ,可用于获取部分 Python 版本(2.6-2.7;3.2-3.9)的标准库清单     。这个库的作者在文档中提到了他的诉求                 ,也提到其它开发者有着同样的诉求:

开发了 sys.stdlib_module_names 这项功能的核心开发者 Victor Stinner 也总结了几个使用场景:

当计算项目的依赖关系时                ,忽略标准库中的模块:https://github.com/jackmaney/pypt/issues/3

当监测第三方代码的执行时,忽略标准库            ,使用监测工具的--ignore-module选项:https://stackoverflow.com/questions/6463918/how-can-i-get-a-list-of-all-the-python-standard-library-modules

在格式化 Python 代码文件时                ,对 import 的标准库模块进行分组                 。isort 库包含了标准库的列表     ,它依据 Python 在线文档生成了每个版本的标准库清单:https://github.com/PyCQA/isort/tree/develop/isort/stdlibs

从这些使用场景来看            ,sys.stdlib_module_names 的作用还真是不小            。另外                 ,在写作本文的时候     ,我从 CPython 的 Issue #87121 中发现      ,著名的机器学习库pytorch 也需要这项功能     。

pytorch 曾经硬编码了每个 Python 版本的标准库列表                 ,代码冗长           ,现在已经适配成使用新的方法       ,大大方便了后续的维护:

11 月 15 日时                 ,Python 3.12 alpha 2 版本发布了           ,这个版本开始移除大量过时的废弃的内容(标注库      、标准库的子模块                 、类和函数等)                。感兴趣的同学,可以用本文介绍的“冷知识                 ”                 ,去看看到底出现了哪些变化啦~

首发于 Python猫                 ,如需转载,请联系作者

知乎:Python猫

博客园:豌豆花下猫

掘金:豌豆花下猫

CSDN:Python猫

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
威海SEO优化方法(威海seo攻略方案)