Python冷知識:如何找出新版本增加或刪除了哪些標準庫?

来源:https://www.cnblogs.com/pythonista/archive/2022/11/19/16905778.html
-Advertisement-
Play Games

Redis 常見問題 落葉他鄉樹,寒燈獨夜人。 一、 什麼是Redis? Redis 是一個使用 C 語言寫成的,開源的高性能key-value非關係緩存資料庫; Redis的數據都基於緩存的,所以很快,每秒可以處理超過 10萬次讀寫操作; Redis也可以實現數據寫入磁碟中,保證了數據的安全不丟失 ...


“內置電池”是 Python 最為顯著的特性之一,它提供了 200 多個開箱即用的標準庫。但是,歷經了 30 多年的發展,很多標準庫已經成為了不得不捨棄的歷史包袱,因為它們正在“漏電”!

好消息是,Python 正在進行一場“瘦身手術”,詳情可查閱:

那麼,我們會有這樣一個話題:當 Python 發佈了一個新版本的時候,如何找出它比上一個版本(或者更早版本)增加或刪除了哪些標準庫呢?

比如,當 Python 發佈 3.11.1 版本時,如何找出它相比於上一個版本(即 3.11.0),增刪了哪些標準庫呢?

也許你馬上就想到了一個辦法:查看官方的版本變更文檔啊~

沒錯,官方文檔里肯定包含了我們所需的變更信息,但是,每個版本的《What's 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 也總結了幾個使用場景:

從這些使用場景來看,sys.stdlib_module_names 的作用還真是不小。另外,在寫作本文的時候,我從 CPython 的 Issue #87121 中發現,著名的機器學習庫pytorch 也需要這項功能。

pytorch 曾經硬編碼了每個 Python 版本的標準庫列表,代碼冗長,現在已經適配成使用新的方法 ,大大方便了後續的維護:

11 月 15 日時,Python 3.12 alpha 2 版本發佈了,這個版本開始移除大量過時的廢棄的內容(標註庫、標準庫的子模塊、類和函數等)。感興趣的同學,可以用本文介紹的“冷知識”,去看看到底出現了哪些變化啦~

首發於 Python貓 ,如需轉載,請聯繫作者

知乎:Python貓

博客園:豌豆花下貓

掘金:豌豆花下貓

CSDN:Python貓


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • class位元組碼文件結構 | 類型 | 名稱 | 說明 | 長度 | 數量 | | | | | | | | u4 | magic | 魔數,識別Class文件格式 | 4個位元組 | 1 | | u2 | minor_version | 副版本號(小版本) | 2個位元組 | 1 | | u2 | ma ...
  • JZ73翻轉單詞序列 描述 牛客最近來了一個新員工Fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“nowcoder. a am I”。後來才意識到,這家伙原來把句子單詞的順序翻轉了,正確的句子應 ...
  • 1.面向對象&面向過程 面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.... 面向過程適合處理一些簡單的問題。 面向對象思想 物以類聚,在思考問題解決方案時會先將問題進行分類,然後對這些分類的問題進行深入思考。最後才是對問題的實現細節進行面向過程的思考。 面向對象適合對大型項目的構建,對復 ...
  • 在SLAM十四講的代碼編譯過程中direct_method.cpp和optical_flow.cpp有CV_GRAY2BGR語句的報錯 這是因為CV_GRAY2BGR是opencv2的用法,而slambook2的的cmakelist.txt中opencv的庫用的是opencv4, 因此要將CV_GR ...
  • 🏵️前言 👉以下我要講解的是Python中最後剩餘的重要內置函數,其中比較重要的會詳細講解,比較簡單的會直接結合代碼進行剖析 ​編輯 🍁一、reversed內置函數 描述 reversed 函數返回一個反轉的迭代器。 語法 reversed(seq) 參數 seq -- 要轉換的序列,可以是 ...
  • 一、棧和局部變數操作 將常量壓入棧的指令 aconst_null 將null對象引用壓入棧 iconst_m1 將int類型常量-1壓入棧 iconst_0 將int類型常量0壓入棧 iconst_1 將int類型常量1壓入棧 iconst_2 將int類型常量2壓入棧 iconst_3 將int類 ...
  • 💓前言 ✅承接上篇博客,以下我要講解的是Python中剩餘的重要內置函數,其中比較重要的會詳細講解,比較簡單的會直接結合代碼進行剖析 🍀一、exec和eval內置函數 ☘️1、exec內置函數 python內置函數exec支持動態執行python代碼,傳入exec函數的object實參可以是字元 ...
  • 1.while迴圈 """ while 條件: 執行語句1··· 執行語句2·· """ # while 1+1 == 2: # print('666') # 計數器 叫法 代表一個功能 # i = 0 # 定義一個臨時變數 記錄迴圈次數 # while 1 + 1 == 2: # i += 1 # ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...