棄用項

計劃在 Python 3.15 中移除

  • 匯入系統

    • 在設定模組的 __cached__ 屬性時,若未同時設定 __spec__.cached,此行為已被棄用。在 Python 3.15 中,匯入系統或標準庫將不再設定或考慮 __cached__ 屬性。(由 gh-97879 貢獻)

    • 在設定模組的 __package__ 屬性時,若未同時設定 __spec__.parent,此行為已被棄用。在 Python 3.15 中,匯入系統或標準庫將不再設定或考慮 __package__ 屬性。(由 gh-97879 貢獻)

  • ctypes:

    • 未寫入文件的 ctypes.SetPointerType() 函式自 Python 3.13 起已被棄用。

  • http.server:

    • 過時且很少使用的 CGIHTTPRequestHandler 已從 Python 3.13 開始棄用。沒有直接的替代品。任何將 Web 伺服器與請求處理程式對接的方式都比 CGI 好。

    • python -m http.server 命令列介面的 --cgi 旗標已自 Python 3.13 起棄用。

  • importlib:

    • load_module() 方法:請改用 exec_module()

  • locale:

  • pathlib:

  • platform:

    • java_ver() 已自 Python 3.13 起棄用。此函式僅對 Jython 支援有用,其 API 令人困惑,且基本未經測試。

  • sysconfig:

  • threading:

    • RLock() 在 Python 3.15 中將不再接受任何引數。自 Python 3.14 起,傳遞任何引數的行為已被棄用,因為 Python 版本不允許任何引數,但 C 版本允許任意數量的位置或關鍵字引數,並會忽略所有引數。

  • types:

  • typing:

    • 用於建立 NamedTuple 類的未寫入文件的關鍵字引數語法(例如,Point = NamedTuple("Point", x=int, y=int))已自 Python 3.13 起棄用。請改用基於類的語法或函式式語法。

    • 當使用 TypedDict 的函式式語法時,未向 fields 引數傳遞值(TD = TypedDict("TD"))或傳遞 NoneTD = TypedDict("TD", None))的做法已自 Python 3.13 起棄用。要建立一個沒有欄位的 TypedDict,請使用 class TD(TypedDict): passTD = TypedDict("TD", {})

    • typing.no_type_check_decorator() 裝飾器函式已自 Python 3.13 起棄用。在 typing 模組中存在八年後,它仍未被任何主流型別檢查器支援。

  • wave:

  • zipimport:

計劃在 Python 3.16 中移除

計劃在 Python 3.17 中移除

  • collections.abc:

    • collections.abc.ByteString 計劃在 Python 3.17 中移除。

      要測試 obj 是否在執行時實現了緩衝區協議,請使用 isinstance(obj, collections.abc.Buffer)。在型別註解中,請使用 Buffer 或顯式指定程式碼支援的型別的聯合型別(例如 bytes | bytearray | memoryview)。

      ByteString 最初旨在作為一個抽象類,作為 bytesbytearray 的超型別。然而,由於該抽象基類(ABC)從未有過任何方法,所以知道一個物件是 ByteString 的例項實際上並不能提供任何關於該物件的有用資訊。其他常見的緩衝區型別,如 memoryview,也從未被理解為 ByteString 的子型別(無論是在執行時還是透過靜態型別檢查器)。

      更多詳情請參閱 PEP 688。(由 Shantanu Jain 在 gh-91896 中貢獻。)

  • typing:

    • 在 Python 3.14 之前,舊式聯合型別是透過私有類 typing._UnionGenericAlias 實現的。該類對於實現已不再需要,但為了向後相容而保留,並計劃在 Python 3.17 中移除。使用者應使用文件化的內省輔助工具,如 typing.get_origin()typing.get_args(),而不是依賴於私有實現細節。

    • typing.ByteString,自 Python 3.9 起已棄用,計劃在 Python 3.17 中移除。

      要測試 obj 是否在執行時實現了緩衝區協議,請使用 isinstance(obj, collections.abc.Buffer)。在型別註解中,請使用 Buffer 或顯式指定程式碼支援的型別的聯合型別(例如 bytes | bytearray | memoryview)。

      ByteString 最初旨在作為一個抽象類,作為 bytesbytearray 的超型別。然而,由於該抽象基類(ABC)從未有過任何方法,所以知道一個物件是 ByteString 的例項實際上並不能提供任何關於該物件的有用資訊。其他常見的緩衝區型別,如 memoryview,也從未被理解為 ByteString 的子型別(無論是在執行時還是透過靜態型別檢查器)。

      更多詳情請參閱 PEP 688。(由 Shantanu Jain 在 gh-91896 中貢獻。)

計劃在 Python 3.19 中移除

  • ctypes:

    • 在非 Windows 平臺上,透過設定 _pack_ 但不設定 _layout_ 來隱式切換到與 MSVC 相容的結構體佈局的做法。

計劃在未來版本中移除

以下 API 將在未來移除,但目前尚未確定移除日期。

  • argparse:

    • 巢狀引數組和巢狀互斥組的做法已被棄用。

    • add_argument_group() 傳遞未寫入文件的關鍵字引數 prefix_chars 的做法現已棄用。

    • argparse.FileType 型別轉換器已被棄用。

  • builtins:

    • 生成器:throw(type, exc, tb)athrow(type, exc, tb) 簽名已被棄用:請改用單引數簽名的 throw(exc)athrow(exc)

    • 目前 Python 允許數字字面量緊跟關鍵字,例如 0in x1or x0if 1else 2。這會允許一些易混淆和有歧義的表示式,例如 [0x1for x in y](可能被解釋為 [0x1 for x in y][0x1f or x in y])。如果數字字面量緊跟著 andelseforifinisor 這些關鍵字之一,將會引發語法警告。在未來的版本中,這將更改為語法錯誤。(gh-87999

    • __index__()__int__() 方法返回非 int 型別的支援:這些方法將被要求返回 int 的嚴格子類的例項。

    • __float__() 方法返回 float 的嚴格子類的支援:這些方法將被要求返回 float 的例項。

    • __complex__() 方法返回 complex 的嚴格子類的支援:這些方法將被要求返回 complex 的例項。

    • int() 委託給 __trunc__() 方法的做法。

    • complex() 建構函式中將複數作為 realimag 引數傳遞的做法現已棄用;它應該僅作為單個位置引數傳遞。(由 Serhiy Storchaka 在 gh-109218 中貢獻。)

  • calendarcalendar.Januarycalendar.February 常量已被棄用,並由 calendar.JANUARYcalendar.FEBRUARY 替換。(由 Prince Roshan 在 gh-103636 中貢獻。)

  • codecs:請使用 open() 而不是 codecs.open()。(gh-133038

  • codeobject.co_lnotab:請改用 codeobject.co_lines() 方法。

  • datetime:

    • utcnow():請使用 datetime.datetime.now(tz=datetime.UTC)

    • utcfromtimestamp():請使用 datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)

  • gettext:複數值必須是整數。

  • importlib:

  • importlib.metadata:

    • EntryPoints 元組介面。

    • 返回值的隱式 None

  • loggingwarn() 方法已自 Python 3.3 起棄用,請改用 warning()

  • mailbox:使用 StringIO 輸入和文字模式已被棄用,請改用 BytesIO 和二進位制模式。

  • os:在多執行緒程序中呼叫 os.register_at_fork()

  • pydoc.ErrorDuringImportexc_info 引數使用元組值的做法已被棄用,請改用異常例項。

  • re:現在對正則表示式中的數字組引用和組名應用了更嚴格的規則。現在只接受 ASCII 數字序列作為數字引用。位元組串模式和替換字串中的組名現在只能包含 ASCII 字母、數字和下劃線。(由 Serhiy Storchaka 在 gh-91760 中貢獻。)

  • sre_compilesre_constantssre_parse 模組。

  • shutilrmtree()onerror 引數在 Python 3.12 中已棄用;請改用 onexc 引數。

  • ssl 選項和協議

    • 不帶協議引數的 ssl.SSLContext 已被棄用。

    • ssl.SSLContext: set_npn_protocols()selected_npn_protocol() 已被棄用:請改用 ALPN。

    • ssl.OP_NO_SSL* 選項

    • ssl.OP_NO_TLS* 選項

    • ssl.PROTOCOL_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • threading 方法

  • typing.Text (gh-92332)。

  • 內部類 typing._UnionGenericAlias 不再用於實現 typing.Union。為了保持與使用此私有類的使用者的相容性,將提供一個相容性墊片,至少持續到 Python 3.17。(由 Jelle Zijlstra 在 gh-105499 中貢獻。)

  • unittest.IsolatedAsyncioTestCase:從測試用例返回非 None 的值已被棄用。

  • urllib.parse 中已棄用的函式:請改用 urlparse()

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • wsgirefSimpleHandler.stdout.write() 不應進行部分寫入。

  • xml.etree.ElementTree:測試 Element 的真值的做法已被棄用。在未來的版本中,它將始終返回 True。請優先使用顯式的 len(elem)elem is not None 測試。

  • sys._clear_type_cache() 已被棄用:請改用 sys._clear_internal_caches()

C API 棄用項

計劃在 Python 3.15 中移除

計劃在 Python 3.18 中移除

計劃在未來版本中移除

以下 API 已被棄用並將被移除,但目前尚未確定移除日期。