Содержание страницы
Устаревания¶Deprecations
Запланировано к удалению в 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.)Система политик
asyncioустарела и будет удалена в Python 3.16. В частности, следующие классы и функции устарели:Для использования нужной реализации цикла событий следует применять
asyncio.run()илиasyncio.Runnerс параметром loop_factory.Например, чтобы использовать
asyncio.SelectorEventLoopв Windows:import asyncio async def main(): ... asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)
(Предложено Kumar Aditya в gh-127949.)
-
Поразрядная инверсия для булевых типов,
~Trueили~Falseустарела начиная с Python 3.12, поскольку даёт неожиданные и неинтуитивные результаты (-2и-1). Используйтеnot xдля логического отрицания булевого значения. В редких случаях, когда требуется поразрядная инверсия базового целого числа, явно преобразуйте вint(~int(x)).
-
Вызов реализации
functools.reduce()на Python с function или sequence в качестве именованных аргументов устарел начиная с Python 3.14.
-
Поддержка пользовательских обработчиков логирования с аргументом strm устарела и запланирована к удалению в Python 3.16. Вместо этого определяйте обработчики с аргументом stream. (Предложено Mariusz Felisiak в gh-115032.)
-
Допустимые расширения начинаются с точки ‘.’ или пусты для
mimetypes.MimeTypes.add_type(). Расширения без точки устарели и будут вызыватьValueErrorв Python 3.16. (Предложено Hugo van Kemenade в gh-75223.)
-
Исключение
ExecErrorустарело начиная с Python 3.14. Оно не используется ни одной функцией вshutilначиная с Python 3.4 и теперь является псевдонимомRuntimeError.
-
Метод
Class.get_methodsустарел начиная с Python 3.14.
sys:Функция
_enablelegacywindowsfsencoding()устарела начиная с Python 3.13. Используйте переменную окруженияPYTHONLEGACYWINDOWSFSENCODING.
-
Функция
sysconfig.expand_makefile_vars()устарела начиная с Python 3.14. Используйте аргументvarsизsysconfig.get_paths().
-
Недокументированный и неиспользуемый атрибут
TarFile.tarfileустарел начиная с Python 3.13.
Запланировано к удалению в Python 3.17¶Pending removal in Python 3.17
-
strptime()вызовы со строкой формата, содержащей%e(день месяца) без указания года. Это объявлено устаревшим начиная с Python 3.15. (Автор: Stan Ulbrych в gh-70647.)
-
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.)
-
Передача кодировок, не являющихся ASCII, в
encodings.normalize_encoding()объявлена устаревшей и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в gh-136702.)
-
webbrowser.MacOSXOSAScriptобъявлен устаревшим в пользуwebbrowser.MacOS. (gh-137586)
-
До 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.)
-
Методы
tkinter.Variable:trace_variable(),trace()(псевдонимtrace_variable()),trace_vdelete()иtrace_vinfo(), устаревшие с Python 3.14, запланированы к удалению в Python 3.17. Используйтеtrace_add(),trace_remove()иtrace_info()вместо них. (Автор: Serhiy Storchaka в gh-120220.)
Запланировано удаление в Python 3.18¶Pending removal in Python 3.18
Запланировано к удалению в Python 3.19¶Pending removal in Python 3.19
-
В конструкторах хеш-функций, таких как
new(), или прямых конструкторах, названных по имени хеша, таких какmd5()иsha256(), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именемdata=илиstring=в различных реализацияхhashlib.Поддержка имени именованного аргумента
stringтеперь устарела и будет удалена в Python 3.19.До Python 3.13 именованный параметр
stringне поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.
-
http.cookies.Morsel.js_output()устарело и будет удалено в Python 3.19.http.cookies.BaseCookie.js_output()устарело и будет удалено в Python 3.19.
-
Изменение
IMAP4.fileтеперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.До Python 3.14 это свойство использовалось для реализации соответствующих методов
read()иreadline()дляIMAP4, но с тех пор это уже не так.
Ожидается удаление в Python 3.20¶Pending removal in Python 3.20
Вызов метода
__new__()объектаstruct.Structбез аргумента format устарел и будет удалён в Python 3.20. Вызов__init__()метода для инициализированных объектовStructустарел и будет удалён в Python 3.20.(Вклад: Sergey B Kirpichev и Serhiy Storchaka в gh-143715.)
Атрибуты
__version__,versionиVERSIONбыли объявлены устаревшими в этих модулях стандартной библиотеки и будут удалены в Python 3.20. Вместо них используйтеsys.version_info.ctypes.macholibdecimal(используйтеdecimal.SPEC_VERSIONвместо)logging(__date__также устарел)xml.sax.expatreader
(Вклад: Hugo van Kemenade и Stan Ulbrych в gh-76007.)
Устаревшие элементы, определённые PEP 829:
Предупреждения выводятся для строк
import, найденных вname.pthфайлах.Файлы
name.pthбольше не декодируются в кодировке локали по умолчанию. Они ДОЛЖНЫ быть закодированы вutf-8-sig.
(Вклад: Barry Warsaw в gh-148641.)
ast:Создание экземпляров абстрактных узлов AST (таких как
ast.ASTилиast.expr) устарело и будет вызывать ошибку в Python 3.20.
Будет удалено в будущих версиях¶Pending removal in future versions
Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.
-
Вложение групп аргументов и вложение взаимоисключающих групп устарело.
Передача недокументированного именованного аргумента prefix_chars в
add_argument_group()теперь устарела.Конвертер типов
argparse.FileTypeустарел.
-
Генераторы: сигнатура
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.Передача комплексного числа в качестве аргумента real или imag в конструкторе
complex()теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в gh-109218.)
calendar: константыcalendar.Januaryиcalendar.Februaryустарели и заменены наcalendar.JANUARYиcalendar.FEBRUARY. (Автор: Prince Roshan в gh-103636.)codecs: используйтеopen()вместоcodecs.open(). (gh-133038)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()в многопоточном процессе.os.path:os.path.commonprefix()устарела, используйтеos.path.commonpath()для префиксов путей. Функцияos.path.commonprefix()объявлена устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то что находится в модуле для работы с путями, что означает, что легко случайно внести уязвимости обхода путей в программы на Python, используя эту функцию.pydoc.ErrorDuringImport: кортежное значение для параметра exc_info устарело, используйте экземпляр исключения.re: теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в gh-91760.)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().
Внутренний класс
typing._UnionGenericAliasбольше не используется для реализацииtyping.Union. Для сохранения совместимости с пользователями, использующими этот закрытый класс, будет предоставлена прослойка совместимости как минимум до Python 3.17. (Автор: Jelle Zijlstra, gh-105499.)unittest.IsolatedAsyncioTestCase: возврат значения, не являющегосяNone, из тестового примера устарел.urllib.parseустаревшие функции: используйтеurlparse()вместо них.splitattr()splithost()splitnport()splitpasswd()splitport()splitquery()splittag()splittype()splituser()splitvalue()to_bytes()
wsgiref:SimpleHandler.stdout.write()не должна выполнять частичную запись.xml.etree.ElementTree: проверка истинностного значенияElementустарела. В будущем выпуске она всегда будет возвращатьTrue. Вместо этого используйте явные проверкиlen(elem)илиelem is not None.sys._clear_type_cache()устарело: используйтеsys._clear_internal_caches()вместо него.
Мягкие устаревания¶Soft deprecations
Планов по удалению мягко устаревших API нет.
re.match()иre.Pattern.match()теперь мягко устарели в пользу новых APIre.prefixmatch()иre.Pattern.prefixmatch(), которые были добавлены как альтернативные, более явные имена. Они предназначены для устранения путаницы относительно того, что означает match, следуя мантре Дзена Python «Явное лучше неявного». Большинство других библиотек регулярных выражений используют API с именем match для обозначения того, что в Python всегда называлось search.Мы не планируем удалять старое имя
match(), так как оно используется в коде более 30 лет. Код, поддерживающий старые версии Python, должен продолжать использоватьmatch(), а в новом коде следует предпочитатьprefixmatch(). См. prefixmatch() vs. match().(Авторы: Gregory P. Smith, gh-86519, и Hugo van Kemenade, gh-148100.)
Использование
'F'и'D'кодов типа форматирования модуляstructтеперь мягко устарело в пользу двухбуквенных форм'Zf'и'Zd'. (Вклад: Sergey B Kirpichev в gh-121249.)
Устаревания в C API¶C API deprecations
Ожидается удаление в Python 3.15¶Pending removal in Python 3.15
PyImport_ImportModuleNoBlock(): Вместо этого используйтеPyImport_ImportModule().PyWeakref_GetObject()иPyWeakref_GET_OBJECT(): Вместо этого используйтеPyWeakref_GetRef(). Проект pythoncapi-compat можно использовать, чтобы получитьPyWeakref_GetRef()на Python 3.12 и старше.PyUnicode_AsDecodedObject(): Вместо этого используйтеPyCodec_Decode().PyUnicode_AsDecodedUnicode(): Вместо этого используйтеPyCodec_Decode(); Обратите внимание, что некоторые кодеки (например, «base64») могут возвращать тип, отличный отstr, например,bytes.PyUnicode_AsEncodedObject(): Вместо этого используйтеPyCodec_Encode().PyUnicode_AsEncodedUnicode(): Вместо этого используйтеPyCodec_Encode(); Обратите внимание, что некоторые кодеки (например, «base64») могут возвращать тип, отличный отbytes, например,str.Функции инициализации Python, устаревшие в Python 3.13:
Py_GetPath(): Вместо этого используйтеPyConfig_Get("module_search_paths")(sys.path).Py_GetPrefix(): Вместо этого используйтеPyConfig_Get("base_prefix")(sys.base_prefix). ИспользуйтеPyConfig_Get("prefix")(sys.prefix), если необходимо обрабатывать виртуальные окружения.Py_GetExecPrefix(): Вместо этого используйтеPyConfig_Get("base_exec_prefix")(sys.base_exec_prefix). ИспользуйтеPyConfig_Get("exec_prefix")(sys.exec_prefix), если необходимо обрабатывать виртуальные окружения.Py_GetProgramFullPath(): Вместо этого используйтеPyConfig_Get("executable")(sys.executable).Py_GetProgramName(): Вместо этого используйтеPyConfig_Get("executable")(sys.executable).Py_GetPythonHome(): ИспользуйтеPyConfig_Get("home")или переменную окруженияPYTHONHOME.
Проект pythoncapi-compat можно использовать, чтобы получить
PyConfig_Get()на Python 3.13 и старше.Функции для настройки инициализации Python, устаревшие в Python 3.11:
PySys_SetArgvEx(): Вместо этого задайтеPyConfig.argv.PySys_SetArgv(): Вместо этого задайтеPyConfig.argv.Py_SetProgramName(): Вместо этого задайтеPyConfig.program_name.Py_SetPythonHome(): Вместо этого задайтеPyConfig.home.PySys_ResetWarnOptions(): Вместо этого очиститеsys.warnoptionsиwarnings.filters.
API
Py_InitializeFromConfig()следует использовать сPyConfigвместо этого.Глобальные переменные конфигурации:
Py_DebugFlag: ИспользуйтеPyConfig.parser_debugилиPyConfig_Get("parser_debug")вместо этого.Py_VerboseFlag: ИспользуйтеPyConfig.verboseилиPyConfig_Get("verbose")вместо этого.Py_QuietFlag: ИспользуйтеPyConfig.quietилиPyConfig_Get("quiet")вместо этого.Py_InteractiveFlag: ИспользуйтеPyConfig.interactiveилиPyConfig_Get("interactive")вместо этого.Py_InspectFlag: ИспользуйтеPyConfig.inspectилиPyConfig_Get("inspect")вместо этого.Py_OptimizeFlag: ИспользуйтеPyConfig.optimization_levelилиPyConfig_Get("optimization_level")вместо этого.Py_NoSiteFlag: ИспользуйтеPyConfig.site_importилиPyConfig_Get("site_import")вместо этого.Py_BytesWarningFlag: ИспользуйтеPyConfig.bytes_warningилиPyConfig_Get("bytes_warning")вместо этого.Py_FrozenFlag: ИспользуйтеPyConfig.pathconfig_warningsилиPyConfig_Get("pathconfig_warnings")вместо этого.Py_IgnoreEnvironmentFlag: ИспользуйтеPyConfig.use_environmentилиPyConfig_Get("use_environment")вместо этого.Py_DontWriteBytecodeFlag: ИспользуйтеPyConfig.write_bytecodeилиPyConfig_Get("write_bytecode")вместо этого.Py_NoUserSiteDirectory: ИспользуйтеPyConfig.user_site_directoryилиPyConfig_Get("user_site_directory")вместо этого.Py_UnbufferedStdioFlag: ИспользуйтеPyConfig.buffered_stdioилиPyConfig_Get("buffered_stdio")вместо этого.Py_HashRandomizationFlag: ИспользуйтеPyConfig.use_hash_seedиPyConfig.hash_seedилиPyConfig_Get("hash_seed")вместо этого.Py_IsolatedFlag: ИспользуйтеPyConfig.isolatedилиPyConfig_Get("isolated")вместо этого.Py_LegacyWindowsFSEncodingFlag: ИспользуйтеPyPreConfig.legacy_windows_fs_encodingилиPyConfig_Get("legacy_windows_fs_encoding")вместо этого.Py_LegacyWindowsStdioFlag: ИспользуйтеPyConfig.legacy_windows_stdioилиPyConfig_Get("legacy_windows_stdio")вместо этого.Py_FileSystemDefaultEncoding,Py_HasFileSystemDefaultEncoding: ИспользуйтеPyConfig.filesystem_encodingилиPyConfig_Get("filesystem_encoding")вместо этого.Py_FileSystemDefaultEncodeErrors: ИспользуйтеPyConfig.filesystem_errorsилиPyConfig_Get("filesystem_errors")вместо этого.Py_UTF8Mode: ИспользуйтеPyPreConfig.utf8_modeилиPyConfig_Get("utf8_mode")вместо этого. (см.Py_PreInitialize())
API
Py_InitializeFromConfig()следует использовать сPyConfigдля установки этих параметров. ИлиPyConfig_Get()можно использовать для получения этих параметров во время выполнения.
Запланировано к удалению в Python 3.16¶Pending removal in Python 3.16
Встроенная копия
libmpdec.
Запланировано удаление в Python 3.18¶Pending removal in Python 3.18
Следующие закрытые функции устарели и планируются к удалению в Python 3.18:
_PyBytes_Join(): используйтеPyBytes_Join()._PyDict_GetItemStringWithError(): используйтеPyDict_GetItemStringRef()._PyDict_Pop(): используйтеPyDict_Pop()._PyLong_Sign(): используйтеPyLong_GetSign()._PyLong_FromDigits()и_PyLong_New(): используйтеPyLongWriter_Create()._PyThreadState_UncheckedGet(): используйтеPyThreadState_GetUnchecked()._PyUnicode_AsString(): используйтеPyUnicode_AsUTF8()._PyUnicodeWriter_Init(): заменить_PyUnicodeWriter_Init(&writer)наwriter = PyUnicodeWriter_Create(0)._PyUnicodeWriter_Finish(): заменить_PyUnicodeWriter_Finish(&writer)наPyUnicodeWriter_Finish(writer)._PyUnicodeWriter_Dealloc(): заменить_PyUnicodeWriter_Dealloc(&writer)наPyUnicodeWriter_Discard(writer)._PyUnicodeWriter_WriteChar(): заменить_PyUnicodeWriter_WriteChar(&writer, ch)наPyUnicodeWriter_WriteChar(writer, ch)._PyUnicodeWriter_WriteStr(): заменить_PyUnicodeWriter_WriteStr(&writer, str)наPyUnicodeWriter_WriteStr(writer, str)._PyUnicodeWriter_WriteSubstring(): заменить_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)наPyUnicodeWriter_WriteSubstring(writer, str, start, end)._PyUnicodeWriter_WriteASCIIString(): заменить_PyUnicodeWriter_WriteASCIIString(&writer, str)наPyUnicodeWriter_WriteASCII(writer, str)._PyUnicodeWriter_WriteLatin1String(): заменить_PyUnicodeWriter_WriteLatin1String(&writer, str)наPyUnicodeWriter_WriteUTF8(writer, str)._PyUnicodeWriter_Prepare(): (нет замены)._PyUnicodeWriter_PrepareKind(): (нет замены)._Py_HashPointer(): используйтеPy_HashPointer()._Py_fopen_obj(): используйтеPy_fopen().
Проект pythoncapi-compat можно использовать для получения этих новых открытых функций в Python 3.13 и старше. (Предложено Виктором Стиннером в gh-128863.)
Запланировано к удалению в Python 3.19¶Pending removal in Python 3.19
PEP 456 поддержка встраивающих систем для определения схемы хеширования строк.
Ожидается удаление в Python 3.20¶Pending removal in Python 3.20
_PyObject_CallMethodId(),_PyObject_GetAttrId()и_PyUnicode_FromId()устарели с версии 3.15 и будут удалены в 3.20. Вместо этого используйтеPyUnicode_InternFromString()и кешируйте результат в состоянии модуля, затем вызывайтеPyObject_CallMethod()илиPyObject_GetAttr(). (Предложено Виктором Стиннером в gh-141049.)Поле
cvalвPyComplexObject(gh-128813). ИспользуйтеPyComplex_AsCComplex()иPyComplex_FromCComplex()для преобразования комплексного числа Python в/из представления CPy_complex.Макросы
Py_MATH_PIlиPy_MATH_El.
Будет удалено в будущих версиях¶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_READY(): Не требуется начиная с Python 3.12PyErr_Display(): Вместо этого используйтеPyErr_DisplayException()._PyErr_ChainExceptions(): Вместо этого используйте_PyErr_ChainExceptions1().Элемент
PyBytesObject.ob_shash: вместо этого вызывайтеPyObject_Hash().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.