棄用¶
計劃在 Python 3.14 中移除¶
argparse
:argparse.BooleanOptionalAction
的 type、choices 和 metavar 引數已棄用,將在 3.14 中移除。(由 Nikita Sobolev 在 gh-92248 中貢獻。)ast
:自 Python 3.8 以來,以下特性在文件中已被棄用,現在當它們被訪問或使用時會發出DeprecationWarning
執行時警告,並將在 Python 3.14 中移除ast.Num
ast.Str
ast.Bytes
ast.NameConstant
ast.Ellipsis
請改用
ast.Constant
。(由 Serhiy Storchaka 在 gh-90953 中貢獻。)-
子程序監視器類
MultiLoopChildWatcher
、FastChildWatcher
、AbstractChildWatcher
和SafeChildWatcher
已棄用,將在 Python 3.14 中移除。(由 Kumar Aditya 在 gh-94597 中貢獻。)asyncio.set_child_watcher()
、asyncio.get_child_watcher()
、asyncio.AbstractEventLoopPolicy.set_child_watcher()
和asyncio.AbstractEventLoopPolicy.get_child_watcher()
已棄用,將在 Python 3.14 中移除。(由 Kumar Aditya 在 gh-94597 中貢獻。)如果當前沒有設定事件迴圈,且預設事件迴圈策略決定建立一個事件迴圈,則
get_event_loop()
預設事件迴圈策略方法現在會發出DeprecationWarning
。(由 Serhiy Storchaka 和 Guido van Rossum 在 gh-100160 中貢獻。)
collections.abc
:已棄用ByteString
。請優先使用Sequence
或Buffer
。 對於型別註解,請優先使用聯合型別,例如bytes | bytearray
,或collections.abc.Buffer
。(由 Shantanu Jain 在 gh-91896 中貢獻。)email
:已棄用email.utils.localtime()
中的 isdst 引數。(由 Alan Williams 在 gh-72346 中貢獻。)importlib.abc
已棄用的類importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
請改用
importlib.resources.abc
中的類(由 Jason R. Coombs 和 Hugo van Kemenade 在 gh-93963 中貢獻。)
itertools
對複製、深複製和 pickle 操作具有未記錄、效率低下、歷史錯誤且不一致的支援。為了顯著減少程式碼量和維護負擔,此功能將在 3.14 中移除。(由 Raymond Hettinger 在 gh-101588 中貢獻。)multiprocessing
:在 Linux、BSD 和其他非 macOS POSIX 平臺上,預設啟動方法將更改為更安全的方法,這些平臺當前預設使用'fork'
(gh-84559)。新增關於此的執行時警告被認為具有破壞性,因為大多數程式碼不應該關心此事。當你的程式碼 _需要_'fork'
時,請使用get_context()
或set_start_method()
API 來顯式指定。 請參閱上下文和啟動方法。pathlib
:is_relative_to()
和relative_to()
:傳遞額外的引數已被棄用。pkgutil
:find_loader()
和get_loader()
現在會引發DeprecationWarning
;請改用importlib.util.find_spec()
。(由 Nikita Sobolev 在 gh-97850 中貢獻。)pty
:master_open()
:請使用pty.openpty()
。slave_open()
:請使用pty.openpty()
。
-
如果使用了命名佔位符且 parameters 是序列而不是
dict
,則execute()
和executemany()
已被棄用。
typing
:自 Python 3.9 起已棄用的ByteString
,現在使用時會發出DeprecationWarning
警告。urllib
:urllib.parse.Quoter
已棄用:它本不應作為公共 API 使用。(由 Gregory P. Smith 在 gh-88168 中貢獻。)
計劃在 Python 3.15 中移除¶
匯入系統
在模組上設定
__cached__
但未設定__spec__.cached
已被棄用。在 Python 3.15 中,匯入系統或標準庫將不再設定或考慮__cached__
。( gh-97879 )在模組上設定
__package__
但未設定__spec__.parent
已被棄用。在 Python 3.15 中,匯入系統或標準庫將不再設定或考慮__package__
。( gh-97879 )
-
未文件化的
ctypes.SetPointerType()
函式自 Python 3.13 起已被棄用。
-
過時且很少使用的
CGIHTTPRequestHandler
自 Python 3.13 起已被棄用。沒有直接的替代品。任何方法都比 CGI 更好,可以將 Web 伺服器與請求處理程式連線起來。python -m http.server 命令列介面的
--cgi
標誌自 Python 3.13 起已被棄用。
-
getdefaultlocale()
函式自 Python 3.11 起已被棄用。它最初計劃在 Python 3.13 中刪除 ( gh-90817 ),但已推遲到 Python 3.15。請改用getlocale()
、setlocale()
和getencoding()
。(由 Hugo van Kemenade 在 gh-111187 中貢獻。)
-
PurePath.is_reserved()
自 Python 3.13 起已被棄用。請使用os.path.isreserved()
檢測 Windows 上保留的路徑。
-
java_ver()
自 Python 3.13 起已被棄用。此函式僅對 Jython 支援有用,具有令人困惑的 API,並且很大程度上未經測試。
-
RLock()
在 Python 3.15 中將不接受任何引數。自 Python 3.14 起,傳遞任何引數都已被棄用,因為 Python 版本不允許任何引數,但 C 版本允許任意數量的位置或關鍵字引數,並忽略每個引數。
-
types.CodeType
:訪問co_lnotab
在 PEP 626 中自 3.10 起被棄用,並計劃在 3.12 中刪除,但它僅在 3.12 中獲得了適當的DeprecationWarning
。可能會在 3.15 中刪除。(由 Nikita Sobolev 在 gh-101866 中貢獻。)
-
用於建立
NamedTuple
類的未文件化的關鍵字引數語法 (例如Point = NamedTuple("Point", x=int, y=int)
) 自 Python 3.13 起已被棄用。請改用基於類的語法或函式式語法。typing.no_type_check_decorator()
裝飾器函式自 Python 3.13 起已被棄用。在typing
模組中八年後,它尚未獲得任何主要型別檢查器的支援。
wave
:getmark()
、setmark()
和getmarkers()
方法,這些方法屬於Wave_read
和Wave_write
類,自 Python 3.13 起已被棄用。
計劃在 Python 3.16 中移除¶
匯入系統
在模組上設定
__loader__
但未設定__spec__.loader
已被棄用。在 Python 3.16 中,匯入系統或標準庫將不再設定或考慮__loader__
。
-
'u'
格式程式碼 (wchar_t
) 自 Python 3.3 起在文件中被棄用,自 Python 3.13 起在執行時被棄用。請改用'w'
格式程式碼 (Py_UCS4
) 來表示 Unicode 字元。
-
asyncio.iscoroutinefunction()
已棄用,將在 Python 3.16 中刪除,請改用inspect.iscoroutinefunction()
。(由 Jiahao Li 和 Kumar Aditya 在 gh-122875 中貢獻。)
-
對布林型別進行按位取反,即
~True
或~False
自 Python 3.12 起已被棄用,因為它會產生令人驚訝且不直觀的結果 (-2
和-1
)。請改用not x
來表示布林值的邏輯否定。在極少數需要底層整數的按位取反的情況下,請顯式轉換為int
(~int(x)
)。
-
ExecError
異常自 Python 3.14 起已被棄用。自 Python 3.4 起,shutil
中的任何函式都未使用它,現在它是RuntimeError
的別名。
-
Class.get_methods
方法自 Python 3.14 起已被棄用。
sys
:_enablelegacywindowsfsencoding()
函式自 Python 3.13 起已被棄用。請改用PYTHONLEGACYWINDOWSFSENCODING
環境變數。
-
未記錄且未使用的
TarFile.tarfile
屬性自 Python 3.13 起已被棄用。
未來版本中待移除¶
以下 API 將在未來被移除,儘管目前尚未確定移除的日期。
argparse
: 巢狀引數組和巢狀互斥組已被棄用。-
bool(NotImplemented)
.生成器:
throw(type, exc, tb)
和athrow(type, exc, tb)
簽名已被棄用:請改用throw(exc)
和athrow(exc)
單引數簽名。目前,Python 接受緊跟關鍵字的數字字面量,例如
0in x
、1or x
、0if 1else 2
。它允許像[0x1for x in y]
這樣令人困惑和模稜兩可的表示式(可以解釋為[0x1 for x in y]
或[0x1f or x in y]
)。如果數字字面量緊跟關鍵字and
、else
、for
、if
、in
、is
和or
中的一個,則會引發語法警告。在未來的版本中,它將被更改為語法錯誤。( gh-87999 )支援
__index__()
和__int__()
方法返回非 int 型別:這些方法將需要返回int
的嚴格子類的例項。將
int()
委託給__trunc__()
方法。現在,將複數作為
complex()
建構函式中的 real 或 imag 引數傳遞已被棄用;它應該只作為單個位置引數傳遞。(由 Serhiy Storchaka 在 gh-109218 中貢獻。)
calendar
:calendar.January
和calendar.February
常量已被棄用,並由calendar.JANUARY
和calendar.FEBRUARY
替代。(由 Prince Roshan 在 gh-103636 中貢獻。)-
utcnow()
: 請使用datetime.datetime.now(tz=datetime.UTC)
。utcfromtimestamp()
: 請使用datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)
。
gettext
: 複數的值必須是整數。-
load_module()
方法:請改用exec_module()
。cache_from_source()
的 debug_override 引數已被棄用:請改用 optimization 引數。
-
EntryPoints
元組介面。返回值的隱式
None
。
mailbox
: 使用 StringIO 輸入和文字模式已被棄用,請改用 BytesIO 和二進位制模式。os
: 在多執行緒程序中呼叫os.register_at_fork()
。pydoc.ErrorDuringImport
: exc_info 引數的元組值已被棄用,請使用異常例項。re
: 現在對正則表示式中的數字組引用和組名應用更嚴格的規則。現在只接受 ASCII 數字序列作為數字引用。位元組模式和替換字串中的組名現在只能包含 ASCII 字母、數字和下劃線。(由 Serhiy Storchaka 在 gh-91760 中貢獻。)sre_compile
、sre_constants
和sre_parse
模組。shutil
:rmtree()
的 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
sysconfig.is_python_build()
的 check_home 引數已被棄用且被忽略。threading
方法threading.Condition.notifyAll()
: 請使用notify_all()
。threading.Event.isSet()
: 請使用is_set()
。threading.Thread.isDaemon()
、threading.Thread.setDaemon()
: 請使用threading.Thread.daemon
屬性。threading.Thread.getName()
,threading.Thread.setName()
: 使用threading.Thread.name
屬性。threading.currentThread()
: 使用threading.current_thread()
。threading.activeCount()
: 使用threading.active_count()
。
unittest.IsolatedAsyncioTestCase
:從測試用例返回值(非None
)已被棄用。urllib.parse
已棄用的函式:使用urlparse()
代替splitattr()
splithost()
splitnport()
splitpasswd()
splitport()
splitquery()
splittag()
splittype()
splituser()
splitvalue()
to_bytes()
urllib.request
:呼叫請求的URLopener
和FancyURLopener
風格已被棄用。請使用較新的urlopen()
函式和方法。wsgiref
:SimpleHandler.stdout.write()
不應執行部分寫入。xml.etree.ElementTree
:測試Element
的真值已被棄用。在未來的版本中,它將始終返回True
。請優先使用顯式的len(elem)
或elem is not None
測試。
C API 棄用¶
在 Python 3.14 中即將移除¶
擴充套件模組中
PyDictObject
的ma_version_tag
欄位(PEP 699;gh-101193)。建立具有可變基類的
immutable types
(gh-95388)。用於配置 Python 初始化的函式,在 Python 3.11 中已棄用
PySys_SetArgvEx()
:請改用設定PyConfig.argv
。PySys_SetArgv()
:請改用設定PyConfig.argv
。Py_SetProgramName()
:請改用設定PyConfig.program_name
。Py_SetPythonHome()
:請改用設定PyConfig.home
。
應該使用
Py_InitializeFromConfig()
API 和PyConfig
。全域性配置變數
Py_HashRandomizationFlag
:請改用PyConfig.use_hash_seed
和PyConfig.hash_seed
。Py_LegacyWindowsFSEncodingFlag
:請改用PyPreConfig.legacy_windows_fs_encoding
。Py_LegacyWindowsStdioFlag
:請改用PyConfig.legacy_windows_stdio
。Py_FileSystemDefaultEncoding
:請改用PyConfig.filesystem_encoding
。Py_HasFileSystemDefaultEncoding
:請改用PyConfig.filesystem_encoding
。Py_FileSystemDefaultEncodeErrors
:請改用PyConfig.filesystem_errors
。Py_UTF8Mode
:請改用PyPreConfig.utf8_mode
。(參見Py_PreInitialize()
)
應該使用
Py_InitializeFromConfig()
API 和PyConfig
。
計劃在 Python 3.15 中移除¶
捆綁的
libmpdecimal
副本。PyWeakref_GetObject()
和PyWeakref_GET_OBJECT()
:請改用PyWeakref_GetRef()
。Py_UNICODE
型別和Py_UNICODE_WIDE
宏:請改用wchar_t
。Python 初始化函式
PySys_ResetWarnOptions()
:請改為清除sys.warnoptions
和warnings.filters
。Py_GetExecPrefix()
:請改為獲取sys.base_exec_prefix
和sys.exec_prefix
。Py_GetPath()
:請改為獲取sys.path
。Py_GetPrefix()
:請改為獲取sys.base_prefix
和sys.prefix
。Py_GetPythonHome()
:請改為獲取PyConfig.home
或者PYTHONHOME
環境變數。
計劃在未來版本中移除¶
以下 API 已棄用,將被移除,儘管目前尚未確定移除日期。
Py_TPFLAGS_HAVE_FINALIZE
:自 Python 3.8 起不再需要。PySlice_GetIndicesEx()
:請改用PySlice_Unpack()
和PySlice_AdjustIndices()
。PyUnicode_AsDecodedObject()
:請改用PyCodec_Decode()
。PyUnicode_AsDecodedUnicode()
:請改用PyCodec_Decode()
。PyUnicode_AsEncodedObject()
:請改用PyCodec_Encode()
。PyUnicode_AsEncodedUnicode()
:請改用PyCodec_Encode()
。PyUnicode_READY()
:自 Python 3.12 起不再需要。PyErr_Display()
:請改用PyErr_DisplayException()
。_PyErr_ChainExceptions()
:請改用_PyErr_ChainExceptions1()
。PyBytesObject.ob_shash
成員:請改為呼叫PyObject_Hash()
。PyDictObject.ma_version_tag
成員。執行緒區域性儲存(TLS)API
PyThread_ReInitTLS()
: 自 Python 3.7 起不再需要。