Содержание страницы
Устаревания¶Deprecations
Запланировано к удалению в 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.)
builtins:bool(NotImplemented)теперь выводитDeprecationWarningи будет вызыватьTypeErrorв Python 3.14. (Автор: Jelle Zijlstra в gh-118767.)email: объявлен устаревшим параметр isdst вemail.utils.localtime(). (Автор: 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имел недокументированную, неэффективную, исторически ошибочную и непоследовательную поддержку операций 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.
urllib:urllib.parse.Quoterобъявлен устаревшим: он не был задуман как публичный API. (Автор: Gregory P. Smith, gh-88168.)
Запланировано к удалению в Python 3.15¶Pending Removal in 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, для взаимодействия веб-сервера с обработчиком запросов.Флаг
--cgiдля python -m http.server интерфейса командной строки считается устаревшим начиная с Python 3.13.
-
Метод
load_module(): вместо него используйтеexec_module().
-
PurePath.is_reserved()считается устаревшим начиная с Python 3.13. Используйтеos.path.isreserved()для обнаружения зарезервированных путей в Windows.
-
java_ver()считается устаревшим начиная с Python 3.13. Эта функция полезна только для поддержки Jython, имеет запутанный API и в значительной степени не тестировалась.
-
Аргумент check_home функции
sysconfig.is_python_build()считается устаревшим начиная с Python 3.12.
-
RLock()не будет принимать аргументов в Python 3.15. Передача любых аргументов считается устаревшей начиная с Python 3.14, поскольку версия на Python не допускает никаких аргументов, но версия на C позволяет любое количество позиционных или именованных аргументов, игнорируя все аргументы.
-
types.CodeType: доступ кco_lnotabбыл объявлен устаревшим в PEP 626 начиная с версии 3.10 и планировался к удалению в 3.12, но получил надлежащийDeprecationWarningтолько в 3.12. Может быть удалён в 3.15. (Предложено Никитой Соболевым в gh-101866.)
-
Незадокументированный синтаксис именованных аргументов для создания
NamedTupleклассов (например,Point = NamedTuple("Point", x=int, y=int)) является устаревшим начиная с Python 3.13. Вместо него используйте синтаксис на основе классов или функциональный синтаксис.При использовании функционального синтаксиса
TypedDict, отсутствие передачи значения параметру поля (TD = TypedDict("TD")) или передачаNone(TD = TypedDict("TD", None)) считается устаревшим начиная с Python 3.13. Используйтеclass TD(TypedDict): passилиTD = TypedDict("TD", {})для создания TypedDict без полей.Функция-декоратор
typing.no_type_check_decorator()считается устаревшей начиная с Python 3.13. За восемь лет в модулеtypingона так и не была поддержана ни одним крупным средством проверки типов.
wave:Методы
getmark(),setmark()иgetmarkers()классовWave_readиWave_writeустарели начиная с Python 3.13.
Запланировано к удалению в Python 3.16¶Pending removal in 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. Оно не используется ни одной функцией вshutilначиная с Python 3.4 и теперь является псевдонимомRuntimeError.
-
Метод
Class.get_methodsустарел начиная с Python 3.14.
sys:Функция
_enablelegacywindowsfsencoding()устарела начиная с Python 3.13. Используйте переменную окруженияPYTHONLEGACYWINDOWSFSENCODING.
-
Недокументированный и неиспользуемый атрибут
TarFile.tarfileустарел начиная с Python 3.13.
Запланировано к удалению в Python 3.17¶Pending removal in Python 3.17
-
collections.abc.ByteStringзапланирован к удалению в Python 3.17.Используйте
isinstance(obj, collections.abc.Buffer)для проверки, реализует лиobjпротокол буфера во время выполнения. Для использования в аннотациях типов используйтеBufferили объединение, которое явно указывает типы, поддерживаемые вашим кодом (например,bytes | bytearray | memoryview).ByteStringизначально задумывался как абстрактный класс, который должен был служить супертипом как дляbytes, так и дляbytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляромByteString, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие какmemoryview, также никогда не рассматривались как подтипыByteString(ни во время выполнения, ни статическими проверками типов).См. PEP 688 для получения подробностей. (Автор: Shantanu Jain в gh-91896.)
-
До Python 3.14 старые объединения реализовывались с помощью приватного класса
typing._UnionGenericAlias. Этот класс больше не нужен для реализации, но он сохранён для обратной совместимости, его удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные средства интроспекции, такие какtyping.get_origin()иtyping.get_args(), вместо того чтобы полагаться на детали приватной реализации.typing.ByteString, устаревший с Python 3.9, запланирован к удалению в Python 3.17.Используйте
isinstance(obj, collections.abc.Buffer)для проверки, реализует лиobjпротокол буфера во время выполнения. Для использования в аннотациях типов используйтеBufferили объединение, которое явно указывает типы, поддерживаемые вашим кодом (например,bytes | bytearray | memoryview).ByteStringизначально задумывался как абстрактный класс, который должен был служить супертипом как дляbytes, так и дляbytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляромByteString, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие какmemoryview, также никогда не рассматривались как подтипыByteString(ни во время выполнения, ни статическими проверками типов).См. PEP 688 для получения подробностей. (Автор: Shantanu Jain в gh-91896.)
Запланировано удаление в Python 3.18¶Pending removal in Python 3.18
Запланировано к удалению в будущих версиях¶Pending Removal in Future Versions
Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.
argparse: Вложение групп аргументов и вложение взаимоисключающих групп устарело.-
Генераторы: сигнатура
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для возвращаемых значений.
logging: методwarn()устарел начиная с Python 3.3, используйтеwarning()вместо него.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
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.base_exec_prefixиsys.exec_prefix.Py_GetPath(): Вместо этого используйтеsys.path.Py_GetPrefix(): Вместо этого получайтеsys.base_prefixи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.