Содержание страницы
Устаревания¶Deprecations
Запланировано к удалению в Python 3.13¶Pending Removal in Python 3.13
Модули (см. PEP 594):
Другие модули:
lib2to3и программа 2to3 (gh-84540)
API:
configparser.LegacyInterpolation(gh-90765)locale.resetlocale()(gh-90817)turtle.RawTurtle.settiltangle()(gh-50096)unittest.findTestCases()(gh-50096)unittest.getTestCaseNames()(gh-50096)unittest.makeSuite()(gh-50096)unittest.TestProgram.usageExit()(gh-67048)webbrowser.MacOSX(gh-86421)classmethodцепочка дескрипторов (gh-89519)importlib.resourcesустаревшие методы:contents()is_resource()open_binary()open_text()path()read_binary()read_text()
Вместо этого используйте
importlib.resources.files(). См. importlib-resources: Migrating from Legacy (gh-106531)
Запланировано к удалению в Python 3.14¶Pending Removal in Python 3.14
argparse: Параметры type, choices и metavar функцииargparse.BooleanOptionalActionустарели и будут удалены в версии 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. Для использования в typing предпочтите объединение, напримерbytes | bytearray, илиcollections.abc.Buffer. (Автор: Shantanu Jain, gh-91896.)email: объявлен устаревшим параметр isdst вemail.utils.localtime(). (Автор: Alan Williams, gh-72346.)importlib:__package__и__cached__больше не будут устанавливаться или учитываться системой импорта (gh-97879).importlib.abcустаревшие классы:importlib.abc.ResourceReaderimportlib.abc.Traversableimportlib.abc.TraversableResources
Вместо них используйте классы
importlib.resources.abc:(Авторы: Jason R. Coombs и Hugo van Kemenade в gh-93963.)
itertoolsимел недокументированную, неэффективную, исторически ошибочную и непоследовательную поддержку операций copy, deepcopy и pickle. Это будет удалено в версии 3.14 для значительного сокращения объёма кода и нагрузки по сопровождению. (Автор: Raymond Hettinger, gh-101588.)multiprocessing: метод запуска по умолчанию изменится на более безопасный на Linux, BSD и других POSIX-платформах (кроме macOS), где в настоящее время по умолчанию используется'fork'(gh-84559). Добавление предупреждения во время выполнения было сочтено слишком деструктивным, так как большинству кода это не важно. Используйте APIget_context()илиset_start_method(), чтобы явно указать, когда код требует'fork'. См. Контексты и методы запуска.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().
-
execute()иexecutemany(), если используются именованные заполнители и параметры являются последовательностью, а неdict.
typing:ByteString, устаревший начиная с Python 3.9, теперь вызываетDeprecationWarningпри использовании.urllib:urllib.parse.Quoterобъявлен устаревшим: он не был задуман как публичный API. (Автор: Gregory P. Smith, gh-88168.)
Запланировано к удалению в Python 3.15¶Pending Removal in Python 3.15
http.server.CGIHTTPRequestHandlerбудет удалён вместе со связанным флагом--cgiдляpython -m http.server. Он был устаревшим и редко использовался. Прямой замены не существует. Что угодно лучше, чем CGI, для взаимодействия веб-сервера с обработчиком запросов.-
Метод
load_module(): вместо него используйтеexec_module().
locale:locale.getdefaultlocale()был устаревшим в Python 3.11 и изначально планировался к удалению в Python 3.13 (gh-90817), но удаление было отложено до Python 3.15. Вместо этого используйтеlocale.setlocale(),locale.getencoding()иlocale.getlocale(). (Автор: Hugo van Kemenade, gh-111187.)pathlib:pathlib.PurePath.is_reserved()устарел и запланирован к удалению в Python 3.15. Начиная с Python 3.13, используйтеos.path.isreservedдля обнаружения зарезервированных путей в Windows.platform:java_ver()устарел и будет удалён в 3.15. Он был в основном не протестирован, имел запутанный API и был полезен только для поддержки Jython. (Автор: Nikita Sobolev, gh-116349.)-
Аргумент check_home функции
sysconfig.is_python_build()считается устаревшим начиная с Python 3.12.
threading: Передача любых аргументов вthreading.RLock()теперь устарела. Версия на C допускает любое количество args и kwargs, но они просто игнорируются. Версия на Python не допускает никаких аргументов. Все аргументы будут удалены изthreading.RLock()в Python 3.15. (Автор: Nikita Sobolev, gh-102029.)-
Не документированный синтаксис именованных аргументов для создания классов
NamedTuple(NT = NamedTuple("NT", x=int)) устарел и будет запрещён в 3.15. Вместо этого используйте синтаксис на основе классов или функциональный синтаксис.
-
types.CodeType: доступ кco_lnotabбыл объявлен устаревшим в PEP 626 начиная с версии 3.10 и планировался к удалению в 3.12, но получил надлежащийDeprecationWarningтолько в 3.12. Может быть удалён в 3.15. (Предложено Никитой Соболевым в gh-101866.)
-
При использовании функционального синтаксиса для создания класса
NamedTuple, отсутствие значения у параметра fields (NT = NamedTuple("NT")) устарело. ПередачаNoneв параметр fields (NT = NamedTuple("NT", None)) также устарела. Оба варианта будут запрещены в Python 3.15. Чтобы создать классNamedTupleс 0 полями, используйтеclass NT(NamedTuple): passилиNT = NamedTuple("NT", []).
typing.TypedDict: При использовании функционального синтаксиса для создания классаTypedDict, отсутствие значения у параметра fields (TD = TypedDict("TD")) устарело. ПередачаNoneв параметр fields (TD = TypedDict("TD", None)) также устарела. Оба варианта будут запрещены в Python 3.15. Чтобы создать классTypedDictс 0 полями, используйтеclass TD(TypedDict): passилиTD = TypedDict("TD", {}).wave: Устарели методыgetmark(),setmark()иgetmarkers()классовwave.Wave_readиwave.Wave_write. Они будут удалены в Python 3.15. (Автор: Victor Stinner, gh-105096.)
Запланированное удаление в Python 3.16¶Pending Removal in Python 3.16
Система импорта:
Установка
__loader__в модуле при отсутствии__spec__.loaderустарела. В Python 3.16__loader__перестанет устанавливаться или учитываться системой импорта или стандартной библиотекой.
array:array.arrayтип'u'(wchar_t): используйте тип'w'вместо него (Py_UCS4).builtins:~bool, побитовая инверсия для bool.symtable: Устарелsymtable.Class.get_methods()из-за отсутствия интереса. (Автор: Bénédikt Tran, gh-119698.)
Запланировано к удалению в будущих версиях¶Pending Removal in Future Versions
Следующие 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.Поддержка метода
__float__(), возвращающего строгий подклассfloat: эти методы должны будут возвращать экземплярfloat.Поддержка метода
__complex__(), возвращающего строгий подклассcomplex: эти методы должны будут возвращать экземплярcomplex.Делегирование
int()методу__trunc__().Передача комплексного числа в качестве аргумента real или imag в конструкторе
complex()теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в gh-109218.)
calendar: константыcalendar.Januaryиcalendar.Februaryустарели и заменены наcalendar.JANUARYиcalendar.FEBRUARY. (Автор: Prince Roshan в gh-103636.)codeobject.co_lnotab: используйте методcodeobject.co_lines()вместо этого.-
utcnow(): используйтеdatetime.datetime.now(tz=datetime.UTC).utcfromtimestamp(): используйтеdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).
gettext: значение множественного числа должно быть целым числом.-
cache_from_source(): параметр debug_override устарел: используйте параметр optimization вместо него.
-
EntryPoints: интерфейс кортежа.Неявное
Noneдля возвращаемых значений.
mailbox: использование StringIO в режиме ввода и текстовом режиме устарело, используйте BytesIO и двоичный режим.os: вызовos.register_at_fork()в многопоточном процессе.pydoc.ErrorDuringImport: кортежное значение для параметра exc_info устарело, используйте экземпляр исключения.re: теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в gh-91760.)Модули
sre_compile,sre_constantsиsre_parse.shutil: параметр onerror методаrmtree()устарел в 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
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.zipimport.zipimporter.load_module()устарело: используйтеexec_module()вместо него.
Устаревшие возможности C API¶C API Deprecations
Запланировано к удалению в Python 3.14¶Pending Removal in Python 3.14
Поле
ma_version_tagвPyDictObjectдля модулей расширения (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.
API
Py_InitializeFromConfig()следует использовать сPyConfigвместо этого.Глобальные переменные конфигурации:
Py_DebugFlag: Вместо этого используйтеPyConfig.parser_debug.Py_VerboseFlag: Вместо этого используйтеPyConfig.verbose.Py_QuietFlag: Вместо этого используйтеPyConfig.quiet.Py_InteractiveFlag: Вместо этого используйтеPyConfig.interactive.Py_InspectFlag: Вместо этого используйтеPyConfig.inspect.Py_OptimizeFlag: Вместо этого используйтеPyConfig.optimization_level.Py_NoSiteFlag: Вместо этого используйтеPyConfig.site_import.Py_BytesWarningFlag: Вместо этого используйтеPyConfig.bytes_warning.Py_FrozenFlag: Вместо этого используйтеPyConfig.pathconfig_warnings.Py_IgnoreEnvironmentFlag: Вместо этого используйтеPyConfig.use_environment.Py_DontWriteBytecodeFlag: Вместо этого используйтеPyConfig.write_bytecode.Py_NoUserSiteDirectory: Вместо этого используйтеPyConfig.user_site_directory.Py_UnbufferedStdioFlag: Вместо этого используйтеPyConfig.buffered_stdio.Py_HashRandomizationFlag: ИспользуйтеPyConfig.use_hash_seedиPyConfig.hash_seed.Py_IsolatedFlag: Вместо этого используйтеPyConfig.isolated.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())
API
Py_InitializeFromConfig()следует использовать сPyConfigвместо этого.
Запланировано к удалению в Python 3.15¶Pending Removal in Python 3.15
Встроенная копия
libmpdecimal.PyImport_ImportModuleNoBlock(): Вместо этого используйтеPyImport_ImportModule().PyWeakref_GetObject()иPyWeakref_GET_OBJECT(): ИспользуйтеPyWeakref_GetRef()вместо этого.Тип
Py_UNICODEи макросPy_UNICODE_WIDE: Вместо них используйтеwchar_t.Функции инициализации Python:
PySys_ResetWarnOptions(): Вместо этого очиститеsys.warnoptionsиwarnings.filters.Py_GetExecPrefix(): Вместо этого используйтеsys.exec_prefix.Py_GetPath(): Вместо этого используйтеsys.path.Py_GetPrefix(): Вместо этого используйтеsys.prefix.Py_GetProgramFullPath(): Вместо этого используйтеsys.executable.Py_GetProgramName(): Вместо этого используйтеsys.executable.Py_GetPythonHome(): Вместо этого используйтеPyConfig.homeили переменную окруженияPYTHONHOME.
Запланировано к удалению в будущих версиях¶Pending Removal in Future Versions
Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.
Py_TPFLAGS_HAVE_FINALIZE: Не требуется начиная с Python 3.8.PyErr_Fetch(): Вместо этого используйтеPyErr_GetRaisedException().PyErr_NormalizeException(): Вместо этого используйтеPyErr_GetRaisedException().PyErr_Restore(): Вместо этого используйтеPyErr_SetRaisedException().PyModule_GetFilename(): Вместо этого используйтеPyModule_GetFilenameObject().PyOS_AfterFork(): Вместо этого используйтеPyOS_AfterFork_Child().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.12PyErr_Display(): Вместо этого используйтеPyErr_DisplayException()._PyErr_ChainExceptions(): Вместо этого используйте_PyErr_ChainExceptions1().Элемент
PyBytesObject.ob_shash: вместо этого вызывайтеPyObject_Hash().Элемент
PyDictObject.ma_version_tag.API локального хранилища потока (TLS):
PyThread_create_key(): Вместо этого используйтеPyThread_tss_alloc().PyThread_delete_key(): Вместо этого используйтеPyThread_tss_free().PyThread_set_key_value(): Вместо этого используйтеPyThread_tss_set().PyThread_get_key_value(): Вместо этого используйтеPyThread_tss_get().PyThread_delete_key_value(): Вместо этого используйтеPyThread_tss_delete().PyThread_ReInitTLS(): Не требуется с Python 3.7.