弃用¶
计划在 Python 3.14 中移除¶
argparse:argparse.BooleanOptionalAction的 type、choices 和 metavar 参数已弃用,将在 3.14 中移除。(由 Nikita Sobolev 在 gh-92248 中贡献。)ast:自 Python 3.8 以来,以下特性在文档中已被弃用,现在当它们被访问或使用时会发出DeprecationWarning运行时警告,并将在 Python 3.14 中移除ast.Numast.Strast.Bytesast.NameConstantast.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.ResourceReaderimportlib.abc.Traversableimportlib.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_SSLv3ssl.PROTOCOL_TLSssl.PROTOCOL_TLSv1ssl.PROTOCOL_TLSv1_1ssl.PROTOCOL_TLSv1_2ssl.TLSVersion.SSLv3ssl.TLSVersion.TLSv1ssl.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 起不再需要。