弃用¶
计划在 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 起不再需要。