3.13.md
1> **Источник:** https://python-all.ru/3.16/whatsnew/3.13.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Что нового в Python 3.1389**Редакторы:**1011Адам Тёрнер и Томас Воутерс1213Эта статья описывает новые возможности Python 3.13 по сравнению с 3.12. Python 3.13 вышел 7 октября 2024 года. Полные подробности приведены в [журнале изменений](https://python-all.ru/3.16/whatsnew/changelog.html#changelog).1415> **См. также**16>17> [**PEP 719**](https://python-all.ru/3.16/whatsnew/3.13.html) – график выпуска Python 3.131819## Краткий обзор – Основные моменты выпуска2021Python 3.13 – стабильный релиз языка программирования Python, в котором сочетаются изменения в языке, реализации и стандартной библиотеке. Самые значительные изменения включают новый [интерактивный интерпретатор](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-better-interactive-interpreter), экспериментальную поддержку работы в [режиме без глобальной блокировки](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-free-threaded-cpython) ([**PEP 703**](https://python-all.ru/3.16/whatsnew/3.13.html)) и [JIT-компилятор](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-jit-compiler) ([**PEP 744**](https://python-all.ru/3.16/whatsnew/3.13.html)).2223Сообщения об ошибках продолжают улучшаться: трассировки теперь по умолчанию подсвечиваются цветом. Встроенная функция [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) теперь имеет [определённую семантику](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-locals-semantics) при изменении возвращаемого отображения, а параметры типов теперь поддерживают значения по умолчанию.2425Изменения в библиотеке включают удаление устаревших API и модулей, а также обычные улучшения удобства и корректности. Некоторые устаревшие модули стандартной библиотеки были [удалены](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-pep594) после объявления их устаревшими в Python 3.11 ([**PEP 594**](https://python-all.ru/3.16/whatsnew/3.13.html)).2627Эта статья не претендует на полное описание всех новых возможностей, а даёт удобный обзор. За полными сведениями обращайтесь к документации: [Справочнику по библиотеке](https://python-all.ru/3.16/library/index.html#library-index) и [Справочнику по языку](https://python-all.ru/3.16/reference/index.html#reference-index). Чтобы понять реализацию и обоснование изменений, обращайтесь к PEP для конкретной возможности; но учтите, что PEP обычно не обновляются после полной реализации. См. [Переход на Python 3.13](https://python-all.ru/3.16/whatsnew/3.13.html#porting-to-python-3-13) для руководства по обновлению с предыдущих версий Python.2829---3031Улучшения интерпретатора:3233- Значительно улучшенный [интерактивный интерпретатор](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-better-interactive-interpreter) и [улучшенные сообщения об ошибках](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-improved-error-messages).34- [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html): встроенная функция [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) теперь имеет [определённую семантику](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-locals-semantics) при изменении возвращаемого отображения. Отладчики Python и подобные инструменты теперь могут более надёжно обновлять локальные переменные в оптимизированных областях видимости даже во время одновременного выполнения кода.35- [**PEP 703**](https://python-all.ru/3.16/whatsnew/3.13.html): CPython 3.13 получил экспериментальную поддержку работы с [отключённой глобальной блокировкой интерпретатора](https://python-all.ru/3.16/glossary.html#term-global-interpreter-lock). Подробнее см. [Free-threaded CPython](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-free-threaded-cpython).36- [**PEP 744**](https://python-all.ru/3.16/whatsnew/3.13.html): добавлен базовый [JIT-компилятор](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-jit-compiler). Сейчас он по умолчанию отключён (хотя впоследствии мы можем его включить). Прирост производительности скромный – мы планируем улучшить его в следующих выпусках.37- Поддержка цветов в новом [интерактивном интерпретаторе](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-better-interactive-interpreter), а также в [трассировках](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-improved-error-messages) и выводе [doctest](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-doctest). Это можно отключить через переменные окружения [`PYTHON_COLORS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_COLORS) и [`NO_COLOR`](https://python-all.ru/3.16/whatsnew/3.13.html).3839Улучшения модели данных Python:4041- [`__static_attributes__`](https://python-all.ru/3.16/reference/datamodel.html#type.__static_attributes__) хранит имена атрибутов, к которым обращаются через `self.X` в любой функции внутри тела класса.42- [`__firstlineno__`](https://python-all.ru/3.16/reference/datamodel.html#type.__firstlineno__) записывает номер первой строки определения класса.4344Значительные улучшения в стандартной библиотеке:4546- Добавлено новое исключение [`PythonFinalizationError`](https://python-all.ru/3.16/library/exceptions.html#PythonFinalizationError), которое возникает, когда операция блокируется во время [финализации](https://python-all.ru/3.16/glossary.html#term-interpreter-shutdown).47- Модуль [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse) теперь поддерживает объявление устаревшими параметров командной строки, позиционных аргументов и подкоманд.48- Новые функции [`base64.z85encode()`](https://python-all.ru/3.16/library/base64.html#base64.z85encode) и [`base64.z85decode()`](https://python-all.ru/3.16/library/base64.html#base64.z85decode) поддерживают кодирование и декодирование [данных Z85](https://python-all.ru/3.16/whatsnew/3.13.html).49- В модуле [`copy`](https://python-all.ru/3.16/library/copy.html#module-copy) теперь есть функция [`copy.replace()`](https://python-all.ru/3.16/library/copy.html#copy.replace), которая поддерживает многие встроенные типы и любой класс, определяющий метод [`__replace__()`](https://python-all.ru/3.16/library/copy.html#object.__replace__).50- Новый модуль [`dbm.sqlite3`](https://python-all.ru/3.16/library/dbm.html#module-dbm.sqlite3) теперь является backend’ом по умолчанию для [`dbm`](https://python-all.ru/3.16/library/dbm.html#module-dbm).51- В модуле [`os`](https://python-all.ru/3.16/library/os.html#module-os) появился [набор новых функций](https://python-all.ru/3.16/library/os.html#os-timerfd) для работы с файловыми дескрипторами уведомлений таймеров Linux.52- Модуль [`random`](https://python-all.ru/3.16/library/random.html#module-random) теперь имеет [интерфейс командной строки](https://python-all.ru/3.16/library/random.html#random-cli).5354Улучшения в области безопасности:5556- [`ssl.create_default_context()`](https://python-all.ru/3.16/library/ssl.html#ssl.create_default_context) устанавливает [`ssl.VERIFY_X509_PARTIAL_CHAIN`](https://python-all.ru/3.16/library/ssl.html#ssl.VERIFY_X509_PARTIAL_CHAIN) и [`ssl.VERIFY_X509_STRICT`](https://python-all.ru/3.16/library/ssl.html#ssl.VERIFY_X509_STRICT) в качестве флагов по умолчанию.5758Улучшения C API:5960- Слот [`Py_mod_gil`](https://python-all.ru/3.16/c-api/module.html#c.Py_mod_gil) теперь используется, чтобы указать, что модуль расширения поддерживает работу с [отключённым GIL](https://python-all.ru/3.16/glossary.html#term-GIL).61- Добавлен [C API PyTime](https://python-all.ru/3.16/c-api/time.html), предоставляющий доступ к системным часам.62- [`PyMutex`](https://python-all.ru/3.16/c-api/synchronization.html#c.PyMutex) – это новый легковесный мьютекс, занимающий один байт.63- Появился новый [набор функций](https://python-all.ru/3.16/c-api/monitoring.html#c-api-monitoring) для генерации событий мониторинга [**PEP 669**](https://python-all.ru/3.16/whatsnew/3.13.html) в C API.6465Новые возможности типизации:6667- [**PEP 696**](https://python-all.ru/3.16/whatsnew/3.13.html): Параметры типов ([`typing.TypeVar`](https://python-all.ru/3.16/library/typing.html#typing.TypeVar), [`typing.ParamSpec`](https://python-all.ru/3.16/library/typing.html#typing.ParamSpec), и [`typing.TypeVarTuple`](https://python-all.ru/3.16/library/typing.html#typing.TypeVarTuple)) теперь поддерживают значения по умолчанию.68- [**PEP 702**](https://python-all.ru/3.16/whatsnew/3.13.html): Новый декоратор [`warnings.deprecated()`](https://python-all.ru/3.16/library/warnings.html#warnings.deprecated) добавляет поддержку для пометки устаревания в системе типов и во время выполнения.69- [**PEP 705**](https://python-all.ru/3.16/whatsnew/3.13.html): [`typing.ReadOnly`](https://python-all.ru/3.16/library/typing.html#typing.ReadOnly) можно использовать для пометки элемента [`typing.TypedDict`](https://python-all.ru/3.16/library/typing.html#typing.TypedDict) как доступного только для чтения для проверщиков типов.70- [**PEP 742**](https://python-all.ru/3.16/whatsnew/3.13.html): [`typing.TypeIs`](https://python-all.ru/3.16/library/typing.html#typing.TypeIs) обеспечивает более интуитивное поведение сужения типа, как альтернатива [`typing.TypeGuard`](https://python-all.ru/3.16/library/typing.html#typing.TypeGuard).7172Поддержка платформ:7374- [**PEP 730**](https://python-all.ru/3.16/whatsnew/3.13.html): iOS от Apple теперь [официально поддерживаемая платформа](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-platform-support), на уровне [**tier 3**](https://python-all.ru/3.16/whatsnew/3.13.html).75- [**PEP 738**](https://python-all.ru/3.16/whatsnew/3.13.html): Android теперь [официально поддерживаемая платформа](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-platform-support), на уровне [**tier 3**](https://python-all.ru/3.16/whatsnew/3.13.html).76- `wasm32-wasi` теперь поддерживается как платформа [**tier 2**](https://python-all.ru/3.16/whatsnew/3.13.html).77- `wasm32-emscripten` больше не является официально поддерживаемой платформой.7879Важные удаления:8081- [PEP 594](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-pep594): Оставшиеся 19 «мёртвых батареек» (устаревшие модули stdlib) удалены из стандартной библиотеки: `aifc`, `audioop`, `cgi`, `cgitb`, `chunk`, `crypt`, `imghdr`, `mailcap`, `msilib`, `nis`, `nntplib`, `ossaudiodev`, `pipes`, `sndhdr`, `spwd`, `sunau`, `telnetlib`, `uu` и `xdrlib`.82- Удалены инструмент **2to3** и модуль `lib2to3` (устарело в Python 3.11).83- Удалён модуль `tkinter.tix` (устарело в Python 3.6).84- Удалена функция `locale.resetlocale()`.85- Удалены пространства имён `typing.io` и `typing.re`.86- Удалены цепочечные дескрипторы [`classmethod`](https://python-all.ru/3.16/library/functions.html#classmethod).8788Изменения графика выпусков:8990[**PEP 602**](https://python-all.ru/3.16/whatsnew/3.13.html) («Ежегодный цикл выпуска Python») обновлён: период полной поддержки (исправления ошибок) для новых выпусков продлён до двух лет. Это обновлённое правило означает, что:9192- Python 3.9–3.12 имеют полтора года полной поддержки, затем три с половиной года исправлений безопасности.93- Python 3.13 и новее имеют два года полной поддержки, затем три года исправлений безопасности.9495## Новые возможности9697### Улучшенный интерактивный интерпретатор9899Теперь Python по умолчанию использует новую [интерактивную](https://python-all.ru/3.16/glossary.html#term-interactive) оболочку, основанную на коде из [проекта PyPy](https://python-all.ru/3.16/whatsnew/3.13.html). Когда пользователь запускает [REPL](https://python-all.ru/3.16/glossary.html#term-REPL) из интерактивного терминала, теперь поддерживаются следующие новые возможности:100101- Многострочное редактирование с сохранением истории.102- Прямая поддержка команд, специфичных для REPL, таких как `help`, `exit`, и `quit`, без необходимости вызывать их как функции.103- Приглашения и трассировки с [цветом, включённым по умолчанию](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color).104- Интерактивный просмотр справки с помощью `F1` с отдельной историей команд.105- Просмотр истории с помощью `F2`, который пропускает вывод, а также приглашения [\>\>\>](https://python-all.ru/3.16/glossary.html#term-0) и […](https://python-all.ru/3.16/glossary.html#term-...).106- «Режим вставки» с `F3`, который упрощает вставку больших блоков кода (нажмите `F3` снова, чтобы вернуться к обычному приглашению).107108Чтобы отключить новую интерактивную оболочку, установите переменную окружения [`PYTHON_BASIC_REPL`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_BASIC_REPL). Подробнее об интерактивном режиме см. [Интерактивный режим](https://python-all.ru/3.16/tutorial/appendix.html#tut-interac).109110(Авторы: Pablo Galindo Salgado, Łukasz Langa и Lysandros Nikolaou в [gh-111201](https://python-all.ru/3.16/whatsnew/3.13.html) на основе кода проекта PyPy. Поддержка Windows – Dino Viehland и Anthony Shaw.)111112### Улучшенные сообщения об ошибках113114- Теперь интерпретатор по умолчанию использует цвет при выводе трассировок в терминале. Эту возможность [можно контролировать](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color) через новую переменную окружения [`PYTHON_COLORS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_COLORS), а также канонические переменные [`NO_COLOR`](https://python-all.ru/3.16/whatsnew/3.13.html) и [`FORCE_COLOR`](https://python-all.ru/3.16/whatsnew/3.13.html). (Автор: Pablo Galindo Salgado в [gh-112730](https://python-all.ru/3.16/whatsnew/3.13.html).)115- Частая ошибка – написать скрипт с тем же именем, что и у модуля стандартной библиотеки. Если это приводит к ошибкам, теперь выводится более понятное сообщение об ошибке:116117 ```pytb118 $ python random.py119 Traceback (most recent call last):120 File "/home/me/random.py", line 1, in <module>121 import random122 File "/home/me/random.py", line 3, in <module>123 print(random.randint(5))124 ^^^^^^^^^^^^^^125 AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/me/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module)126 ```127128 Аналогично, если скрипт имеет то же имя, что и сторонний модуль, который он пытается импортировать, и это вызывает ошибки, теперь также выводится более понятное сообщение об ошибке:129130 ```pytb131 $ python numpy.py132 Traceback (most recent call last):133 File "/home/me/numpy.py", line 1, in <module>134 import numpy as np135 File "/home/me/numpy.py", line 3, in <module>136 np.array([1, 2, 3])137 ^^^^^^^^138 AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/me/numpy.py' if it has the same name as a library you intended to import)139 ```140141 (Автор: Shantanu Jain в [gh-95754](https://python-all.ru/3.16/whatsnew/3.13.html).)142- Теперь сообщение об ошибке пытается предложить правильный именованный аргумент, когда в функцию передан неверный именованный аргумент.143144 ```pycon145 >>> "Better error messages!".split(max_split=1)146 Traceback (most recent call last):147 File "<python-input-0>", line 1, in <module>148 "Better error messages!".split(max_split=1)149 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^150 TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?151 ```152153 (Авторы: Pablo Galindo Salgado и Shantanu Jain в [gh-107944](https://python-all.ru/3.16/whatsnew/3.13.html).)154155### CPython со свободной потоковой обработкой156157Теперь CPython экспериментально поддерживает работу в режиме без GIL – [глобальная блокировка интерпретатора](https://python-all.ru/3.16/glossary.html#term-global-interpreter-lock) (GIL) отключена. Это экспериментальная возможность, поэтому она не включена по умолчанию. Режим без GIL требует другого исполняемого файла, обычно называемого `python3.13t` или `python3.13t.exe`. Готовые сборки, помеченные как *free-threaded*, можно установить в составе официальных установщиков [Windows](https://python-all.ru/3.16/using/windows.html#install-freethreaded-windows) и [macOS](https://python-all.ru/3.16/using/mac.html#install-freethreaded-macos), или CPython можно собрать из исходных кодов с опцией [`--disable-gil`](https://python-all.ru/3.16/using/configure.html#cmdoption-disable-gil).158159Выполнение без GIL позволяет полностью задействовать доступную вычислительную мощность за счет параллельного выполнения потоков на доступных ядрах CPU. Хотя не все программы выиграют от этого автоматически, программы, спроектированные с учетом многопоточности, будут работать быстрее на многоядерном оборудовании. **Режим без GIL является экспериментальным**, и работа по его улучшению продолжается: ожидайте некоторых ошибок и существенного снижения производительности в однопоточном режиме. Сборки CPython без GIL поддерживают опциональную работу с включенным GIL во время выполнения с помощью переменной окружения [`PYTHON_GIL`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_GIL) или опции командной строки [`-X gil=1`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X).160161Чтобы проверить, поддерживает ли текущий интерпретатор работу без GIL, [`python -VV`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-V) и [`sys.version`](https://python-all.ru/3.16/library/sys.html#sys.version) содержат «experimental free-threading build». Новая функция `sys._is_gil_enabled()` позволяет проверить, действительно ли GIL отключен в текущем процессе.162163Модули расширений C-API необходимо собирать специально для сборки без GIL. Расширения, поддерживающие работу с отключенным [GIL](https://python-all.ru/3.16/glossary.html#term-GIL), должны использовать слот [`Py_mod_gil`](https://python-all.ru/3.16/c-api/module.html#c.Py_mod_gil). Расширения, использующие однофазную инициализацию, должны использовать [`PyUnstable_Module_SetGIL()`](https://python-all.ru/3.16/c-api/module.html#c.PyUnstable_Module_SetGIL), чтобы указать, поддерживают ли они работу с отключенным GIL. Импорт расширений C, не использующих эти механизмы, приведет к включению GIL, если только GIL не был явно отключен с помощью переменной окружения [`PYTHON_GIL`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_GIL) или опции [`-X gil=0`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). Для установки пакетов с C-расширениями в сборке без GIL требуется pip 24.1 или новее.164165Эта работа стала возможной благодаря многим людям и организациям, включая большое сообщество участников Python и сторонних проектов, которые тестировали и внедряли поддержку режима без GIL. Среди заметных участников: Sam Gross, Ken Jin, Donghee Na, Itamar Oren, Matt Page, Brett Simmers, Dino Viehland, Carl Meyer, Nathan Goldbaum, Ralf Gommers, Lysandros Nikolaou и многие другие. Многие из этих участников работают в Meta, которая предоставила значительные инженерные ресурсы для поддержки этого проекта.166167> **См. также**168>169> [**PEP 703**](https://python-all.ru/3.16/whatsnew/3.13.html) «Сделать глобальную блокировку интерпретатора необязательной в CPython» содержит обоснование и информацию об этой работе.170>171> [Porting Extension Modules to Support Free-Threading](https://python-all.ru/3.16/whatsnew/3.13.html): руководство по переносу, поддерживаемое сообществом, для авторов расширений.172173### Экспериментальный JIT-компилятор (just-in-time)174175Если CPython настроен и собран с использованием опции `--enable-experimental-jit`, добавляется JIT-компилятор, который может ускорить некоторые программы на Python. В Windows используйте `PCbuild/build.bat --experimental-jit` для включения JIT или `--experimental-jit-interpreter` для включения интерпретатора Tier 2. Требования к сборке и дополнительная информация [содержатся в](https://python-all.ru/3.16/whatsnew/3.13.html) `Tools/jit/README.md`.176177Опция `--enable-experimental-jit` принимает следующие (необязательные) значения, по умолчанию `yes`, если `--enable-experimental-jit` указан без дополнительного значения.178179- `no`: Отключить весь конвейер Tier 2 и JIT.180- `yes`: Включить JIT. Чтобы отключить JIT во время выполнения, передайте переменную окружения `PYTHON_JIT=0`.181- `yes-off`: Собрать JIT, но отключить его по умолчанию. Чтобы включить JIT во время выполнения, передайте переменную окружения `PYTHON_JIT=1`.182- `interpreter`: Включить интерпретатор Tier 2, но отключить JIT. Интерпретатор можно отключить, запустив с `PYTHON_JIT=0`.183184Внутренняя архитектура выглядит примерно так:185186- Мы начинаем со специализированного *байт-кода Tier 1*. Подробнее см. [Что нового в 3.11](https://python-all.ru/3.16/whatsnew/3.11.html#whatsnew311-pep659).187- Когда байт-код Tier 1 становится достаточно «горячим», он транслируется в новое чисто внутреннее промежуточное представление (IR), называемое *Tier 2 IR*, иногда называемое микро-операциями («uops»).188- Tier 2 IR использует ту же стековую виртуальную машину, что и Tier 1, но формат команд лучше подходит для трансляции в машинный код.189- Для Tier 2 IR применяется несколько проходов оптимизации, которые выполняются до его интерпретации или трансляции в машинный код.190- Существует интерпретатор Tier 2, но он в основном предназначен для отладки ранних этапов конвейера оптимизации. Интерпретатор Tier 2 можно включить, настроив Python с `--enable-experimental-jit=interpreter`.191- Если JIT включен, оптимизированный Tier 2 IR транслируется в машинный код, который затем выполняется.192- Процесс трансляции в машинный код использует технику, называемую *copy-and-patch*. У нее нет зависимостей во время выполнения, но появляется новая зависимость на этапе сборки – LLVM.193194> **См. также**195>196> [**PEP 744**](https://python-all.ru/3.16/whatsnew/3.13.html)197198(JIT – Brandt Bucher, вдохновлено статьей Haoran Xu и Fredrik Kjolstad. Tier 2 IR – Mark Shannon и Guido van Rossum. Оптимизатор Tier 2 – Ken Jin.)199200### Определена семантика мутаций для [`locals()`](https://python-all.ru/3.16/library/functions.html#locals)201202Исторически ожидаемый результат мутации возвращаемого значения [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) оставлялся на усмотрение отдельных реализаций Python. Начиная с Python 3.13, [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html) стандартизирует историческое поведение CPython для большинства областей выполнения кода, но изменяет [оптимизированные области](https://python-all.ru/3.16/glossary.html#term-optimized-scope) (функции, генераторы, корутины, включения и генераторные выражения) так, чтобы они явно возвращали независимые снимки текущих присвоенных локальных переменных, включая локально ссылающиеся нелокальные переменные, захваченные в замыканиях.203204Это изменение семантики [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) в оптимизированных областях также влияет на поведение по умолчанию функций выполнения кода, которые неявно используют `locals()`, если не передано явное пространство имён (например, [`exec()`](https://python-all.ru/3.16/library/functions.html#exec) и [`eval()`](https://python-all.ru/3.16/library/functions.html#eval)). В предыдущих версиях возможность доступа к изменениям через вызов `locals()` после вызова функции выполнения кода зависела от реализации. В CPython такой код обычно работал как ожидалось, но иногда мог давать сбой в оптимизированных областях из-за того, что другой код (включая отладчики и инструменты трассировки выполнения) мог сбросить общий снимок в этой области. Теперь код всегда выполняется с независимым снимком локальных переменных в оптимизированных областях, поэтому изменения не будут видны при последующих вызовах `locals()`. Чтобы получить доступ к изменениям, теперь необходимо передать соответствующей функции явную ссылку на пространство имён. Альтернативно, можно переработать затронутый код, чтобы использовать API выполнения кода более высокого уровня, возвращающий результирующее пространство имён (например, [`runpy.run_path()`](https://python-all.ru/3.16/library/runpy.html#runpy.run_path) при выполнении файлов Python с диска).205206Чтобы отладчики и подобные инструменты могли надёжно обновлять локальные переменные в областях, затронутых этим изменением, [`FrameType.f_locals`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_locals) теперь возвращает прокси-объект со сквозной записью (write-through proxy) для локальных и локально ссылающихся нелокальных переменных фрейма в этих областях, а не неконсистентно обновляемый общий экземпляр `dict` с неопределённой семантикой времени выполнения.207208Подробнее см. [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html), включая связанные изменения и устаревания в C API. Также ниже приведены заметки по переносу для затронутых [Python API](https://python-all.ru/3.16/whatsnew/3.13.html#pep667-porting-notes-py) и [C API](https://python-all.ru/3.16/whatsnew/3.13.html#pep667-porting-notes-c).209210(PEP и реализация предоставлены Mark Shannon и Tian Gao в [gh-74929](https://python-all.ru/3.16/whatsnew/3.13.html). Обновления документации – Guido van Rossum и Alyssa Coghlan.)211212### Поддержка мобильных платформ213214[**PEP 730**](https://python-all.ru/3.16/whatsnew/3.13.html): iOS теперь является поддерживаемой платформой [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.13.html) с целями `arm64-apple-ios` и `arm64-apple-ios-simulator` на уровне 3 (устройства iPhone и iPad, выпущенные после 2013 года, и симулятор iOS Xcode, работающий на оборудовании Apple silicon соответственно). `x86_64-apple-ios-simulator` (симулятор iOS Xcode, работающий на старом оборудовании `x86_64`) не является поддерживаемой платформой уровня 3, но будет поддерживаться по возможности. (PEP написан и реализован Russell Keith-Magee в [gh-114099](https://python-all.ru/3.16/whatsnew/3.13.html).)215216[**PEP 738**](https://python-all.ru/3.16/whatsnew/3.13.html): Android теперь является поддерживаемой платформой [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.13.html) с целями `aarch64-linux-android` и `x86_64-linux-android` на уровне 3. 32-битные цели `arm-linux-androideabi` и `i686-linux-android` не являются поддерживаемыми платформами уровня 3, но будут поддерживаться по возможности. (PEP написан и реализован Malcolm Smith в [gh-116622](https://python-all.ru/3.16/whatsnew/3.13.html).)217218> **См. также**219>220> [**PEP 730**](https://python-all.ru/3.16/whatsnew/3.13.html), [**PEP 738**](https://python-all.ru/3.16/whatsnew/3.13.html)221222## Прочие изменения языка223224- Компилятор теперь удаляет общие начальные пробелы из каждой строки в docstring. Это уменьшает размер [кэша байт-кода](https://python-all.ru/3.16/glossary.html#term-bytecode) (например, файлов `.pyc`), с сокращением размера файла примерно на 5%, например в `sqlalchemy.orm.session` из SQLAlchemy 2.0. Это изменение затрагивает инструменты, использующие docstring, такие как [`doctest`](https://python-all.ru/3.16/library/doctest.html#module-doctest).225226 ```pycon227 >>> def spam():228 ... """229 ... Это докстринг с230 ... начальные пробелы.231 ...232 ... Он даже состоит из нескольких абзацев!233 ... """234 ...235 >>> spam.__doc__236 '\nThis is a docstring with\n leading whitespace.\n\nIt even has multiple paragraphs!\n'237 ```238239 (Предоставлено Inada Naoki в [gh-81283](https://python-all.ru/3.16/whatsnew/3.13.html).)240- [Области аннотаций](https://python-all.ru/3.16/reference/executionmodel.html#annotation-scopes) внутри областей классов теперь могут содержать лямбды и включения. Включения, находящиеся внутри областей классов, не встраиваются в родительскую область.241242 ```python243 class C[T]:244 type Alias = lambda: T245 ```246247 (Предоставлено Jelle Zijlstra в [gh-109118](https://python-all.ru/3.16/whatsnew/3.13.html) и [gh-118160](https://python-all.ru/3.16/whatsnew/3.13.html).)248- [Future-выражения](https://python-all.ru/3.16/reference/simple_stmts.html#future) больше не активируются относительными импортами модуля [`__future__`](https://python-all.ru/3.16/library/__future__.html#module-__future__); это означает, что выражения вида `from .__future__ import ...` теперь являются просто стандартными относительными импортами, без активации каких-либо особых возможностей. (Предоставлено Jeremiah Gabriel Pascual в [gh-118216](https://python-all.ru/3.16/whatsnew/3.13.html).)249- Объявления [`global`](https://python-all.ru/3.16/reference/simple_stmts.html#global) теперь разрешены в блоках [`except`](https://python-all.ru/3.16/reference/compound_stmts.html#except), если эта глобальная переменная используется в блоке [`else`](https://python-all.ru/3.16/reference/compound_stmts.html#else). Ранее это вызывало ошибочное [`SyntaxError`](https://python-all.ru/3.16/library/exceptions.html#SyntaxError). (Предоставлено Irit Katriel в [gh-111123](https://python-all.ru/3.16/whatsnew/3.13.html).)250- Добавлена [`PYTHON_FROZEN_MODULES`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_FROZEN_MODULES), новая переменная окружения, определяющая, игнорируются ли замороженные модули механизмом импорта; эквивалентна опции командной строки [`-X frozen_modules`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). (Предоставлено Yilei Yang в [gh-111374](https://python-all.ru/3.16/whatsnew/3.13.html).)251- Добавлена [поддержка профилировщика perf](https://python-all.ru/3.16/howto/perf_profiling.html#perf-profiling), работающего без [указателей фреймов](https://python-all.ru/3.16/whatsnew/3.13.html), с помощью новой переменной окружения [`PYTHON_PERF_JIT_SUPPORT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_PERF_JIT_SUPPORT) и опции командной строки [`-X perf_jit`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). (Предоставлено Pablo Galindo в [gh-118518](https://python-all.ru/3.16/whatsnew/3.13.html).)252- Расположение файла `.python_history` можно изменить через новую переменную окружения [`PYTHON_HISTORY`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_HISTORY). (Предоставлено Levi Sabah, Zackery Spytz и Hugo van Kemenade в [gh-73965](https://python-all.ru/3.16/whatsnew/3.13.html).)253- У классов появился новый атрибут [`__static_attributes__`](https://python-all.ru/3.16/reference/datamodel.html#type.__static_attributes__). Он заполняется компилятором кортежем имён атрибутов класса, которые присваиваются через `self.<name>` из любой функции в его теле. (Предоставлено Irit Katriel в [gh-115775](https://python-all.ru/3.16/whatsnew/3.13.html).)254- Компилятор теперь создаёт атрибут `__firstlineno__` у классов, содержащий номер строки первой строки определения класса. (Предоставлено Serhiy Storchaka в [gh-118465](https://python-all.ru/3.16/whatsnew/3.13.html).)255- Встроенные функции [`exec()`](https://python-all.ru/3.16/library/functions.html#exec) и [`eval()`](https://python-all.ru/3.16/library/functions.html#eval) теперь принимают аргументы *globals* и *locals* в качестве именованных. (Предоставлено Raphael Gaschignard в [gh-105879](https://python-all.ru/3.16/whatsnew/3.13.html))256- Встроенная функция [`compile()`](https://python-all.ru/3.16/library/functions.html#compile) теперь принимает новый флаг `ast.PyCF_OPTIMIZED_AST`, который похож на `ast.PyCF_ONLY_AST`, за исключением того, что возвращаемое AST оптимизируется в соответствии со значением аргумента *optimize*. (Предоставлено Irit Katriel в [gh-108113](https://python-all.ru/3.16/whatsnew/3.13.html)).257- Добавлен атрибут [`__name__`](https://python-all.ru/3.16/library/functions.html#property.__name__) для объектов [`property`](https://python-all.ru/3.16/library/functions.html#property). (Предоставлено Eugene Toder в [gh-101860](https://python-all.ru/3.16/whatsnew/3.13.html).)258- Добавлено [`PythonFinalizationError`](https://python-all.ru/3.16/library/exceptions.html#PythonFinalizationError), новое исключение, производное от [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError), используемое для сигнализации о блокировке операций во время [финализации](https://python-all.ru/3.16/glossary.html#term-interpreter-shutdown). Следующие вызываемые объекты теперь возбуждают `PythonFinalizationError` вместо `RuntimeError`:259260 - [`_thread.start_new_thread()`](https://python-all.ru/3.16/library/_thread.html#thread.start_new_thread)261 - [`os.fork()`](https://python-all.ru/3.16/library/os.html#os.fork)262 - [`os.forkpty()`](https://python-all.ru/3.16/library/os.html#os.forkpty)263 - [`subprocess.Popen`](https://python-all.ru/3.16/library/subprocess.html#subprocess.Popen)264265 (Предоставлено Victor Stinner в [gh-114570](https://python-all.ru/3.16/whatsnew/3.13.html).)266- Разрешено передавать аргумент *count* функции [`str.replace()`](https://python-all.ru/3.16/library/stdtypes.html#str.replace) в качестве именованного. (Предоставлено Hugo van Kemenade в [gh-106487](https://python-all.ru/3.16/whatsnew/3.13.html).)267- Многие функции теперь выводят предупреждение, если в качестве аргумента-файлового дескриптора передано булево значение. Это помогает раньше выявлять некоторые ошибки. (Предоставлено Serhiy Storchaka в [gh-82626](https://python-all.ru/3.16/whatsnew/3.13.html).)268- Добавлены атрибуты `name` и `mode` для сжатых и архивированных файлоподобных объектов в модулях [`bz2`](https://python-all.ru/3.16/library/bz2.html#module-bz2), [`lzma`](https://python-all.ru/3.16/library/lzma.html#module-lzma), [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile) и [`zipfile`](https://python-all.ru/3.16/library/zipfile.html#module-zipfile). (Предоставлено Serhiy Storchaka в [gh-115961](https://python-all.ru/3.16/whatsnew/3.13.html).)269270## Новые модули271272- [`dbm.sqlite3`](https://python-all.ru/3.16/library/dbm.html#module-dbm.sqlite3): SQLite-бэкенд для [`dbm`](https://python-all.ru/3.16/library/dbm.html#module-dbm). (Авторы: Raymond Hettinger и Erlend E. Aasland, [gh-100414](https://python-all.ru/3.16/whatsnew/3.13.html).)273274## Улучшенные модули275276### argparse277278- Добавлен параметр *устарело* в методы [`add_argument()`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser.add_argument) и `add_parser()`, чтобы можно было помечать устаревшими параметры командной строки, позиционные аргументы и подкоманды. (Автор: Serhiy Storchaka, [gh-83648](https://python-all.ru/3.16/whatsnew/3.13.html).)279280### array281282- Добавлен код типа `'w'` (`Py_UCS4`) для символов Unicode. Его следует использовать вместо устаревшего кода типа `'u'`. (Автор: Inada Naoki, [gh-80480](https://python-all.ru/3.16/whatsnew/3.13.html).)283- Регистрация [`array.array`](https://python-all.ru/3.16/library/array.html#array.array) в качестве [`MutableSequence`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.MutableSequence) путём реализации метода [`clear()`](https://python-all.ru/3.16/library/array.html#array.array.clear). (Автор: Mike Zimin, [gh-114894](https://python-all.ru/3.16/whatsnew/3.13.html).)284285### ast286287- Конструкторы типов узлов в модуле [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast) теперь строже проверяют принимаемые аргументы, а при их пропуске ведут себя более интуитивно.288289 Если необязательное поле узла AST не указано в качестве аргумента при создании экземпляра, то теперь оно будет установлено в `None`. Аналогично, если поле-список опущено, оно будет установлено в пустой список, а если опущено поле `expr_context`, по умолчанию оно равно [`Load()`](https://python-all.ru/3.16/library/ast.html#ast.Load). (Раньше во всех этих случаях атрибут отсутствовал у вновь созданного экземпляра узла AST.)290291 Во всех остальных случаях, когда обязательный аргумент опущен, конструктор узла выдаст [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning). В Python 3.15 это будет приводить к исключению. Аналогично, передача конструктору именованного аргумента, не соответствующего ни одному полю узла AST, теперь считается устаревшей и в Python 3.15 будет вызывать исключение.292293 Эти изменения не затрагивают определяемые пользователем подклассы [`ast.AST`](https://python-all.ru/3.16/library/ast.html#ast.AST), если только класс не включит новое поведение, определив отображение [`AST._field_types`](https://python-all.ru/3.16/library/ast.html#ast.AST._field_types).294295 (Автор: Jelle Zijlstra, [gh-105858](https://python-all.ru/3.16/whatsnew/3.13.html), [gh-117486](https://python-all.ru/3.16/whatsnew/3.13.html) и [gh-118851](https://python-all.ru/3.16/whatsnew/3.13.html).)296- [`ast.parse()`](https://python-all.ru/3.16/library/ast.html#ast.parse) теперь принимает необязательный аргумент *optimize*, который передаётся в [`compile()`](https://python-all.ru/3.16/library/functions.html#compile). Это позволяет получить оптимизированное AST. (Автор: Irit Katriel, [gh-108113](https://python-all.ru/3.16/whatsnew/3.13.html).)297298### asyncio299300- [`asyncio.as_completed()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.as_completed) теперь возвращает объект, который является одновременно [асинхронным итератором](https://python-all.ru/3.16/glossary.html#term-asynchronous-iterator) и обычным [итератором](https://python-all.ru/3.16/glossary.html#term-iterator) из [ожидаемых объектов](https://python-all.ru/3.16/glossary.html#term-awaitable). Ожидаемые объекты, возвращаемые асинхронной итерацией, включают исходные объекты задач или future, переданные в вызов, что упрощает сопоставление результатов с завершаемыми задачами. (Автор: Justin Arthur, [gh-77714](https://python-all.ru/3.16/whatsnew/3.13.html).)301- [`asyncio.loop.create_unix_server()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.loop.create_unix_server) теперь автоматически удаляет Unix-сокет при закрытии сервера. (Автор: Pierre Ossman, [gh-111246](https://python-all.ru/3.16/whatsnew/3.13.html).)302- [`DatagramTransport.sendto()`](https://python-all.ru/3.16/library/asyncio-protocol.html#asyncio.DatagramTransport.sendto) теперь отправляет дейтаграммы нулевой длины, если вызван с пустым объектом bytes. Управление потоком транспорта также теперь учитывает заголовок дейтаграммы при вычислении размера буфера. (Автор: Jamie Phan, [gh-115199](https://python-all.ru/3.16/whatsnew/3.13.html).)303- Добавлены [`Queue.shutdown`](https://python-all.ru/3.16/library/asyncio-queue.html#asyncio.Queue.shutdown) и [`QueueShutDown`](https://python-all.ru/3.16/library/asyncio-queue.html#asyncio.QueueShutDown) для управления завершением очереди. (Авторы: Laurie Opperman и Yves Duprat, [gh-104228](https://python-all.ru/3.16/whatsnew/3.13.html).)304- Добавлены методы [`Server.close_clients()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.Server.close_clients) и [`Server.abort_clients()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.Server.abort_clients), которые более принудительно закрывают asyncio-сервер. (Автор: Pierre Ossman, [gh-113538](https://python-all.ru/3.16/whatsnew/3.13.html).)305- [`StreamReader.readuntil()`](https://python-all.ru/3.16/library/asyncio-stream.html#asyncio.StreamReader.readuntil) теперь принимает кортеж разделителей, останавливаясь при обнаружении любого из них. (Автор: Bruce Merry, [gh-81322](https://python-all.ru/3.16/whatsnew/3.13.html).)306- Улучшено поведение [`TaskGroup`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.TaskGroup), когда внешняя отмена сталкивается с внутренней отменой. Например, когда две группы задач вложены и обе одновременно получают исключение в дочерней задаче, раньше внешняя группа задач могла зависнуть, потому что её внутренняя отмена поглощалась внутренней группой задач.307308 В случае, когда группа задач отменяется извне и при этом должна вызвать [`ExceptionGroup`](https://python-all.ru/3.16/library/exceptions.html#ExceptionGroup), теперь она вызывает метод [`cancel()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.Task.cancel) родительской задачи. Это гарантирует, что [`CancelledError`](https://python-all.ru/3.16/library/asyncio-exceptions.html#asyncio.CancelledError) будет возбуждена при следующей [`await`](https://python-all.ru/3.16/reference/expressions.html#await), и отмена не теряется.309310 Дополнительное преимущество этих изменений: группы задач теперь сохраняют счётчик отмен ([`cancelling()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.Task.cancelling)).311312 Для обработки некоторых граничных случаев [`uncancel()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.Task.uncancel) теперь может сбрасывать недокументированный флаг `_must_cancel`, когда счётчик отмен достигает нуля.313314 (По мотивам проблемы, сообщённой Arthur Tacca, [gh-116720](https://python-all.ru/3.16/whatsnew/3.13.html).)315- Когда [`TaskGroup.create_task()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.TaskGroup.create_task) вызывается для неактивного [`TaskGroup`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.TaskGroup), указанная корутина будет закрыта (что предотвращает [`RuntimeWarning`](https://python-all.ru/3.16/library/exceptions.html#RuntimeWarning) о том, что данную корутину никогда не ожидали). (Авторы: Arthur Tacca и Jason Zhang, [gh-115957](https://python-all.ru/3.16/whatsnew/3.13.html).)316- Функция и методы с именем `create_task` получили новый аргумент `**kwargs`, который передаётся конструктору задачи. Это изменение было случайно добавлено в 3.13.3 и нарушило контракт API для пользовательских фабрик задач. Некоторые сторонние фабрики задач реализовали обходные пути для этого. В версии 3.13.4 и более поздних старый контракт фабрики снова соблюдается (до 3.14). Чтобы обходные пути продолжали работать, дополнительный аргумент `**kwargs` по-прежнему позволяет передавать дополнительные именованные аргументы в [`Task`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.Task) и в пользовательские фабрики задач.317318 Это затрагивает следующие функцию и методы: [`asyncio.create_task()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.create_task), [`asyncio.loop.create_task()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.loop.create_task), [`asyncio.TaskGroup.create_task()`](https://python-all.ru/3.16/library/asyncio-task.html#asyncio.TaskGroup.create_task). (Автор: Thomas Grainger, [gh-128307](https://python-all.ru/3.16/whatsnew/3.13.html).)319320### base64321322- Добавлены функции [`z85encode()`](https://python-all.ru/3.16/library/base64.html#base64.z85encode) и [`z85decode()`](https://python-all.ru/3.16/library/base64.html#base64.z85decode) для кодирования [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes) в [данные Z85](https://python-all.ru/3.16/whatsnew/3.13.html) и декодирования данных, закодированных в Z85, в `bytes`. (Автор: Matan Perelman, [gh-75299](https://python-all.ru/3.16/whatsnew/3.13.html).)323324### compileall325326- Количество рабочих потоков и процессов по умолчанию теперь выбирается с помощью [`os.process_cpu_count()`](https://python-all.ru/3.16/library/os.html#os.process_cpu_count) вместо [`os.cpu_count()`](https://python-all.ru/3.16/library/os.html#os.cpu_count). (Предложено Victor Stinner в [gh-109649](https://python-all.ru/3.16/whatsnew/3.13.html).)327328### concurrent.futures329330- Количество рабочих потоков и процессов по умолчанию теперь выбирается с помощью [`os.process_cpu_count()`](https://python-all.ru/3.16/library/os.html#os.process_cpu_count) вместо [`os.cpu_count()`](https://python-all.ru/3.16/library/os.html#os.cpu_count). (Предложено Victor Stinner в [gh-109649](https://python-all.ru/3.16/whatsnew/3.13.html).)331332### configparser333334- [`ConfigParser`](https://python-all.ru/3.16/library/configparser.html#configparser.ConfigParser) теперь поддерживает безымянные секции, что позволяет использовать пары ключ-значение на верхнем уровне. Это можно включить с помощью нового параметра *allow\_unnamed\_section*. (Автор: Pedro Sousa Lacerda в [gh-66449](https://python-all.ru/3.16/whatsnew/3.13.html).)335336### copy337338- Новая функция [`replace()`](https://python-all.ru/3.16/library/copy.html#copy.replace) и [`replace protocol`](https://python-all.ru/3.16/library/copy.html#object.__replace__) значительно упрощают создание изменённых копий объектов. Это особенно полезно при работе с неизменяемыми объектами. Следующие типы поддерживают функцию `replace()` и реализуют протокол replace:339340 - [`collections.namedtuple()`](https://python-all.ru/3.16/library/collections.html#collections.namedtuple)341 - [`dataclasses.dataclass`](https://python-all.ru/3.16/library/dataclasses.html#dataclasses.dataclass)342 - [`datetime.datetime`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime), [`datetime.date`](https://python-all.ru/3.16/library/datetime.html#datetime.date), [`datetime.time`](https://python-all.ru/3.16/library/datetime.html#datetime.time)343 - [`inspect.Signature`](https://python-all.ru/3.16/library/inspect.html#inspect.Signature), [`inspect.Parameter`](https://python-all.ru/3.16/library/inspect.html#inspect.Parameter)344 - [`types.SimpleNamespace`](https://python-all.ru/3.16/library/types.html#types.SimpleNamespace)345 - [объекты кода](https://python-all.ru/3.16/reference/datamodel.html#code-objects)346347 Любой пользовательский класс также может поддерживать [`copy.replace()`](https://python-all.ru/3.16/library/copy.html#copy.replace), определив метод [`__replace__()`](https://python-all.ru/3.16/library/copy.html#object.__replace__). (Автор: Serhiy Storchaka в [gh-108751](https://python-all.ru/3.16/whatsnew/3.13.html).)348349### ctypes350351- В результате необходимого внутреннего рефакторинга инициализация внутренних метаклассов теперь происходит в `__init__`, а не в `__new__`. Это затрагивает проекты, которые наследуют эти внутренние метаклассы для предоставления собственной инициализации. В общем случае:352353 - Собственную логику, которая выполнялась в `__new__` после вызова `super().__new__`, следует перенести в `__init__`.354 - Для создания класса вызывайте метакласс, а не только его метод `__new__`.355356 См. [gh-124520](https://python-all.ru/3.16/whatsnew/3.13.html) для обсуждения и ссылок на изменения в некоторых затронутых проектах.357- Объекты [`ctypes.Structure`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure) имеют новый атрибут [`_align_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._align_), который позволяет явно задавать выравнивание структуры, упаковываемой в память или распаковываемой из неё. (Автор: Matt Sanderson в [gh-112433](https://python-all.ru/3.16/whatsnew/3.13.html))358359### dbm360361- Добавлен модуль [`dbm.sqlite3`](https://python-all.ru/3.16/library/dbm.html#module-dbm.sqlite3), реализующий бэкенд на SQLite, и сделан бэкендом по умолчанию для `dbm`. (Авторы: Raymond Hettinger и Erlend E. Aasland в [gh-100414](https://python-all.ru/3.16/whatsnew/3.13.html).)362- Разрешено удалять все элементы из базы данных через новые методы `clear()` объектов баз данных GDBM и NDBM. (Автор: Donghee Na в [gh-107122](https://python-all.ru/3.16/whatsnew/3.13.html).)363364### dis365366- Изменён вывод функций модуля [`dis`](https://python-all.ru/3.16/library/dis.html#module-dis): теперь отображаются логические метки для целей переходов и обработчиков исключений вместо смещений. Смещения можно добавить с помощью нового параметра командной строки [`-O`](https://python-all.ru/3.16/library/dis.html#cmdoption-dis-O) или аргумента *show\_offsets*. (Автор: Irit Katriel в [gh-112137](https://python-all.ru/3.16/whatsnew/3.13.html).)367- [`get_instructions()`](https://python-all.ru/3.16/library/dis.html#dis.get_instructions) больше не представляет записи кэша как отдельные инструкции. Вместо этого он возвращает их как часть [`Instruction`](https://python-all.ru/3.16/library/dis.html#dis.Instruction) в новом поле *cache\_info*. Аргумент *show\_caches* функции `get_instructions()` устарел и больше не действует. (Автор: Irit Katriel в [gh-112962](https://python-all.ru/3.16/whatsnew/3.13.html).)368369### doctest370371- Вывод [`doctest`](https://python-all.ru/3.16/library/doctest.html#module-doctest) теперь по умолчанию цветной. Это можно настроить через новую переменную окружения [`PYTHON_COLORS`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_COLORS), а также через канонические переменные [`NO_COLOR`](https://python-all.ru/3.16/whatsnew/3.13.html) и [`FORCE_COLOR`](https://python-all.ru/3.16/whatsnew/3.13.html). См. также [Управление цветом](https://python-all.ru/3.16/using/cmdline.html#using-on-controlling-color). (Автор: Hugo van Kemenade в [gh-117225](https://python-all.ru/3.16/whatsnew/3.13.html).)372- Метод [`DocTestRunner.run()`](https://python-all.ru/3.16/library/doctest.html#doctest.DocTestRunner.run) теперь подсчитывает количество пропущенных тестов. Добавлены атрибуты [`DocTestRunner.skips`](https://python-all.ru/3.16/library/doctest.html#doctest.DocTestRunner.skips) и [`TestResults.skipped`](https://python-all.ru/3.16/library/doctest.html#doctest.TestResults.skipped). (Автор: Victor Stinner в [gh-108794](https://python-all.ru/3.16/whatsnew/3.13.html).)373374### email375376- Заголовки с встроенными переводами строк теперь экранируются при выводе. [`generator`](https://python-all.ru/3.16/library/email.generator.html#module-email.generator) теперь отказывается сериализовать (записывать) заголовки, которые неправильно свёрнуты или разделены, так что они могут быть разобраны как несколько заголовков или объединены с соседними данными. Если необходимо отключить эту защитную функцию, задайте [`verify_generated_headers`](https://python-all.ru/3.16/library/email.policy.html#email.policy.Policy.verify_generated_headers). (Авторы: Bas Bloemsaat и Petr Viktorin в [gh-121650](https://python-all.ru/3.16/whatsnew/3.13.html).)377- [`getaddresses()`](https://python-all.ru/3.16/library/email.utils.html#email.utils.getaddresses) и [`parseaddr()`](https://python-all.ru/3.16/library/email.utils.html#email.utils.parseaddr) теперь возвращают пары `('', '')` в большем количестве ситуаций, когда встречаются недопустимые email-адреса, вместо потенциально неточных значений. У этих двух функций появился новый необязательный параметр *strict* (по умолчанию `True`). Чтобы получить старое поведение (принимать некорректный ввод), используйте `strict=False`. `getattr(email.utils, 'supports_strict_parsing', False)` можно использовать для проверки доступности параметра *strict*. (Авторы: Thomas Dwyer и Victor Stinner для [gh-102988](https://python-all.ru/3.16/whatsnew/3.13.html) с целью улучшения исправления [**CVE 2023-27043**](https://python-all.ru/3.16/whatsnew/3.13.html).)378379### enum380381- [`EnumDict`](https://python-all.ru/3.16/library/enum.html#enum.EnumDict) стал публичным, чтобы лучше поддерживать наследование [`EnumType`](https://python-all.ru/3.16/library/enum.html#enum.EnumType).382383### fractions384385- Объекты [`Fraction`](https://python-all.ru/3.16/library/fractions.html#fractions.Fraction) теперь поддерживают стандартные правила [мини-языка спецификации форматирования](https://python-all.ru/3.16/library/string.html#formatspec) для заполнения, выравнивания, обработки знака, минимальной ширины и группировки. (Автор: Mark Dickinson в [gh-111320](https://python-all.ru/3.16/whatsnew/3.13.html).)386387### glob388389- Добавлена [`translate()`](https://python-all.ru/3.16/library/glob.html#glob.translate), функция для преобразования пути с shell-маской в регулярное выражение. (Предложено Barney Gale в [gh-72904](https://python-all.ru/3.16/whatsnew/3.13.html).)390391### importlib392393- Следующие функции в [`importlib.resources`](https://python-all.ru/3.16/library/importlib.resources.html#module-importlib.resources) теперь позволяют получать доступ к каталогу (или дереву) ресурсов, используя несколько позиционных аргументов (аргументы *encoding* и *errors* в функциях чтения текста теперь являются только ключевыми):394395 - [`is_resource()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.is_resource)396 - [`open_binary()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.open_binary)397 - [`open_text()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.open_text)398 - [`path()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.path)399 - [`read_binary()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.read_binary)400 - [`read_text()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.read_text)401402 Эти функции больше не считаются устаревшими и не планируются к удалению. (Предложено Petr Viktorin в [gh-116608](https://python-all.ru/3.16/whatsnew/3.13.html).)403- [`contents()`](https://python-all.ru/3.16/library/importlib.resources.html#importlib.resources.contents) по-прежнему считается устаревшим в пользу полнофункционального API [`Traversable`](https://python-all.ru/3.16/library/importlib.resources.abc.html#importlib.resources.abc.Traversable). Однако теперь нет планов по его удалению. (Предложено Petr Viktorin в [gh-116608](https://python-all.ru/3.16/whatsnew/3.13.html).)404405### io406407- Финализатор [`IOBase`](https://python-all.ru/3.16/library/io.html#io.IOBase) теперь регистрирует в [`sys.unraisablehook`](https://python-all.ru/3.16/library/sys.html#sys.unraisablehook) любые ошибки, возникающие при вызове метода [`close()`](https://python-all.ru/3.16/library/io.html#io.IOBase.close). Ранее по умолчанию ошибки игнорировались без сообщения, и запись велась только в [режиме разработки Python](https://python-all.ru/3.16/library/devmode.html#devmode) или при использовании [отладочной сборки Python](https://python-all.ru/3.16/using/configure.html#debug-build). (Предложено Victor Stinner в [gh-62948](https://python-all.ru/3.16/whatsnew/3.13.html).)408409### ipaddress410411- Добавлено свойство [`IPv4Address.ipv6_mapped`](https://python-all.ru/3.16/library/ipaddress.html#ipaddress.IPv4Address.ipv6_mapped), которое возвращает IPv4-отображённый IPv6-адрес. (Предложено Charles Machalow в [gh-109466](https://python-all.ru/3.16/whatsnew/3.13.html).)412- Исправлено поведение `is_global` и `is_private` в [`IPv4Address`](https://python-all.ru/3.16/library/ipaddress.html#ipaddress.IPv4Address), [`IPv6Address`](https://python-all.ru/3.16/library/ipaddress.html#ipaddress.IPv6Address), [`IPv4Network`](https://python-all.ru/3.16/library/ipaddress.html#ipaddress.IPv4Network) и [`IPv6Network`](https://python-all.ru/3.16/library/ipaddress.html#ipaddress.IPv6Network). (Предложено Jakub Stasiak в [gh-113171](https://python-all.ru/3.16/whatsnew/3.13.html).)413414### itertools415416- [`batched()`](https://python-all.ru/3.16/library/itertools.html#itertools.batched) получил новый параметр *strict*, который вызывает исключение [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError), если последний пакет короче указанного размера. (Предложено Raymond Hettinger в [gh-113202](https://python-all.ru/3.16/whatsnew/3.13.html).)417418### marshal419420- Добавлен параметр *allow\_code* в функции модуля. Передача `allow_code=False` предотвращает сериализацию и десериализацию объектов кода, несовместимых между версиями Python. (Предложено Serhiy Storchaka в [gh-113626](https://python-all.ru/3.16/whatsnew/3.13.html).)421422### math423424- Новая функция [`fma()`](https://python-all.ru/3.16/library/math.html#math.fma) выполняет операции слитного умножения-сложения. Она вычисляет `x * y + z` за одно округление, что позволяет избежать потери точности на промежуточных этапах. Она обёртывает функцию `fma()` из C99 и следует спецификации операции IEEE 754 «fusedMultiplyAdd» для особых случаев. (Предложено Mark Dickinson и Victor Stinner в [gh-73468](https://python-all.ru/3.16/whatsnew/3.13.html).)425426### mimetypes427428- Добавлена функция [`guess_file_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_file_type) для определения MIME-типа по пути в файловой системе. Использование путей с [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type) теперь [мягко устарело](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). (Предложено Serhiy Storchaka в [gh-66543](https://python-all.ru/3.16/whatsnew/3.13.html).)429430### mmap431432- [`mmap`](https://python-all.ru/3.16/library/mmap.html#mmap.mmap) теперь защищён от аварийного завершения в Windows, когда отображаемая память недоступна из-за ошибок файловой системы или нарушений доступа. (Предложено Jannis Weigend в [gh-118209](https://python-all.ru/3.16/whatsnew/3.13.html).)433- [`mmap`](https://python-all.ru/3.16/library/mmap.html#mmap.mmap) имеет новый метод [`seekable()`](https://python-all.ru/3.16/library/mmap.html#mmap.mmap.seekable), который можно использовать, когда требуется файлоподобный объект с поддержкой позиционирования (seekable). Метод [`seek()`](https://python-all.ru/3.16/library/mmap.html#mmap.mmap.seek) теперь возвращает новую абсолютную позицию. (Предложено Donghee Na и Sylvie Liberman в [gh-111835](https://python-all.ru/3.16/whatsnew/3.13.html).)434- Новый параметр *trackfd* (только для UNIX) для [`mmap`](https://python-all.ru/3.16/library/mmap.html#mmap.mmap) управляет дублированием файловых дескрипторов; если false, файловый дескриптор, заданный *fileno*, не будет дублироваться. (Предложено Zackery Spytz и Petr Viktorin в [gh-78502](https://python-all.ru/3.16/whatsnew/3.13.html).)435436### multiprocessing437438- Количество рабочих потоков и процессов по умолчанию теперь выбирается с помощью [`os.process_cpu_count()`](https://python-all.ru/3.16/library/os.html#os.process_cpu_count) вместо [`os.cpu_count()`](https://python-all.ru/3.16/library/os.html#os.cpu_count). (Предложено Victor Stinner в [gh-109649](https://python-all.ru/3.16/whatsnew/3.13.html).)439440### os441442- Добавлена функция [`process_cpu_count()`](https://python-all.ru/3.16/library/os.html#os.process_cpu_count) для получения количества логических ядер ЦП, доступных вызывающему потоку текущего процесса. (Предложено Victor Stinner в [gh-109649](https://python-all.ru/3.16/whatsnew/3.13.html).)443- [`cpu_count()`](https://python-all.ru/3.16/library/os.html#os.cpu_count) и [`process_cpu_count()`](https://python-all.ru/3.16/library/os.html#os.process_cpu_count) можно переопределить с помощью новой переменной окружения [`PYTHON_CPU_COUNT`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHON_CPU_COUNT) или новой опции командной строки [`-X cpu_count`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). Эта опция полезна для пользователей, которым нужно ограничить ресурсы ЦП контейнерной системы без изменения кода приложения или самого контейнера. (Предложено Donghee Na в [gh-109595](https://python-all.ru/3.16/whatsnew/3.13.html).)444- Добавлен [низкоуровневый интерфейс](https://python-all.ru/3.16/library/os.html#os-timerfd) к *[файловым дескрипторам таймеров](https://python-all.ru/3.16/whatsnew/3.13.html)* Linux через [`timerfd_create()`](https://python-all.ru/3.16/library/os.html#os.timerfd_create), [`timerfd_settime()`](https://python-all.ru/3.16/library/os.html#os.timerfd_settime), [`timerfd_settime_ns()`](https://python-all.ru/3.16/library/os.html#os.timerfd_settime_ns), [`timerfd_gettime()`](https://python-all.ru/3.16/library/os.html#os.timerfd_gettime), [`timerfd_gettime_ns()`](https://python-all.ru/3.16/library/os.html#os.timerfd_gettime_ns), [`TFD_NONBLOCK`](https://python-all.ru/3.16/library/os.html#os.TFD_NONBLOCK), [`TFD_CLOEXEC`](https://python-all.ru/3.16/library/os.html#os.TFD_CLOEXEC), [`TFD_TIMER_ABSTIME`](https://python-all.ru/3.16/library/os.html#os.TFD_TIMER_ABSTIME) и [`TFD_TIMER_CANCEL_ON_SET`](https://python-all.ru/3.16/library/os.html#os.TFD_TIMER_CANCEL_ON_SET). (Предложено Masaru Tsuchiyama в [gh-108277](https://python-all.ru/3.16/whatsnew/3.13.html).)445- [`lchmod()`](https://python-all.ru/3.16/library/os.html#os.lchmod) и аргумент *follow\_symlinks* функции [`chmod()`](https://python-all.ru/3.16/library/os.html#os.chmod) теперь доступны в Windows. Обратите внимание, что значение по умолчанию *follow\_symlinks* в `lchmod()` равно `False` в Windows. (Предложено Serhiy Storchaka в [gh-59616](https://python-all.ru/3.16/whatsnew/3.13.html).)446- [`fchmod()`](https://python-all.ru/3.16/library/os.html#os.fchmod) и поддержка файловых дескрипторов в [`chmod()`](https://python-all.ru/3.16/library/os.html#os.chmod) теперь доступны в Windows. (Предложено Serhiy Storchaka в [gh-113191](https://python-all.ru/3.16/whatsnew/3.13.html).)447- On Windows, [`mkdir()`](https://python-all.ru/3.16/library/os.html#os.mkdir) and [`makedirs()`](https://python-all.ru/3.16/library/os.html#os.makedirs) now support passing a *mode* value of `0o700` to apply access control to the new directory. This implicitly affects [`tempfile.mkdtemp()`](https://python-all.ru/3.16/library/tempfile.html#tempfile.mkdtemp) and is a mitigation for [**CVE 2024-4030**](https://python-all.ru/3.16/whatsnew/3.13.html). Other values for *mode* continue to be ignored. (Contributed by Steve Dower in [gh-118486](https://python-all.ru/3.16/whatsnew/3.13.html).)448- [`posix_spawn()`](https://python-all.ru/3.16/library/os.html#os.posix_spawn) теперь принимает `None` для аргумента *env*, что заставляет вновь порождённый процесс использовать окружение текущего процесса. (Предложено Jakub Kulik в [gh-113119](https://python-all.ru/3.16/whatsnew/3.13.html).)449- [`posix_spawn()`](https://python-all.ru/3.16/library/os.html#os.posix_spawn) теперь может использовать атрибут [`POSIX_SPAWN_CLOSEFROM`](https://python-all.ru/3.16/library/os.html#os.POSIX_SPAWN_CLOSEFROM) в параметре *file\_actions* на платформах, поддерживающих `posix_spawn_file_actions_addclosefrom_np()`. (Автор: Jakub Kulik в [gh-113117](https://python-all.ru/3.16/whatsnew/3.13.html).)450451### os.path452453- Добавлена [`isreserved()`](https://python-all.ru/3.16/library/os.path.html#os.path.isreserved) для проверки, зарезервирован ли путь в текущей системе. Эта функция доступна только в Windows. (Автор: Barney Gale в [gh-88569](https://python-all.ru/3.16/whatsnew/3.13.html).)454- В Windows [`isabs()`](https://python-all.ru/3.16/library/os.path.html#os.path.isabs) больше не считает пути, начинающиеся ровно с одной косой черты (`\` or `/`), абсолютными. (Авторы: Barney Gale и Jon Foster в [gh-44626](https://python-all.ru/3.16/whatsnew/3.13.html).)455- [`realpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.realpath) теперь разрешает имена файлов в стиле MS-DOS, даже если файл недоступен. (Автор: Moonsik Park в [gh-82367](https://python-all.ru/3.16/whatsnew/3.13.html).)456457### pathlib458459- Добавлено [`UnsupportedOperation`](https://python-all.ru/3.16/library/pathlib.html#pathlib.UnsupportedOperation), которое возбуждается вместо [`NotImplementedError`](https://python-all.ru/3.16/library/exceptions.html#NotImplementedError), когда операция над путём не поддерживается. (Автор: Barney Gale в [gh-89812](https://python-all.ru/3.16/whatsnew/3.13.html).)460- Добавлен новый конструктор для создания объектов [`Path`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path) из URI вида 'file' (`file:///`), [`Path.from_uri()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.from_uri). (Автор: Barney Gale в [gh-107465](https://python-all.ru/3.16/whatsnew/3.13.html).)461- Добавлена [`PurePath.full_match()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.PurePath.full_match) для сопоставления путей с шаблонами в стиле оболочки, включая рекурсивный шаблон “`**`”. (Автор: Barney Gale в [gh-73435](https://python-all.ru/3.16/whatsnew/3.13.html).)462- Добавлен атрибут класса [`PurePath.parser`](https://python-all.ru/3.16/library/pathlib.html#pathlib.PurePath.parser) для хранения реализации [`os.path`](https://python-all.ru/3.16/library/os.path.html#module-os.path), используемой для низкоуровневого разбора и объединения путей. Это будет либо `posixpath`, либо `ntpath`.463- Добавлен аргумент *recurse\_symlinks*, передаваемый только по ключевому слову, в [`Path.glob()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.glob) и [`rglob()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.rglob). (Автор: Barney Gale в [gh-77609](https://python-all.ru/3.16/whatsnew/3.13.html).)464- [`Path.glob()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.glob) и [`rglob()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.rglob) теперь возвращают файлы и каталоги, если задан шаблон, оканчивающийся на “`**`”. Ранее возвращались только каталоги. (Автор: Barney Gale в [gh-70303](https://python-all.ru/3.16/whatsnew/3.13.html).)465- Добавлен аргумент *follow\_symlinks*, передаваемый только по ключевому слову, в [`Path.is_file`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.is_file), [`Path.is_dir`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.is_dir), [`Path.owner()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.owner) и [`Path.group()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.group). (Авторы: Barney Gale в [gh-105793](https://python-all.ru/3.16/whatsnew/3.13.html) и Kamil Turek в [gh-107962](https://python-all.ru/3.16/whatsnew/3.13.html).)466467### pdb468469- [`breakpoint()`](https://python-all.ru/3.16/library/functions.html#breakpoint) и [`set_trace()`](https://python-all.ru/3.16/library/pdb.html#pdb.set_trace) теперь сразу переходят в отладчик, а не на следующей строке выполняемого кода. Это изменение предотвращает выход отладчика за пределы контекста, когда `breakpoint()` расположен в конце контекста. (Автор: Tian Gao в [gh-118579](https://python-all.ru/3.16/whatsnew/3.13.html).)470- `sys.path[0]` больше не заменяется каталогом отлаживаемого скрипта, когда установлен [`sys.flags.safe_path`](https://python-all.ru/3.16/library/sys.html#sys.flags.safe_path). (Авторы: Tian Gao и Christian Walther в [gh-111762](https://python-all.ru/3.16/whatsnew/3.13.html).)471- [`zipapp`](https://python-all.ru/3.16/library/zipapp.html#module-zipapp) теперь поддерживается в качестве цели отладки. (Автор: Tian Gao в [gh-118501](https://python-all.ru/3.16/whatsnew/3.13.html).)472- Добавлена возможность переключения между связанными исключениями во время посмертной отладки в [`pm()`](https://python-all.ru/3.16/library/pdb.html#pdb.pm) с помощью новой команды [`exceptions [exc_number]`](https://python-all.ru/3.16/library/pdb.html#pdbcommand-exceptions) для Pdb. (Автор: Matthias Bussonnier в [gh-106676](https://python-all.ru/3.16/whatsnew/3.13.html).)473- Выражения и инструкции, префикс которых является командой pdb, теперь корректно опознаются и выполняются. (Автор: Tian Gao в [gh-108464](https://python-all.ru/3.16/whatsnew/3.13.html).)474475### очередь476477- Добавлены [`Queue.shutdown`](https://python-all.ru/3.16/library/queue.html#queue.Queue.shutdown) и [`ShutDown`](https://python-all.ru/3.16/library/queue.html#queue.ShutDown) для управления завершением очереди. (Авторы: Laurie Opperman и Yves Duprat в [gh-104750](https://python-all.ru/3.16/whatsnew/3.13.html).)478479### random480481- Добавлен [интерфейс командной строки](https://python-all.ru/3.16/library/random.html#random-cli). (Автор: Hugo van Kemenade в [gh-118131](https://python-all.ru/3.16/whatsnew/3.13.html).)482483### re484485- Переименован `re.error` в [`PatternError`](https://python-all.ru/3.16/library/re.html#re.PatternError) для улучшения ясности. `re.error` сохранён для обратной совместимости.486487### shutil488489- Поддержка именованных аргументов *dir\_fd* и *follow\_symlinks* в [`chown()`](https://python-all.ru/3.16/library/shutil.html#shutil.chown). (Авторы: Berker Peksag и Tahia K в [gh-62308](https://python-all.ru/3.16/whatsnew/3.13.html))490491### site492493- Файлы `.pth` теперь декодируются сначала с использованием UTF-8, а затем с [кодировкой локали](https://python-all.ru/3.16/glossary.html#term-locale-encoding), если декодирование UTF-8 не удаётся. (Автор: Inada Naoki в [gh-117802](https://python-all.ru/3.16/whatsnew/3.13.html).)494495### sqlite3496497- Теперь выводится [`ResourceWarning`](https://python-all.ru/3.16/library/exceptions.html#ResourceWarning), если объект [`Connection`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection) не был явно [`closed`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.close). (Автор: Erlend E. Aasland в [gh-105539](https://python-all.ru/3.16/whatsnew/3.13.html).)498- Добавлен параметр *filter*, передаваемый только по ключевому слову, в [`Connection.iterdump()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.iterdump) для фильтрации объектов базы данных при выгрузке. (Автор: Mariusz Felisiak в [gh-91602](https://python-all.ru/3.16/whatsnew/3.13.html).)499500### ssl501502- API [`create_default_context()`](https://python-all.ru/3.16/library/ssl.html#ssl.create_default_context) теперь включает [`VERIFY_X509_PARTIAL_CHAIN`](https://python-all.ru/3.16/library/ssl.html#ssl.VERIFY_X509_PARTIAL_CHAIN) и [`VERIFY_X509_STRICT`](https://python-all.ru/3.16/library/ssl.html#ssl.VERIFY_X509_STRICT) в свои флаги по умолчанию.503504 > **Примечание**505 >506 > [`VERIFY_X509_STRICT`](https://python-all.ru/3.16/library/ssl.html#ssl.VERIFY_X509_STRICT) может отклонять сертификаты до [**RFC 5280**](https://python-all.ru/3.16/whatsnew/3.13.html) или повреждённые сертификаты, которые базовая реализация OpenSSL в противном случае могла бы принять. Хотя отключать это не рекомендуется, это можно сделать с помощью:507 >508 > ```python509 > import ssl510 >511 > ctx = ssl.create_default_context()512 > ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT513 > ```514515 (Автор: William Woodruff в [gh-112389](https://python-all.ru/3.16/whatsnew/3.13.html).)516517### statistics518519- Добавлен [`kde()`](https://python-all.ru/3.16/library/statistics.html#statistics.kde) для оценки плотности ядра. Это позволяет оценить непрерывную функцию плотности вероятности по фиксированному числу дискретных выборок. (Автор: Raymond Hettinger в [gh-115863](https://python-all.ru/3.16/whatsnew/3.13.html).)520- Добавлен [`kde_random()`](https://python-all.ru/3.16/library/statistics.html#statistics.kde_random) для выборки из оценённой функции плотности вероятности, созданной с помощью [`kde()`](https://python-all.ru/3.16/library/statistics.html#statistics.kde). (Автор: Raymond Hettinger в [gh-115863](https://python-all.ru/3.16/whatsnew/3.13.html).)521522### подпроцесс523524- Модуль [`subprocess`](https://python-all.ru/3.16/library/subprocess.html#module-subprocess) теперь использует функцию [`posix_spawn()`](https://python-all.ru/3.16/library/os.html#os.posix_spawn) в большем числе ситуаций.525526 В частности, когда *close\_fds* равно `True` (по умолчанию), [`posix_spawn()`](https://python-all.ru/3.16/library/os.html#os.posix_spawn) будет использоваться, если библиотека C предоставляет `posix_spawn_file_actions_addclosefrom_np()`, что включает последние версии Linux, FreeBSD и Solaris. На Linux это должно работать аналогично существующему коду на основе `vfork()` для Linux.527528 Частный регулировочный параметр `subprocess._USE_POSIX_SPAWN` можно установить в `False`, если необходимо принудительно запретить [`subprocess`](https://python-all.ru/3.16/library/subprocess.html#module-subprocess) использовать [`posix_spawn()`](https://python-all.ru/3.16/library/os.html#os.posix_spawn). Пожалуйста, сообщите причину и информацию о платформе в [трекер задач](https://python-all.ru/3.16/bugs.html#using-the-tracker), если вы установите это, чтобы мы могли улучшить логику выбора API для всех. (Автор: Jakub Kulik в [gh-113117](https://python-all.ru/3.16/whatsnew/3.13.html).)529530### sys531532- Добавлена функция [`_is_interned()`](https://python-all.ru/3.16/library/sys.html#sys._is_interned) для проверки, была ли строка интернирована. Эта функция не гарантированно существует во всех реализациях Python. (Автор: Serhiy Storchaka в [gh-78573](https://python-all.ru/3.16/whatsnew/3.13.html).)533534### tempfile535536- В Windows режим по умолчанию `0o700`, используемый [`tempfile.mkdtemp()`](https://python-all.ru/3.16/library/tempfile.html#tempfile.mkdtemp), теперь ограничивает доступ к новому каталогу из-за изменений в [`os.mkdir()`](https://python-all.ru/3.16/library/os.html#os.mkdir). Это смягчение для [**CVE 2024-4030**](https://python-all.ru/3.16/whatsnew/3.13.html). (Автор: Steve Dower в [gh-118486](https://python-all.ru/3.16/whatsnew/3.13.html).)537538### time539540- В Windows [`monotonic()`](https://python-all.ru/3.16/library/time.html#time.monotonic) теперь использует тактовый генератор `QueryPerformanceCounter()` с разрешением 1 микросекунда, вместо тактового генератора `GetTickCount64()`, который имеет разрешение 15,6 миллисекунд. (Автор: Victor Stinner в [gh-88494](https://python-all.ru/3.16/whatsnew/3.13.html).)541- В Windows [`time()`](https://python-all.ru/3.16/library/time.html#time.time) теперь использует тактовый генератор `GetSystemTimePreciseAsFileTime()` с разрешением 1 микросекунда, вместо тактового генератора `GetSystemTimeAsFileTime()`, который имеет разрешение 15,6 миллисекунд. (Автор: Victor Stinner в [gh-63207](https://python-all.ru/3.16/whatsnew/3.13.html).)542543### tkinter544545- Добавлены методы виджета [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter): `tk_busy_hold()`, `tk_busy_configure()`, `tk_busy_cget()`, `tk_busy_forget()`, `tk_busy_current()` и `tk_busy_status()`. (Авторы: Miguel, klappnase и Serhiy Storchaka в [gh-72684](https://python-all.ru/3.16/whatsnew/3.13.html).)546- Метод виджета [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter) `wm_attributes()` теперь принимает имя атрибута без префикса минус для получения атрибутов окна, например `w.wm_attributes('alpha')`, и позволяет указывать атрибуты и значения для установки в качестве именованных аргументов, например `w.wm_attributes(alpha=0.5)`. (Автор: Serhiy Storchaka в [gh-43457](https://python-all.ru/3.16/whatsnew/3.13.html).)547- `wm_attributes()` теперь может возвращать атрибуты в виде [`dict`](https://python-all.ru/3.16/library/stdtypes.html#dict), используя новый необязательный именованный параметр *return\_python\_dict*. (Автор: Serhiy Storchaka в [gh-43457](https://python-all.ru/3.16/whatsnew/3.13.html).)548- `Text.count()` теперь может возвращать простое [`int`](https://python-all.ru/3.16/library/functions.html#int), когда используется новый необязательный именованный параметр *return\_ints*. В противном случае единственное число возвращается как кортеж из одного элемента или `None`. (Автор: Serhiy Storchaka в [gh-97928](https://python-all.ru/3.16/whatsnew/3.13.html).)549- Добавлена поддержка типа элемента “vsapi” в методе [`element_create()`](https://python-all.ru/3.16/library/tkinter.ttk.html#tkinter.ttk.Style.element_create) [`tkinter.ttk.Style`](https://python-all.ru/3.16/library/tkinter.ttk.html#tkinter.ttk.Style). (Автор: Serhiy Storchaka в [gh-68166](https://python-all.ru/3.16/whatsnew/3.13.html).)550- Добавлен метод `after_info()` для виджетов Tkinter. (Автор: Cheryl Sabella в [gh-77020](https://python-all.ru/3.16/whatsnew/3.13.html).)551- Добавлен новый метод `copy_replace()` в `PhotoImage` для копирования области из одного изображения в другое, возможно с масштабированием пикселей, субдискретизацией или тем и другим. (Автор: Serhiy Storchaka в [gh-118225](https://python-all.ru/3.16/whatsnew/3.13.html).)552- Добавлен параметр *from\_coords* в методы `PhotoImage` `copy()`, `zoom()` и `subsample()`. Добавлены параметры *zoom* и *subsample* в метод `PhotoImage` `copy()`. (Автор: Serhiy Storchaka в [gh-118225](https://python-all.ru/3.16/whatsnew/3.13.html).)553- Добавлены методы `PhotoImage` `read()` для чтения изображения из файла и `data()` для получения данных изображения. Добавлены параметры *background* и *grayscale* в метод `write()`. (Автор: Serhiy Storchaka в [gh-118271](https://python-all.ru/3.16/whatsnew/3.13.html).)554555### traceback556557- Добавлен атрибут [`exc_type_str`](https://python-all.ru/3.16/library/traceback.html#traceback.TracebackException.exc_type_str) в [`TracebackException`](https://python-all.ru/3.16/library/traceback.html#traceback.TracebackException), который содержит строковое представление *exc\_type*. Объявлен устаревшим атрибут [`exc_type`](https://python-all.ru/3.16/library/traceback.html#traceback.TracebackException.exc_type), который содержит сам объект типа. Добавлен параметр *save\_exc\_type* (по умолчанию `True`) для указания, следует ли сохранять `exc_type`. (Автор: Irit Katriel в [gh-112332](https://python-all.ru/3.16/whatsnew/3.13.html).)558- Добавлен новый именованный параметр *show\_group* в [`TracebackException.format_exception_only()`](https://python-all.ru/3.16/library/traceback.html#traceback.TracebackException.format_exception_only) для (рекурсивного) форматирования вложенных исключений экземпляра [`BaseExceptionGroup`](https://python-all.ru/3.16/library/exceptions.html#BaseExceptionGroup). (Автор: Irit Katriel в [gh-105292](https://python-all.ru/3.16/whatsnew/3.13.html).)559560### types561562- [`SimpleNamespace`](https://python-all.ru/3.16/library/types.html#types.SimpleNamespace) теперь может принимать один позиционный аргумент для инициализации аргументов пространства имён. Этот аргумент должен быть либо отображением (mapping), либо итерируемым объектом пар ключ-значение. (Автор: Serhiy Storchaka в [gh-108191](https://python-all.ru/3.16/whatsnew/3.13.html).)563564### typing565566- [**PEP 705**](https://python-all.ru/3.16/whatsnew/3.13.html): Добавлен [`ReadOnly`](https://python-all.ru/3.16/library/typing.html#typing.ReadOnly) – специальная типовая конструкция для пометки элемента [`TypedDict`](https://python-all.ru/3.16/library/typing.html#typing.TypedDict) как только для чтения для статических анализаторов типов.567- [**PEP 742**](https://python-all.ru/3.16/whatsnew/3.13.html): Добавлен [`TypeIs`](https://python-all.ru/3.16/library/typing.html#typing.TypeIs) – типовая конструкция, которая позволяет указать статическому анализатору, как сужать тип.568- Добавлен [`NoDefault`](https://python-all.ru/3.16/library/typing.html#typing.NoDefault) – объект-маркер, используемый для представления значений по умолчанию некоторых параметров в модуле [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing). (Автор: Jelle Zijlstra в [gh-116126](https://python-all.ru/3.16/whatsnew/3.13.html).)569- Добавлен [`get_protocol_members()`](https://python-all.ru/3.16/library/typing.html#typing.get_protocol_members) для получения множества членов, определяющих [`typing.Protocol`](https://python-all.ru/3.16/library/typing.html#typing.Protocol). (Автор: Jelle Zijlstra в [gh-104873](https://python-all.ru/3.16/whatsnew/3.13.html).)570- Добавлен [`is_protocol()`](https://python-all.ru/3.16/library/typing.html#typing.is_protocol) для проверки, является ли класс [`Protocol`](https://python-all.ru/3.16/library/typing.html#typing.Protocol). (Автор: Jelle Zijlstra в [gh-104873](https://python-all.ru/3.16/whatsnew/3.13.html).)571- [`ClassVar`](https://python-all.ru/3.16/library/typing.html#typing.ClassVar) теперь можно вкладывать в [`Final`](https://python-all.ru/3.16/library/typing.html#typing.Final) и наоборот. (Автор: Mehdi Drissi в [gh-89547](https://python-all.ru/3.16/whatsnew/3.13.html).)572573### unicodedata574575- База данных Unicode обновлена до [версии 15.1.0](https://python-all.ru/3.16/whatsnew/3.13.html). (Автор: James Gerity в [gh-109559](https://python-all.ru/3.16/whatsnew/3.13.html).)576577### venv578579- Добавлена поддержка создания файлов игнорирования для систем управления версиями (SCM) в каталоге виртуального окружения. По умолчанию поддерживается Git. Реализована как добровольное включение через API (который можно расширить для поддержки других SCM, таких как [`EnvBuilder`](https://python-all.ru/3.16/library/venv.html#venv.EnvBuilder) и [`create()`](https://python-all.ru/3.16/library/venv.html#venv.create)) и добровольное отключение через CLI с помощью `--without-scm-ignore-files`. (Автор: Brett Cannon в [gh-108125](https://python-all.ru/3.16/whatsnew/3.13.html).)580581### warnings582583- [**PEP 702**](https://python-all.ru/3.16/whatsnew/3.13.html): Новый декоратор [`warnings.deprecated()`](https://python-all.ru/3.16/library/warnings.html#warnings.deprecated) предоставляет способ сообщать об устаревании [статическому анализатору типов](https://python-all.ru/3.16/glossary.html#term-static-type-checker) и предупреждать об использовании устаревших классов и функций. [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning) также может быть возбуждено при использовании декорированной функции или класса во время выполнения. (Автор: Jelle Zijlstra в [gh-104003](https://python-all.ru/3.16/whatsnew/3.13.html).)584585### xml586587- Добавлена возможность управлять отложенным переразбором Expat \>=2.6.0 ([**CVE 2023-52425**](https://python-all.ru/3.16/whatsnew/3.13.html)) путём добавления пяти новых методов:588589 - [`xml.etree.ElementTree.XMLParser.flush()`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLParser.flush)590 - [`xml.etree.ElementTree.XMLPullParser.flush()`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#xml.etree.ElementTree.XMLPullParser.flush)591 - [`xml.parsers.expat.xmlparser.GetReparseDeferralEnabled()`](https://python-all.ru/3.16/library/pyexpat.html#xml.parsers.expat.xmlparser.GetReparseDeferralEnabled)592 - [`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled()`](https://python-all.ru/3.16/library/pyexpat.html#xml.parsers.expat.xmlparser.SetReparseDeferralEnabled)593 - `xml.sax.expatreader.ExpatParser.flush()`594595 (Автор: Sebastian Pipping в [gh-115623](https://python-all.ru/3.16/whatsnew/3.13.html).)596- Добавлен метод `close()` для итератора, возвращаемого [`iterparse()`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#xml.etree.ElementTree.iterparse), для явной очистки. (Автор: Serhiy Storchaka в [gh-69893](https://python-all.ru/3.16/whatsnew/3.13.html).)597598### zipimport599600- Добавлена поддержка файлов формата [ZIP64](https://python-all.ru/3.16/whatsnew/3.13.html). Все любят огромные объёмы данных, верно? (Автор: Tim Hatch в [gh-94146](https://python-all.ru/3.16/whatsnew/3.13.html).)601602## Оптимизации603604- Время импорта нескольких модулей стандартной библиотеки значительно сокращено. Например, время импорта модуля [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing) уменьшено примерно на треть за счёт удаления зависимостей от [`re`](https://python-all.ru/3.16/library/re.html#module-re) и [`contextlib`](https://python-all.ru/3.16/library/contextlib.html#module-contextlib). Среди других модулей, ускоривших импорт: [`email.utils`](https://python-all.ru/3.16/library/email.utils.html#module-email.utils), [`enum`](https://python-all.ru/3.16/library/enum.html#module-enum), [`functools`](https://python-all.ru/3.16/library/functools.html#module-functools), [`importlib.metadata`](https://python-all.ru/3.16/library/importlib.metadata.html#module-importlib.metadata) и [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading). (Авторы: Alex Waygood, Shantanu Jain, Adam Turner, Daniel Hollas и другие в [gh-109653](https://python-all.ru/3.16/whatsnew/3.13.html).)605- [`textwrap.indent()`](https://python-all.ru/3.16/library/textwrap.html#textwrap.indent) теперь работает примерно на 30% быстрее для больших входных данных. (Автор: Inada Naoki в [gh-107369](https://python-all.ru/3.16/whatsnew/3.13.html).)606- Модуль [`subprocess`](https://python-all.ru/3.16/library/subprocess.html#module-subprocess) теперь использует функцию [`posix_spawn()`](https://python-all.ru/3.16/library/os.html#os.posix_spawn) в большем числе ситуаций, в том числе когда *close\_fds* равно `True` (значение по умолчанию) на многих современных платформах. Это должно дать заметный прирост производительности при запуске процессов на FreeBSD и Solaris. Подробнее см. в разделе [подпроцесс](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-subprocess) ниже. (Автор: Jakub Kulik в [gh-113117](https://python-all.ru/3.16/whatsnew/3.13.html).)607608## Удалённые модули и API609610### PEP 594: Удаление «мёртвых батареек» из стандартной библиотеки611612[**PEP 594**](https://python-all.ru/3.16/whatsnew/3.13.html) предложил удалить 19 модулей из стандартной библиотеки, которые в просторечии называют «мёртвыми батарейками» из-за их исторического, устаревшего или небезопасного статуса. Все перечисленные ниже модули были объявлены устаревшими в Python 3.11 и теперь удалены:613614- `aifc`615616 - [standard-aifc](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `aifc` из PyPI.617- `audioop`618619 - [audioop-lts](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте библиотеку `audioop-lts` из PyPI.620- `chunk`621622 - [standard-chunk](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `chunk` из PyPI.623- `cgi` и `cgitb`624625 - `cgi.FieldStorage` обычно можно заменить на [`urllib.parse.parse_qsl()`](https://python-all.ru/3.16/library/urllib.parse.html#urllib.parse.parse_qsl) для запросов `GET` и `HEAD`, а модуль [`email.message`](https://python-all.ru/3.16/library/email.message.html#module-email.message) или библиотеку [multipart](https://python-all.ru/3.16/whatsnew/3.13.html) – для запросов `POST` и `PUT`.626 - `cgi.parse()` можно заменить вызовом [`urllib.parse.parse_qs()`](https://python-all.ru/3.16/library/urllib.parse.html#urllib.parse.parse_qs) непосредственно для нужной строки запроса, если только ввод не является `multipart/form-data`, который следует заменять, как описано ниже для `cgi.parse_multipart()`.627 - `cgi.parse_header()` можно заменить функциональностью пакета [`email`](https://python-all.ru/3.16/library/email.html#module-email), который реализует те же RFC MIME. Например, с помощью [`email.message.EmailMessage`](https://python-all.ru/3.16/library/email.message.html#email.message.EmailMessage):628629 ```python630 from email.message import EmailMessage631632 msg = EmailMessage()633 msg['content-type'] = 'application/json; charset="utf8"'634 main, params = msg.get_content_type(), msg['content-type'].params635 ```636 - `cgi.parse_multipart()` можно заменить функциональностью из пакета [`email`](https://python-all.ru/3.16/library/email.html#module-email), реализующего те же MIME RFC, или библиотекой [multipart](https://python-all.ru/3.16/whatsnew/3.13.html). Например, классы [`email.message.EmailMessage`](https://python-all.ru/3.16/library/email.message.html#email.message.EmailMessage) и [`email.message.Message`](https://python-all.ru/3.16/library/email.compat32-message.html#email.message.Message).637 - [standard-cgi](https://python-all.ru/3.16/whatsnew/3.13.html): и [standard-cgitb](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемые библиотеки `cgi` и `cgitb` из PyPI.638- `crypt` и закрытое расширение `_crypt`. Модуль [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib) может стать подходящей заменой, если требуется простое хеширование значения. В противном случае доступны различные сторонние библиотеки на PyPI:639640 - [bcrypt](https://python-all.ru/3.16/whatsnew/3.13.html): Современное хеширование паролей для вашего ПО и серверов.641 - [argon2-cffi](https://python-all.ru/3.16/whatsnew/3.13.html): Безопасный алгоритм хеширования паролей Argon2.642 - [legacycrypt](https://python-all.ru/3.16/whatsnew/3.13.html): Обёртка [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes) для вызова библиотеки POSIX crypt и связанной функциональности.643 - [crypt\_r](https://python-all.ru/3.16/whatsnew/3.13.html): Fork of the `crypt` module, wrapper to the *[crypt\_r(3)](https://python-all.ru/3.16/whatsnew/3.13.html)* library call and associated functionality.644 - [standard-crypt](https://python-all.ru/3.16/whatsnew/3.13.html) и [deprecated-crypt-alternative](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространение библиотеки `crypt` и повторную реализацию библиотеки `_crypt` из PyPI.645- `imghdr`: Библиотеки [filetype](https://python-all.ru/3.16/whatsnew/3.13.html), [puremagic](https://python-all.ru/3.16/whatsnew/3.13.html) или [python-magic](https://python-all.ru/3.16/whatsnew/3.13.html) следует использовать в качестве замены. Например, функцию `puremagic.what()` можно использовать для замены функции `imghdr.what()` для всех форматов файлов, поддерживаемых `imghdr`.646647 - [standard-imghdr](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `imghdr` из PyPI.648- `mailcap`: Вместо этого используйте модуль [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes).649650 - [standard-mailcap](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `mailcap` из PyPI.651- `msilib`652- `nis`653- `nntplib`: Вместо этого используйте библиотеку [pynntp](https://python-all.ru/3.16/whatsnew/3.13.html) из PyPI.654655 - [standard-nntplib](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `nntplib` из PyPI.656- `ossaudiodev`: Для воспроизведения аудио используйте библиотеку [pygame](https://python-all.ru/3.16/whatsnew/3.13.html) из PyPI.657- `pipes`: Используйте модуль [`subprocess`](https://python-all.ru/3.16/library/subprocess.html#module-subprocess) вместо этого. Используйте [`shlex.quote()`](https://python-all.ru/3.16/library/shlex.html#shlex.quote) для замены недокументированной функции `pipes.quote`.658659 - [standard-pipes](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `pipes` из PyPI.660- `sndhdr`: Библиотеки [filetype](https://python-all.ru/3.16/whatsnew/3.13.html), [puremagic](https://python-all.ru/3.16/whatsnew/3.13.html) или [python-magic](https://python-all.ru/3.16/whatsnew/3.13.html) следует использовать в качестве замены.661662 - [standard-sndhdr](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `sndhdr` из PyPI.663- `spwd`: Вместо этого используйте библиотеку [python-pam](https://python-all.ru/3.16/whatsnew/3.13.html) из PyPI.664- `sunau`665666 - [standard-sunau](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `sunau` из PyPI.667- `telnetlib`, Вместо этого используйте библиотеки [telnetlib3](https://python-all.ru/3.16/whatsnew/3.13.html) или [Exscript](https://python-all.ru/3.16/whatsnew/3.13.html) из PyPI.668669 - [standard-telnetlib](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `telnetlib` из PyPI.670- `uu`: Вместо этого используйте модуль [`base64`](https://python-all.ru/3.16/library/base64.html#module-base64) в качестве современной альтернативы.671672 - [standard-uu](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `uu` из PyPI.673- `xdrlib`674675 - [standard-xdrlib](https://python-all.ru/3.16/whatsnew/3.13.html): Используйте перераспространяемую библиотеку `xdrlib` из PyPI.676677(Предложено Виктором Стиннером и Закари Уэром в [gh-104773](https://python-all.ru/3.16/whatsnew/3.13.html) и [gh-104780](https://python-all.ru/3.16/whatsnew/3.13.html).)678679### 2to3680681- Удалите программу **2to3** и модуль `lib2to3`, ранее объявленные устаревшими в Python 3.11. (Предложено Виктором Стиннером в [gh-104780](https://python-all.ru/3.16/whatsnew/3.13.html).)682683### builtins684685- Удалена поддержка цепочечных дескрипторов [`classmethod`](https://python-all.ru/3.16/library/functions.html#classmethod) (добавленных в [gh-63272](https://python-all.ru/3.16/whatsnew/3.13.html)). Их больше нельзя использовать для обёртывания других дескрипторов, таких как [`property`](https://python-all.ru/3.16/library/functions.html#property). Основная архитектура этой возможности была ошибочной и привела к нескольким проблемам. Чтобы «пропустить» `classmethod`, рассмотрите возможность использования атрибута `__wrapped__`, добавленного в Python 3.10. (Предложено Рэймондом Хеттингером в [gh-89519](https://python-all.ru/3.16/whatsnew/3.13.html).)686- Возбуждать [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError) при вызове [`frame.clear()`](https://python-all.ru/3.16/reference/datamodel.html#frame.clear) на приостановленном фрейме (как это всегда было для выполняющегося фрейма). (Предложено Ирит Катриэль в [gh-79932](https://python-all.ru/3.16/whatsnew/3.13.html).)687688### configparser689690- Удалён недокументированный класс `LegacyInterpolation`, устаревший в строке документации с Python 3.2 и во время выполнения с Python 3.11. (Автор: Hugo van Kemenade в [gh-104886](https://python-all.ru/3.16/whatsnew/3.13.html).)691692### importlib.metadata693694- Удалён устаревший доступ по индексу ([`__getitem__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__getitem__)) для объектов [EntryPoint](https://python-all.ru/3.16/library/importlib.metadata.html#entry-points). (Автор: Jason R. Coombs в [gh-113175](https://python-all.ru/3.16/whatsnew/3.13.html).)695696### locale697698- Удалена функция `locale.resetlocale()`, устаревшая в Python 3.11. Вместо неё используйте `locale.setlocale(locale.LC_ALL, "")`. (Автор: Victor Stinner в [gh-104783](https://python-all.ru/3.16/whatsnew/3.13.html).)699700### opcode701702- Перенесён `opcode.ENABLE_SPECIALIZATION` в `_opcode.ENABLE_SPECIALIZATION`. Это поле было добавлено в 3.12, никогда не документировалось и не предназначено для внешнего использования. (Автор: Irit Katriel в [gh-105481](https://python-all.ru/3.16/whatsnew/3.13.html).)703- Удалены `opcode.is_pseudo()`, `opcode.MIN_PSEUDO_OPCODE` и `opcode.MAX_PSEUDO_OPCODE`, которые были добавлены в Python 3.12, но не были документированы, не были доступны через [`dis`](https://python-all.ru/3.16/library/dis.html#module-dis) и не предназначались для внешнего использования. (Автор: Irit Katriel в [gh-105481](https://python-all.ru/3.16/whatsnew/3.13.html).)704705### optparse706707- Этот модуль больше не считается [условно устаревшим](https://python-all.ru/3.16/glossary.html#term-soft-deprecated). Хотя [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse) остаётся предпочтительным для новых проектов, не использующих сторонние библиотеки обработки аргументов командной строки, в работе `argparse` есть аспекты, из-за которых модуль нижнего уровня `optparse` может служить лучшей основой для *написания* библиотек обработки аргументов и для реализации приложений командной строки, которые более строго, чем `argparse`, соблюдают различные соглашения Unix по обработке командной строки, берущие начало в поведении C-функции `getopt()`. (Авторы: Alyssa Coghlan и Serhiy Storchaka в [gh-126180](https://python-all.ru/3.16/whatsnew/3.13.html).)708709### pathlib710711- Удалена возможность использовать объекты [`Path`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path) в качестве контекстных менеджеров. Эта возможность была объявлена устаревшей и не имела эффекта с Python 3.9. (Автор: Barney Gale в [gh-83863](https://python-all.ru/3.16/whatsnew/3.13.html).)712713### re714715- Удалены недокументированные, устаревшие и неработающие функция `re.template()` и флаг `re.TEMPLATE` / `re.T`. (Авторы: Serhiy Storchaka и Nikita Sobolev в [gh-105687](https://python-all.ru/3.16/whatsnew/3.13.html).)716717### tkinter.tix718719- Удалён модуль `tkinter.tix`, устаревший в Python 3.6. Сторонняя библиотека Tix, которую оборачивал этот модуль, больше не поддерживается. (Автор: Zachary Ware в [gh-75552](https://python-all.ru/3.16/whatsnew/3.13.html).)720721### turtle722723- Удалён метод `RawTurtle.settiltangle()`, помеченный как устаревший в документации с Python 3.1 и во время выполнения с Python 3.11. (Автор: Hugo van Kemenade в [gh-104876](https://python-all.ru/3.16/whatsnew/3.13.html).)724725### typing726727- Удалены пространства имён `typing.io` и `typing.re`, устаревшие с Python 3.8. Элементы из этих пространств имён можно импортировать напрямую из модуля [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing). (Автор: Sebastian Rittau в [gh-92871](https://python-all.ru/3.16/whatsnew/3.13.html).)728- Удалён способ создания типов [`TypedDict`](https://python-all.ru/3.16/library/typing.html#typing.TypedDict) с помощью именованных аргументов, устаревший в Python 3.11. (Автор: Tomas Roun в [gh-104786](https://python-all.ru/3.16/whatsnew/3.13.html).)729730### unittest731732- Удалены следующие функции [`unittest`](https://python-all.ru/3.16/library/unittest.html#module-unittest), устаревшие в Python 3.11:733734 - `unittest.findTestCases()`735 - `unittest.makeSuite()`736 - `unittest.getTestCaseNames()`737738 Вместо них используйте методы [`TestLoader`](https://python-all.ru/3.16/library/unittest.html#unittest.TestLoader):739740 - [`loadTestsFromModule()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestLoader.loadTestsFromModule)741 - [`loadTestsFromTestCase()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestLoader.loadTestsFromTestCase)742 - [`getTestCaseNames()`](https://python-all.ru/3.16/library/unittest.html#unittest.TestLoader.getTestCaseNames)743744 (Автор: Hugo van Kemenade в [gh-104835](https://python-all.ru/3.16/whatsnew/3.13.html).)745- Удалён непроверенный и недокументированный метод `TestProgram.usageExit()`, устаревший в Python 3.11. (Автор: Hugo van Kemenade в [gh-104992](https://python-all.ru/3.16/whatsnew/3.13.html).)746747### urllib748749- Удалены параметры *cafile*, *capath* и *cadefault* функции [`urllib.request.urlopen()`](https://python-all.ru/3.16/library/urllib.request.html#urllib.request.urlopen), устаревшие в Python 3.6. Вместо них используйте параметр *context* с экземпляром [`SSLContext`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext). Функция [`ssl.SSLContext.load_cert_chain()`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext.load_cert_chain) может использоваться для загрузки конкретных сертификатов, или можно позволить [`ssl.create_default_context()`](https://python-all.ru/3.16/library/ssl.html#ssl.create_default_context) выбрать доверенные сертификаты центра сертификации (CA) операционной системы. (Автор: Victor Stinner в [gh-105382](https://python-all.ru/3.16/whatsnew/3.13.html).)750751### webbrowser752753- Удалён непроверенный и недокументированный класс `MacOSX`, устаревший в Python 3.11. Вместо него используйте класс `MacOSXOSAScript` (представленный в Python 3.2). (Автор: Hugo van Kemenade в [gh-104804](https://python-all.ru/3.16/whatsnew/3.13.html).)754- Удалён устаревший атрибут `MacOSXOSAScript._name`. Вместо него используйте атрибут [`MacOSXOSAScript.name`](https://python-all.ru/3.16/library/webbrowser.html#webbrowser.controller.name). (Автор: Nikita Sobolev в [gh-105546](https://python-all.ru/3.16/whatsnew/3.13.html).)755756## Новые устаревания757758- [Пользовательские функции](https://python-all.ru/3.16/reference/datamodel.html#user-defined-funcs):759760 - Устарело присваивание атрибуту [`__code__`](https://python-all.ru/3.16/reference/datamodel.html#function.__code__) функции, если тип нового объекта кода не совпадает с типом функции. Различные типы: обычная функция, генератор, асинхронный генератор и корутина. (Автор: Irit Katriel в [gh-81137](https://python-all.ru/3.16/whatsnew/3.13.html).)761- [`array`](https://python-all.ru/3.16/library/array.html#module-array):762763 - Устарел код формата `'u'` (`wchar_t`) во время выполнения. Этот код формата был объявлен устаревшим в документации начиная с Python 3.3 и будет удалён в Python 3.16. Вместо него используйте код формата `'w'` ([`Py_UCS4`](https://python-all.ru/3.16/c-api/unicode.html#c.Py_UCS4)) для символов Unicode. (Автор: Hugo van Kemenade в [gh-80480](https://python-all.ru/3.16/whatsnew/3.13.html).)764- [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes):765766 - Устарела недокументированная функция `SetPointerType()`, будет удалена в Python 3.15. (Автор: Victor Stinner в [gh-105733](https://python-all.ru/3.16/whatsnew/3.13.html).)767 - [Мягкое устаревание](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) функции [`ARRAY()`](https://python-all.ru/3.16/library/ctypes.html#ctypes.ARRAY) в пользу умножения `type * length`. (Автор: Victor Stinner в [gh-105733](https://python-all.ru/3.16/whatsnew/3.13.html).)768- [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal):769770 - Устарел нестандартный и недокументированный спецификатор формата [`Decimal`](https://python-all.ru/3.16/library/decimal.html#decimal.Decimal) `'N'`, который поддерживается только в C-реализации модуля `decimal`. Запланировано удаление в Python 3.18. (Автор: Serhiy Storchaka в [gh-89902](https://python-all.ru/3.16/whatsnew/3.13.html).)771- [`dis`](https://python-all.ru/3.16/library/dis.html#module-dis):772773 - Устарел разделитель `HAVE_ARGUMENT`. Вместо этого проверяйте принадлежность с помощью [`hasarg`](https://python-all.ru/3.16/library/dis.html#dis.hasarg). (Автор: Irit Katriel в [gh-109319](https://python-all.ru/3.16/whatsnew/3.13.html).)774- [`gettext`](https://python-all.ru/3.16/library/gettext.html#module-gettext):775776 - Устарела передача нецелых чисел в аргументы функций и методов, которые учитывают формы множественного числа в модуле `gettext`, даже если перевод не найден. (Автор: Serhiy Storchaka в [gh-88434](https://python-all.ru/3.16/whatsnew/3.13.html).)777- [`glob`](https://python-all.ru/3.16/library/glob.html#module-glob):778779 - Устарели недокументированные функции `glob0()` и `glob1()`. Вместо них используйте [`glob()`](https://python-all.ru/3.16/library/glob.html#glob.glob) и передавайте [объект, подобный пути](https://python-all.ru/3.16/glossary.html#term-path-like-object), указывающий корневой каталог, в параметр *root\_dir* вместо. (Автор: Barney Gale в [gh-117337](https://python-all.ru/3.16/whatsnew/3.13.html).)780- [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server):781782 - Устарел `CGIHTTPRequestHandler`, будет удалён в Python 3.15. CGI HTTP-серверы на основе процессов уже очень давно не пользуются популярностью. Этот код был устаревшим, неподдерживаемым и редко использовался. Он имеет высокий потенциал как для ошибок безопасности, так и для функциональных ошибок. (Автор: Gregory P. Smith в [gh-109096](https://python-all.ru/3.16/whatsnew/3.13.html).)783 - Устарел флаг `--cgi` в интерфейсе командной строки **python -m http.server**, будет удалён в Python 3.15. (Автор: Gregory P. Smith в [gh-109096](https://python-all.ru/3.16/whatsnew/3.13.html).)784- [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes):785786 - [Мягкое устаревание](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) аргументов пути к файлу для [`guess_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_type), используйте вместо него [`guess_file_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.guess_file_type). (Автор: Serhiy Storchaka в [gh-66543](https://python-all.ru/3.16/whatsnew/3.13.html).)787- [`re`](https://python-all.ru/3.16/library/re.html#module-re):788789 - Устарела передача необязательных аргументов *maxsplit*, *count* или *flags* в качестве позиционных аргументов в функции на уровне модуля [`split()`](https://python-all.ru/3.16/library/re.html#re.split), [`sub()`](https://python-all.ru/3.16/library/re.html#re.sub) и [`subn()`](https://python-all.ru/3.16/library/re.html#re.subn). Эти параметры станут [только ключевыми](https://python-all.ru/3.16/glossary.html#keyword-only-parameter) в будущей версии Python. (Автор: Serhiy Storchaka в [gh-56166](https://python-all.ru/3.16/whatsnew/3.13.html).)790- [`pathlib`](https://python-all.ru/3.16/library/pathlib.html#module-pathlib):791792 - Устарел `.PurePath.is_reserved()`, будет удалён в Python 3.15. Используйте [`os.path.isreserved()`](https://python-all.ru/3.16/library/os.path.html#os.path.isreserved) для обнаружения зарезервированных путей в Windows. (Автор: Barney Gale в [gh-88569](https://python-all.ru/3.16/whatsnew/3.13.html).)793- [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform):794795 - Устарел `platform.java_ver()`, будет удалён в Python 3.15. Эта функция полезна только для поддержки Jython, имеет запутанный API и в значительной степени не тестировалась. (Автор: Nikita Sobolev в [gh-116349](https://python-all.ru/3.16/whatsnew/3.13.html).)796- [`pydoc`](https://python-all.ru/3.16/library/pydoc.html#module-pydoc):797798 - Устарела недокументированная функция `ispackage()`. (Автор: Zackery Spytz в [gh-64020](https://python-all.ru/3.16/whatsnew/3.13.html).)799- [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3):800801 - Устарела передача более одного позиционного аргумента в функцию [`connect()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.connect) и конструктор [`Connection`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection). Остальные параметры станут только ключевыми в Python 3.15. (Автор: Erlend E. Aasland в [gh-107948](https://python-all.ru/3.16/whatsnew/3.13.html).)802 - Устарела передача имени, количества аргументов и вызываемого объекта в качестве ключевых аргументов для [`Connection.create_function()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.create_function) и [`Connection.create_aggregate()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.create_aggregate) Эти параметры станут только позиционными в Python 3.15. (Автор: Erlend E. Aasland в [gh-108278](https://python-all.ru/3.16/whatsnew/3.13.html).)803 - Устарела передача вызываемого колбэка по ключу для методов [`set_authorizer()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.set_authorizer), [`set_progress_handler()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.set_progress_handler) и [`set_trace_callback()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection.set_trace_callback) [`Connection`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Connection). Вызываемые колбэки станут только позиционными в Python 3.15. (Автор: Erlend E. Aasland в [gh-108278](https://python-all.ru/3.16/whatsnew/3.13.html).)804- [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys):805806 - Устарела функция `_enablelegacywindowsfsencoding()`, будет удалена в Python 3.16. Вместо неё используйте переменную окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSFSENCODING). (Автор: Inada Naoki в [gh-73427](https://python-all.ru/3.16/whatsnew/3.13.html).)807- [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile):808809 - Устарел недокументированный и неиспользуемый атрибут `TarInfo.tarfile`, будет удалён в Python 3.16. (Автор: в [gh-115256](https://python-all.ru/3.16/whatsnew/3.13.html).)810- [`traceback`](https://python-all.ru/3.16/library/traceback.html#module-traceback):811812 - Устарел атрибут [`TracebackException.exc_type`](https://python-all.ru/3.16/library/traceback.html#traceback.TracebackException.exc_type). Вместо него используйте [`TracebackException.exc_type_str`](https://python-all.ru/3.16/library/traceback.html#traceback.TracebackException.exc_type_str). (Автор: Irit Katriel в [gh-112332](https://python-all.ru/3.16/whatsnew/3.13.html).)813- [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing):814815 - Устарел недокументированный синтаксис ключевых аргументов для создания классов [`NamedTuple`](https://python-all.ru/3.16/library/typing.html#typing.NamedTuple) (например, `Point = NamedTuple("Point", x=int, y=int)`), будет удалён в Python 3.15. Вместо этого используйте синтаксис на основе класса или функциональный синтаксис. (Автор: Alex Waygood в [gh-105566](https://python-all.ru/3.16/whatsnew/3.13.html).)816 - Устарел пропуск параметра *fields* при создании класса [`NamedTuple`](https://python-all.ru/3.16/library/typing.html#typing.NamedTuple) или [`typing.TypedDict`](https://python-all.ru/3.16/library/typing.html#typing.TypedDict), а также устарела передача `None` в параметр *fields* обоих типов. Python 3.15 потребует допустимую последовательность для параметра *fields*. Чтобы создать класс NamedTuple с нулевым количеством полей, используйте `class NT(NamedTuple): pass` или `NT = NamedTuple("NT", ())`. Чтобы создать класс TypedDict с нулевым количеством полей, используйте `class TD(TypedDict): pass` или `TD = TypedDict("TD", {})`. (Автор: Alex Waygood в [gh-105566](https://python-all.ru/3.16/whatsnew/3.13.html) и [gh-105570](https://python-all.ru/3.16/whatsnew/3.13.html).)817 - Устарела функция-декоратор `@typing.no_type_check_decorator`, будет удалена в Python 3.15. После восьми лет в модуле [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing) она так и не была поддержана ни одним крупным средством проверки типов. (Автор: Alex Waygood в [gh-106309](https://python-all.ru/3.16/whatsnew/3.13.html).)818 - Устарел [`typing.AnyStr`](https://python-all.ru/3.16/library/typing.html#typing.AnyStr). В Python 3.16 он будет удалён из `typing.__all__`, и во время выполнения будет выдаваться [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning) при его импорте или обращении к нему. Полностью он будет удалён в Python 3.18. Вместо него используйте новый [синтаксис параметров типа](https://python-all.ru/3.16/reference/compound_stmts.html#type-params). (Автор: Michael The в [gh-107116](https://python-all.ru/3.16/whatsnew/3.13.html).)819- [`wave`](https://python-all.ru/3.16/library/wave.html#module-wave):820821 - Методы `getmark()`, `setmark()` и `getmarkers()` классов [`Wave_read`](https://python-all.ru/3.16/library/wave.html#wave.Wave_read) и [`Wave_write`](https://python-all.ru/3.16/library/wave.html#wave.Wave_write) объявлены устаревшими и будут удалены в Python 3.15. (Автор: Victor Stinner, [gh-105096](https://python-all.ru/3.16/whatsnew/3.13.html).)822823### Ожидается удаление в Python 3.14824825- [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse): Параметры *type*, *choices* и *metavar* функции `argparse.BooleanOptionalAction` устарели и будут удалены в версии 3.14. (Автор: Nikita Sobolev в [gh-92248](https://python-all.ru/3.16/whatsnew/3.13.html).)826- [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast): Следующие возможности были объявлены устаревшими в документации начиная с Python 3.8, теперь при обращении к ним или их использовании во время выполнения вызывается [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning), и они будут удалены в Python 3.14:827828 - `ast.Num`829 - `ast.Str`830 - `ast.Bytes`831 - `ast.NameConstant`832 - `ast.Ellipsis`833834 Вместо этого используйте [`ast.Constant`](https://python-all.ru/3.16/library/ast.html#ast.Constant). (Автор: Serhiy Storchaka в [gh-90953](https://python-all.ru/3.16/whatsnew/3.13.html).)835- [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio):836837 - Классы наблюдателя дочерних процессов `asyncio.MultiLoopChildWatcher`, `asyncio.FastChildWatcher`, `asyncio.AbstractChildWatcher` и `asyncio.SafeChildWatcher` устарели и будут удалены в Python 3.14. (Автор: Kumar Aditya в [gh-94597](https://python-all.ru/3.16/whatsnew/3.13.html).)838 - `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](https://python-all.ru/3.16/whatsnew/3.13.html).)839 - Метод [`get_event_loop()`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.get_event_loop) политики цикла событий по умолчанию теперь генерирует [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning), если текущий цикл событий не установлен и он решает создать новый. (Авторы: Serhiy Storchaka и Guido van Rossum, [gh-100160](https://python-all.ru/3.16/whatsnew/3.13.html).)840- [`email`](https://python-all.ru/3.16/library/email.html#module-email): объявлен устаревшим параметр *isdst* в [`email.utils.localtime()`](https://python-all.ru/3.16/library/email.utils.html#email.utils.localtime). (Автор: Alan Williams, [gh-72346](https://python-all.ru/3.16/whatsnew/3.13.html).)841- [`importlib.abc`](https://python-all.ru/3.16/library/importlib.html#module-importlib.abc) устаревшие классы:842843 - `importlib.abc.ResourceReader`844 - `importlib.abc.Traversable`845 - `importlib.abc.TraversableResources`846847 Вместо них используйте классы [`importlib.resources.abc`](https://python-all.ru/3.16/library/importlib.resources.abc.html#module-importlib.resources.abc):848849 - [`importlib.resources.abc.Traversable`](https://python-all.ru/3.16/library/importlib.resources.abc.html#importlib.resources.abc.Traversable)850 - [`importlib.resources.abc.TraversableResources`](https://python-all.ru/3.16/library/importlib.resources.abc.html#importlib.resources.abc.TraversableResources)851852 (Авторы: Jason R. Coombs и Hugo van Kemenade в [gh-93963](https://python-all.ru/3.16/whatsnew/3.13.html).)853- [`itertools`](https://python-all.ru/3.16/library/itertools.html#module-itertools) имел недокументированную, неэффективную, исторически ошибочную и непоследовательную поддержку операций copy, deepcopy и pickle. Это будет удалено в версии 3.14 для значительного сокращения объёма кода и нагрузки по сопровождению. (Автор: Raymond Hettinger, [gh-101588](https://python-all.ru/3.16/whatsnew/3.13.html).)854- [`multiprocessing`](https://python-all.ru/3.16/library/multiprocessing.html#module-multiprocessing): метод запуска по умолчанию изменится на более безопасный на Linux, BSD и других POSIX-платформах (кроме macOS), где в настоящее время по умолчанию используется `'fork'` ([gh-84559](https://python-all.ru/3.16/whatsnew/3.13.html)). Добавление предупреждения во время выполнения было сочтено слишком деструктивным, так как большинству кода это не важно. Используйте API [`get_context()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.get_context) или [`set_start_method()`](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing.set_start_method), чтобы явно указать, когда код *требует* `'fork'`. См. [Контексты и методы запуска](https://python-all.ru/3.16/library/multiprocessing.html#multiprocessing-start-methods).855- [`pathlib`](https://python-all.ru/3.16/library/pathlib.html#module-pathlib): [`is_relative_to()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.PurePath.is_relative_to) и [`relative_to()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.PurePath.relative_to): передача дополнительных аргументов объявлена устаревшей.856- [`pkgutil`](https://python-all.ru/3.16/library/pkgutil.html#module-pkgutil): `pkgutil.find_loader()` и `pkgutil.get_loader()` теперь вызывают [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning); используйте [`importlib.util.find_spec()`](https://python-all.ru/3.16/library/importlib.html#importlib.util.find_spec) вместо этого. (Автор: Nikita Sobolev, [gh-97850](https://python-all.ru/3.16/whatsnew/3.13.html).)857- [`pty`](https://python-all.ru/3.16/library/pty.html#module-pty):858859 - `master_open()`: используйте [`pty.openpty()`](https://python-all.ru/3.16/library/pty.html#pty.openpty).860 - `slave_open()`: используйте [`pty.openpty()`](https://python-all.ru/3.16/library/pty.html#pty.openpty).861- [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3):862863 - `version` и `version_info`.864 - [`execute()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Cursor.execute) и [`executemany()`](https://python-all.ru/3.16/library/sqlite3.html#sqlite3.Cursor.executemany), если используются [именованные заполнители](https://python-all.ru/3.16/library/sqlite3.html#sqlite3-placeholders) и *параметры* являются последовательностью, а не [`dict`](https://python-all.ru/3.16/library/stdtypes.html#dict).865- [`urllib`](https://python-all.ru/3.16/library/urllib.html#module-urllib): `urllib.parse.Quoter` объявлен устаревшим: он не был задуман как публичный API. (Автор: Gregory P. Smith, [gh-88168](https://python-all.ru/3.16/whatsnew/3.13.html).)866867### Ожидается удаление в Python 3.15868869- Система импорта:870871 - Установка `__cached__` в модуле без установки [`__spec__.cached`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec.cached) считается устаревшей. Начиная с Python 3.15 `__cached__` больше не будет устанавливаться или учитываться системой импорта или стандартной библиотекой. ([gh-97879](https://python-all.ru/3.16/whatsnew/3.13.html))872- [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes):873874 - Незадокументированная функция `ctypes.SetPointerType()` считается устаревшей начиная с Python 3.13.875- [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server):876877 - Устаревшая и редко используемая `CGIHTTPRequestHandler` считается устаревшей начиная с Python 3.13. Прямой замены не существует. *Что угодно* лучше, чем CGI, для взаимодействия веб-сервера с обработчиком запросов.878 - Флаг `--cgi` для **python -m http.server** интерфейса командной строки считается устаревшим начиная с Python 3.13.879- [`importlib`](https://python-all.ru/3.16/library/importlib.html#module-importlib):880881 - Метод `load_module()`: вместо него используйте `exec_module()`.882- [`pathlib`](https://python-all.ru/3.16/library/pathlib.html#module-pathlib):883884 - `.PurePath.is_reserved()` считается устаревшим начиная с Python 3.13. Используйте [`os.path.isreserved()`](https://python-all.ru/3.16/library/os.path.html#os.path.isreserved) для обнаружения зарезервированных путей в Windows.885- [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform):886887 - `platform.java_ver()` считается устаревшим начиная с Python 3.13. Эта функция полезна только для поддержки Jython, имеет запутанный API и в значительной степени не тестировалась.888- [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig):889890 - Аргумент *check\_home* функции [`sysconfig.is_python_build()`](https://python-all.ru/3.16/library/sysconfig.html#sysconfig.is_python_build) считается устаревшим начиная с Python 3.12.891- [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading):892893 - [`RLock()`](https://python-all.ru/3.16/library/threading.html#threading.RLock) не будет принимать аргументов в Python 3.15. Передача любых аргументов считается устаревшей начиная с Python 3.14, поскольку версия на Python не допускает никаких аргументов, но версия на C позволяет любое количество позиционных или именованных аргументов, игнорируя все аргументы.894- [`types`](https://python-all.ru/3.16/library/types.html#module-types):895896 - [`types.CodeType`](https://python-all.ru/3.16/library/types.html#types.CodeType): доступ к `codeobject.co_lnotab` был объявлен устаревшим в [**PEP 626**](https://python-all.ru/3.16/whatsnew/3.13.html) начиная с версии 3.10 и планировался к удалению в 3.12, но получил надлежащий [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning) только в 3.12. Может быть удалён в 3.15. (Предложено Никитой Соболевым в [gh-101866](https://python-all.ru/3.16/whatsnew/3.13.html).)897- [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing):898899 - Незадокументированный синтаксис именованных аргументов для создания классов [`NamedTuple`](https://python-all.ru/3.16/library/typing.html#typing.NamedTuple) (например, `Point = NamedTuple("Point", x=int, y=int)`) считается устаревшим начиная с Python 3.13. Вместо этого используйте синтаксис на основе классов или функциональный синтаксис.900 - При использовании функционального синтаксиса [`TypedDict`](https://python-all.ru/3.16/library/typing.html#typing.TypedDict), отсутствие передачи значения параметру *поля* (`TD = TypedDict("TD")`) или передача `None` (`TD = TypedDict("TD", None)`) считается устаревшим начиная с Python 3.13. Используйте `class TD(TypedDict): pass` или `TD = TypedDict("TD", {})` для создания TypedDict без полей.901 - Функция-декоратор `@typing.no_type_check_decorator` считается устаревшей начиная с Python 3.13. За восемь лет в модуле [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing) она так и не была поддержана ни одним крупным средством проверки типов.902- Модули `sre_compile`, `sre_constants` и `sre_parse`.903- [`wave`](https://python-all.ru/3.16/library/wave.html#module-wave):904905 - Методы `getmark()`, `setmark()` и `getmarkers()` классов [`Wave_read`](https://python-all.ru/3.16/library/wave.html#wave.Wave_read) и [`Wave_write`](https://python-all.ru/3.16/library/wave.html#wave.Wave_write) считаются устаревшими начиная с Python 3.13.906- [`zipimport`](https://python-all.ru/3.16/library/zipimport.html#module-zipimport):907908 - `zipimport.zipimporter.load_module()` считается устаревшим начиная с Python 3.10. Вместо него используйте [`exec_module()`](https://python-all.ru/3.16/library/zipimport.html#zipimport.zipimporter.exec_module). ([gh-125746](https://python-all.ru/3.16/whatsnew/3.13.html).)909910### Запланировано к удалению в Python 3.16911912- Система импорта:913914 - Установка [`__loader__`](https://python-all.ru/3.16/reference/datamodel.html#module.__loader__) в модуле при отсутствии [`__spec__.loader`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec.loader) устарела. В Python 3.16 `__loader__` перестанет устанавливаться или учитываться системой импорта или стандартной библиотекой.915 - Установка [`__package__`](https://python-all.ru/3.16/reference/datamodel.html#module.__package__) в модуле при отсутствии [`__spec__.parent`](https://python-all.ru/3.16/library/importlib.html#importlib.machinery.ModuleSpec.parent) устарела. В Python 3.16 `__package__` перестанет устанавливаться или учитываться системой импорта или стандартной библиотекой. ([gh-97879](https://python-all.ru/3.16/whatsnew/3.13.html))916- Встроенная копия `libmpdec`.917- [`array`](https://python-all.ru/3.16/library/array.html#module-array):918919 - Код формата `'u'` (`wchar_t`) устарел в документации начиная с Python 3.3 и во время выполнения начиная с Python 3.13. Используйте код формата `'w'` ([`Py_UCS4`](https://python-all.ru/3.16/c-api/unicode.html#c.Py_UCS4)) для символов Unicode.920- [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio):921922 - `asyncio.iscoroutinefunction()` устарело и будет удалено в Python 3.16; используйте [`inspect.iscoroutinefunction()`](https://python-all.ru/3.16/library/inspect.html#inspect.iscoroutinefunction) вместо этого. (Предложено Jiahao Li и Kumar Aditya в [gh-122875](https://python-all.ru/3.16/whatsnew/3.13.html).)923 - Система политик [`asyncio`](https://python-all.ru/3.16/library/asyncio.html#module-asyncio) устарела и будет удалена в Python 3.16. В частности, следующие классы и функции устарели:924925 - `asyncio.AbstractEventLoopPolicy`926 - `asyncio.DefaultEventLoopPolicy`927 - `asyncio.WindowsSelectorEventLoopPolicy`928 - `asyncio.WindowsProactorEventLoopPolicy`929 - `asyncio.get_event_loop_policy()`930 - `asyncio.set_event_loop_policy()`931932 Для использования нужной реализации цикла событий следует применять [`asyncio.run()`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.run) или [`asyncio.Runner`](https://python-all.ru/3.16/library/asyncio-runner.html#asyncio.Runner) с параметром *loop\_factory*.933934 Например, чтобы использовать [`asyncio.SelectorEventLoop`](https://python-all.ru/3.16/library/asyncio-eventloop.html#asyncio.SelectorEventLoop) в Windows:935936 ```python937 import asyncio938939 async def main():940 ...941942 asyncio.run(main(), loop_factory=asyncio.SelectorEventLoop)943 ```944945 (Предложено Kumar Aditya в [gh-127949](https://python-all.ru/3.16/whatsnew/3.13.html).)946- [`builtins`](https://python-all.ru/3.16/library/builtins.html#module-builtins):947948 - Поразрядная инверсия для булевых типов, `~True` или `~False` устарела начиная с Python 3.12, поскольку даёт неожиданные и неинтуитивные результаты (`-2` и `-1`). Используйте `not x` для логического отрицания булевого значения. В редких случаях, когда требуется поразрядная инверсия базового целого числа, явно преобразуйте в `int` (`~int(x)`).949- [`functools`](https://python-all.ru/3.16/library/functools.html#module-functools):950951 - Вызов реализации [`functools.reduce()`](https://python-all.ru/3.16/library/functools.html#functools.reduce) на Python с *function* или *sequence* в качестве именованных аргументов устарел начиная с Python 3.14.952- [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging):953954 - Поддержка пользовательских обработчиков логирования с аргументом *strm* устарела и запланирована к удалению в Python 3.16. Вместо этого определяйте обработчики с аргументом *stream*. (Предложено Mariusz Felisiak в [gh-115032](https://python-all.ru/3.16/whatsnew/3.13.html).)955- [`mimetypes`](https://python-all.ru/3.16/library/mimetypes.html#module-mimetypes):956957 - Допустимые расширения начинаются с точки ‘.’ или пусты для [`mimetypes.MimeTypes.add_type()`](https://python-all.ru/3.16/library/mimetypes.html#mimetypes.MimeTypes.add_type). Расширения без точки устарели и будут вызывать [`ValueError`](https://python-all.ru/3.16/library/exceptions.html#ValueError) в Python 3.16. (Предложено Hugo van Kemenade в [gh-75223](https://python-all.ru/3.16/whatsnew/3.13.html).)958- [`shutil`](https://python-all.ru/3.16/library/shutil.html#module-shutil):959960 - Исключение `ExecError` устарело начиная с Python 3.14. Оно не используется ни одной функцией в `shutil` начиная с Python 3.4 и теперь является псевдонимом [`RuntimeError`](https://python-all.ru/3.16/library/exceptions.html#RuntimeError).961- [`symtable`](https://python-all.ru/3.16/library/symtable.html#module-symtable):962963 - Метод `symtable.Class.get_methods()` устарел начиная с Python 3.14.964- [`sys`](https://python-all.ru/3.16/library/sys.html#module-sys):965966 - Функция `_enablelegacywindowsfsencoding()` устарела начиная с Python 3.13. Используйте переменную окружения [`PYTHONLEGACYWINDOWSFSENCODING`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONLEGACYWINDOWSFSENCODING).967- [`sysconfig`](https://python-all.ru/3.16/library/sysconfig.html#module-sysconfig):968969 - Функция `sysconfig.expand_makefile_vars()` устарела начиная с Python 3.14. Используйте аргумент `vars` из [`sysconfig.get_paths()`](https://python-all.ru/3.16/library/sysconfig.html#sysconfig.get_paths).970- [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile):971972 - Недокументированный и неиспользуемый атрибут `TarInfo.tarfile` устарел начиная с Python 3.13.973974### Запланировано к удалению в Python 3.17975976- [`datetime`](https://python-all.ru/3.16/library/datetime.html#module-datetime):977978 - [`strptime()`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime.strptime) вызовы со строкой формата, содержащей `%e` (день месяца) без указания года. Это объявлено устаревшим начиная с Python 3.15. (Автор: Stan Ulbrych в [gh-70647](https://python-all.ru/3.16/whatsnew/3.13.html).)979- [`collections.abc`](https://python-all.ru/3.16/library/collections.abc.html#module-collections.abc):980981 - [`collections.abc.ByteString`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.ByteString) запланирован к удалению в Python 3.17.982983 Используйте `isinstance(obj, collections.abc.Buffer)` для проверки, реализует ли `obj` [протокол буфера](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects) во время выполнения. Для использования в аннотациях типов используйте [`Buffer`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.Buffer) или объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, `bytes | bytearray | memoryview`).984985 `ByteString` изначально задумывался как абстрактный класс, который должен был служить супертипом как для [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), так и для [`bytearray`](https://python-all.ru/3.16/library/stdtypes.html#bytearray). Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром `ByteString`, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview), также никогда не рассматривались как подтипы `ByteString` (ни во время выполнения, ни статическими проверками типов).986987 См. [**PEP 688**](https://python-all.ru/3.16/whatsnew/3.13.html) для получения подробностей. (Автор: Shantanu Jain в [gh-91896](https://python-all.ru/3.16/whatsnew/3.13.html).)988- [`encodings`](https://python-all.ru/3.16/library/codecs.html#module-encodings):989990 - Передача *кодировок*, не являющихся ASCII, в [`encodings.normalize_encoding()`](https://python-all.ru/3.16/library/codecs.html#encodings.normalize_encoding) объявлена устаревшей и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в [gh-136702](https://python-all.ru/3.16/whatsnew/3.13.html).)991- [`webbrowser`](https://python-all.ru/3.16/library/webbrowser.html#module-webbrowser):992993 - `webbrowser.MacOSXOSAScript` объявлен устаревшим в пользу `webbrowser.MacOS`. ([gh-137586](https://python-all.ru/3.16/whatsnew/3.13.html))994- [`typing`](https://python-all.ru/3.16/library/typing.html#module-typing):995996 - До Python 3.14 старые объединения реализовывались с помощью приватного класса `typing._UnionGenericAlias`. Этот класс больше не нужен для реализации, но он сохранён для обратной совместимости, его удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные средства интроспекции, такие как [`typing.get_origin()`](https://python-all.ru/3.16/library/typing.html#typing.get_origin) и [`typing.get_args()`](https://python-all.ru/3.16/library/typing.html#typing.get_args), вместо того чтобы полагаться на детали приватной реализации.997 - [`typing.ByteString`](https://python-all.ru/3.16/library/typing.html#typing.ByteString), устаревший с Python 3.9, запланирован к удалению в Python 3.17.998999 Используйте `isinstance(obj, collections.abc.Buffer)` для проверки, реализует ли `obj` [протокол буфера](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects) во время выполнения. Для использования в аннотациях типов используйте [`Buffer`](https://python-all.ru/3.16/library/collections.abc.html#collections.abc.Buffer) или объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, `bytes | bytearray | memoryview`).10001001 `ByteString` изначально задумывался как абстрактный класс, который должен был служить супертипом как для [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), так и для [`bytearray`](https://python-all.ru/3.16/library/stdtypes.html#bytearray). Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром `ByteString`, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как [`memoryview`](https://python-all.ru/3.16/library/stdtypes.html#memoryview), также никогда не рассматривались как подтипы `ByteString` (ни во время выполнения, ни статическими проверками типов).10021003 См. [**PEP 688**](https://python-all.ru/3.16/whatsnew/3.13.html) для получения подробностей. (Автор: Shantanu Jain в [gh-91896](https://python-all.ru/3.16/whatsnew/3.13.html).)1004- [`tkinter`](https://python-all.ru/3.16/library/tkinter.html#module-tkinter):10051006 - Методы `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](https://python-all.ru/3.16/whatsnew/3.13.html).)10071008### Запланировано удаление в Python 3.1810091010- Больше не принимает логическое значение, если ожидается файловый дескриптор. (Автор: Serhiy Storchaka в [gh-82626](https://python-all.ru/3.16/whatsnew/3.13.html).)1011- [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal):10121013 - Нестандартный и недокументированный [`Decimal`](https://python-all.ru/3.16/library/decimal.html#decimal.Decimal) спецификатор формата `'N'`, который поддерживается только в реализации C модуля `decimal`, устарел с Python 3.13. (Автор: Serhiy Storchaka в [gh-89902](https://python-all.ru/3.16/whatsnew/3.13.html).)1014- Устаревшие элементы, определённые [**PEP 829**](https://python-all.ru/3.16/whatsnew/3.13.html):10151016 - Строки `import` в файлах `name.pth` молча игнорируются.10171018 (Вклад: Barry Warsaw в [gh-148641](https://python-all.ru/3.16/whatsnew/3.13.html).)10191020### Запланировано к удалению в Python 3.1910211022- [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes):10231024 - Неявное переключение на совместимую с MSVC структуру путём установки [`_pack_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._pack_) без [`_layout_`](https://python-all.ru/3.16/library/ctypes.html#ctypes.Structure._layout_) на платформах, отличных от Windows.1025- [`hashlib`](https://python-all.ru/3.16/library/hashlib.html#module-hashlib):10261027 - В конструкторах хеш-функций, таких как [`new()`](https://python-all.ru/3.16/library/hashlib.html#hashlib.new), или прямых конструкторах, названных по имени хеша, таких как [`md5()`](https://python-all.ru/3.16/library/hashlib.html#hashlib.md5) и [`sha256()`](https://python-all.ru/3.16/library/hashlib.html#hashlib.sha256), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именем `data=` или `string=` в различных реализациях `hashlib`.10281029 Поддержка имени именованного аргумента `string` теперь устарела и будет удалена в Python 3.19.10301031 До Python 3.13 именованный параметр `string` не поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.1032- [`http.cookies`](https://python-all.ru/3.16/library/http.cookies.html#module-http.cookies):10331034 - [`http.cookies.Morsel.js_output()`](https://python-all.ru/3.16/library/http.cookies.html#http.cookies.Morsel.js_output) устарело и будет удалено в Python 3.19.1035 - [`http.cookies.BaseCookie.js_output()`](https://python-all.ru/3.16/library/http.cookies.html#http.cookies.BaseCookie.js_output) устарело и будет удалено в Python 3.19.1036- [`imaplib`](https://python-all.ru/3.16/library/imaplib.html#module-imaplib):10371038 - Изменение [`IMAP4.file`](https://python-all.ru/3.16/library/imaplib.html#imaplib.IMAP4.file) теперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.10391040 До Python 3.14 это свойство использовалось для реализации соответствующих методов `read()` и `readline()` для [`IMAP4`](https://python-all.ru/3.16/library/imaplib.html#imaplib.IMAP4), но с тех пор это уже не так.10411042### Ожидается удаление в Python 3.2010431044- Вызов метода `__new__()` объекта [`struct.Struct`](https://python-all.ru/3.16/library/struct.html#struct.Struct) без аргумента *format* устарел и будет удалён в Python 3.20. Вызов [`__init__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__init__) метода для инициализированных объектов `Struct` устарел и будет удалён в Python 3.20.10451046 (Вклад: Sergey B Kirpichev и Serhiy Storchaka в [gh-143715](https://python-all.ru/3.16/whatsnew/3.13.html).)1047- Атрибуты `__version__`, `version` и `VERSION` были объявлены устаревшими в этих модулях стандартной библиотеки и будут удалены в Python 3.20. Вместо них используйте [`sys.version_info`](https://python-all.ru/3.16/library/sys.html#sys.version_info).10481049 - [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse)1050 - [`csv`](https://python-all.ru/3.16/library/csv.html#module-csv)1051 - [`ctypes`](https://python-all.ru/3.16/library/ctypes.html#module-ctypes)1052 - `ctypes.macholib`1053 - [`decimal`](https://python-all.ru/3.16/library/decimal.html#module-decimal) (используйте [`decimal.SPEC_VERSION`](https://python-all.ru/3.16/library/decimal.html#decimal.SPEC_VERSION) вместо)1054 - [`http.server`](https://python-all.ru/3.16/library/http.server.html#module-http.server)1055 - [`imaplib`](https://python-all.ru/3.16/library/imaplib.html#module-imaplib)1056 - [`ipaddress`](https://python-all.ru/3.16/library/ipaddress.html#module-ipaddress)1057 - [`json`](https://python-all.ru/3.16/library/json.html#module-json)1058 - [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging) (`__date__` также устарел)1059 - [`optparse`](https://python-all.ru/3.16/library/optparse.html#module-optparse)1060 - [`pickle`](https://python-all.ru/3.16/library/pickle.html#module-pickle)1061 - [`platform`](https://python-all.ru/3.16/library/platform.html#module-platform)1062 - [`re`](https://python-all.ru/3.16/library/re.html#module-re)1063 - [`socketserver`](https://python-all.ru/3.16/library/socketserver.html#module-socketserver)1064 - [`tabnanny`](https://python-all.ru/3.16/library/tabnanny.html#module-tabnanny)1065 - [`tarfile`](https://python-all.ru/3.16/library/tarfile.html#module-tarfile)1066 - [`tkinter.font`](https://python-all.ru/3.16/library/tkinter.font.html#module-tkinter.font)1067 - [`tkinter.ttk`](https://python-all.ru/3.16/library/tkinter.ttk.html#module-tkinter.ttk)1068 - [`wsgiref.simple_server`](https://python-all.ru/3.16/library/wsgiref.html#module-wsgiref.simple_server)1069 - [`xml.etree.ElementTree`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#module-xml.etree.ElementTree)1070 - `xml.sax.expatreader`1071 - [`xml.sax.handler`](https://python-all.ru/3.16/library/xml.sax.handler.html#module-xml.sax.handler)1072 - [`zlib`](https://python-all.ru/3.16/library/zlib.html#module-zlib)10731074 (Вклад: Hugo van Kemenade и Stan Ulbrych в [gh-76007](https://python-all.ru/3.16/whatsnew/3.13.html).)1075- Устаревшие элементы, определённые [**PEP 829**](https://python-all.ru/3.16/whatsnew/3.13.html):10761077 - Предупреждения выводятся для строк `import`, найденных в `name.pth` файлах.1078 - Файлы `name.pth` больше не декодируются в кодировке локали по умолчанию. Они **ДОЛЖНЫ** быть закодированы в `utf-8-sig`.10791080 (Вклад: Barry Warsaw в [gh-148641](https://python-all.ru/3.16/whatsnew/3.13.html).)1081- [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast):10821083 - Создание экземпляров абстрактных узлов AST (таких как [`ast.AST`](https://python-all.ru/3.16/library/ast.html#ast.AST) или `ast.expr`) устарело и будет вызывать ошибку в Python 3.20.10841085### Ожидается удаление в Python 3.2110861087- [`abc`](https://python-all.ru/3.16/library/abc.html#module-abc)10881089 > - Мягко устаревшие с Python 3.3 [`abc.abstractclassmethod`](https://python-all.ru/3.16/library/abc.html#abc.abstractclassmethod), [`abc.abstractstaticmethod`](https://python-all.ru/3.16/library/abc.html#abc.abstractstaticmethod) и [`abc.abstractproperty`](https://python-all.ru/3.16/library/abc.html#abc.abstractproperty) теперь вызывают [`DeprecationWarning`](https://python-all.ru/3.16/library/exceptions.html#DeprecationWarning). Эти классы будут удалены в Python 3.21, вместо них используйте [`abc.abstractmethod()`](https://python-all.ru/3.16/library/abc.html#abc.abstractmethod) с [`classmethod()`](https://python-all.ru/3.16/library/functions.html#classmethod), [`staticmethod()`](https://python-all.ru/3.16/library/functions.html#staticmethod) и [`property`](https://python-all.ru/3.16/library/functions.html#property) соответственно.1090- [`ast`](https://python-all.ru/3.16/library/ast.html#module-ast):10911092 - Классы `slice`, `Index`, `ExtSlice`, `Suite`, `Param`, `AugLoad` и `AugStore` будут удалены в Python 3.21. Эти типы не создаются синтаксическим анализатором и не принимаются генератором кода.1093 - Свойство `dims` объекта `ast.Tuple` будет удалено в Python 3.21. Используйте свойство `ast.Tuple.elts` вместо него.1094- [`struct`](https://python-all.ru/3.16/library/struct.html#module-struct):10951096 - Мягко устаревшие с Python 3.15, коды типов `'F'` и `'D'` теперь устарели. Эти коды будут удалены в Python 3.21. Используйте вместо них двухбуквенные формы `'Zf'` и `'Zd'`.1097- [`tempfile`](https://python-all.ru/3.16/library/tempfile.html#module-tempfile):10981099 - `tempfile._TemporaryFileWrapper` будет удалён в Python 3.21. Используйте публичный [`tempfile.TemporaryFileWrapper`](https://python-all.ru/3.16/library/tempfile.html#tempfile.TemporaryFileWrapper) вместо него.11001101### Будет удалено в будущих версиях11021103Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.11041105- [`argparse`](https://python-all.ru/3.16/library/argparse.html#module-argparse):11061107 - Вложение групп аргументов и вложение взаимоисключающих групп устарело.1108 - Передача недокументированного именованного аргумента *prefix\_chars* в [`add_argument_group()`](https://python-all.ru/3.16/library/argparse.html#argparse.ArgumentParser.add_argument_group) теперь устарела.1109 - Конвертер типов [`argparse.FileType`](https://python-all.ru/3.16/library/argparse.html#argparse.FileType) устарел.1110- [`builtins`](https://python-all.ru/3.16/library/builtins.html#module-builtins):11111112 - Генераторы: сигнатура `throw(type, exc, tb)` и `athrow(type, exc, tb)` устарела: используйте `throw(exc)` и `athrow(exc)` вместо неё, сигнатуру с одним аргументом.1113 - В настоящее время Python принимает числовые литералы, за которыми сразу следуют ключевые слова, например `0in x`, `1or x`, `0if 1else 2`. Это допускает запутанные и неоднозначные выражения вроде `[0x1for x in y]` (которое может быть интерпретировано как `[0x1 for x in y]` или `[0x1f or x in y]`). Выдаётся предупреждение синтаксиса, если за числовым литералом сразу следует одно из ключевых слов [`and`](https://python-all.ru/3.16/reference/expressions.html#and), [`else`](https://python-all.ru/3.16/reference/compound_stmts.html#else), [`for`](https://python-all.ru/3.16/reference/compound_stmts.html#for), [`if`](https://python-all.ru/3.16/reference/compound_stmts.html#if), [`in`](https://python-all.ru/3.16/reference/expressions.html#in), [`is`](https://python-all.ru/3.16/reference/expressions.html#is) и [`or`](https://python-all.ru/3.16/reference/expressions.html#or). В будущем выпуске это будет изменено на синтаксическую ошибку. ([gh-87999](https://python-all.ru/3.16/whatsnew/3.13.html))1114 - Поддержка методов `__index__()` и `__int__()`, возвращающих не-int тип: эти методы должны будут возвращать экземпляр строгого подкласса [`int`](https://python-all.ru/3.16/library/functions.html#int).1115 - Поддержка метода `__float__()`, возвращающего строгий подкласс [`float`](https://python-all.ru/3.16/library/functions.html#float): эти методы должны будут возвращать экземпляр `float`.1116 - Поддержка метода `__complex__()`, возвращающего строгий подкласс [`complex`](https://python-all.ru/3.16/library/functions.html#complex): эти методы должны будут возвращать экземпляр `complex`.1117 - Передача комплексного числа в качестве аргумента *real* или *imag* в конструкторе [`complex()`](https://python-all.ru/3.16/library/functions.html#complex) теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в [gh-109218](https://python-all.ru/3.16/whatsnew/3.13.html).)1118- [`calendar`](https://python-all.ru/3.16/library/calendar.html#module-calendar): константы `calendar.January` и `calendar.February` устарели и заменены на [`calendar.JANUARY`](https://python-all.ru/3.16/library/calendar.html#calendar.JANUARY) и [`calendar.FEBRUARY`](https://python-all.ru/3.16/library/calendar.html#calendar.FEBRUARY). (Автор: Prince Roshan в [gh-103636](https://python-all.ru/3.16/whatsnew/3.13.html).)1119- [`codecs`](https://python-all.ru/3.16/library/codecs.html#module-codecs): используйте [`open()`](https://python-all.ru/3.16/library/functions.html#open) вместо [`codecs.open()`](https://python-all.ru/3.16/library/codecs.html#codecs.open). ([gh-133038](https://python-all.ru/3.16/whatsnew/3.13.html))1120- `codeobject.co_lnotab`: используйте метод [`codeobject.co_lines()`](https://python-all.ru/3.16/reference/datamodel.html#codeobject.co_lines) вместо этого.1121- [`datetime`](https://python-all.ru/3.16/library/datetime.html#module-datetime):11221123 - [`utcnow()`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime.utcnow): используйте `datetime.datetime.now(tz=datetime.UTC)`.1124 - [`utcfromtimestamp()`](https://python-all.ru/3.16/library/datetime.html#datetime.datetime.utcfromtimestamp): используйте `datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)`.1125- [`gettext`](https://python-all.ru/3.16/library/gettext.html#module-gettext): значение множественного числа должно быть целым числом.1126- [`importlib`](https://python-all.ru/3.16/library/importlib.html#module-importlib):11271128 - [`cache_from_source()`](https://python-all.ru/3.16/library/importlib.html#importlib.util.cache_from_source): параметр *debug\_override* устарел: используйте параметр *optimization* вместо него.1129- [`importlib.metadata`](https://python-all.ru/3.16/library/importlib.metadata.html#module-importlib.metadata):11301131 - `EntryPoints`: интерфейс кортежа.1132 - Неявное `None` для возвращаемых значений.1133- [`logging`](https://python-all.ru/3.16/library/logging.html#module-logging): метод `warn()` устарел начиная с Python 3.3, используйте [`warning()`](https://python-all.ru/3.16/library/logging.html#logging.warning) вместо него.1134- [`mailbox`](https://python-all.ru/3.16/library/mailbox.html#module-mailbox): использование StringIO в режиме ввода и текстовом режиме устарело, используйте BytesIO и двоичный режим.1135- [`os`](https://python-all.ru/3.16/library/os.html#module-os): вызов [`os.register_at_fork()`](https://python-all.ru/3.16/library/os.html#os.register_at_fork) в многопоточном процессе.1136- [`os.path`](https://python-all.ru/3.16/library/os.path.html#module-os.path): [`os.path.commonprefix()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonprefix) устарела, используйте [`os.path.commonpath()`](https://python-all.ru/3.16/library/os.path.html#os.path.commonpath) для префиксов путей. Функция `os.path.commonprefix()` объявлена устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то что находится в модуле для работы с путями, что означает, что легко случайно внести уязвимости обхода путей в программы на Python, используя эту функцию.1137- `pydoc.ErrorDuringImport`: кортежное значение для параметра *exc\_info* устарело, используйте экземпляр исключения.1138- [`re`](https://python-all.ru/3.16/library/re.html#module-re): теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в [gh-91760](https://python-all.ru/3.16/whatsnew/3.13.html).)1139- [`shutil`](https://python-all.ru/3.16/library/shutil.html#module-shutil): параметр *onerror* метода [`rmtree()`](https://python-all.ru/3.16/library/shutil.html#shutil.rmtree) устарел в Python 3.12; используйте параметр *onexc* вместо него.1140- [`ssl`](https://python-all.ru/3.16/library/ssl.html#module-ssl): опции и протоколы:11411142 - [`ssl.SSLContext`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext) без аргумента протокол устарело.1143 - [`ssl.SSLContext`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext): [`set_npn_protocols()`](https://python-all.ru/3.16/library/ssl.html#ssl.SSLContext.set_npn_protocols) и `selected_npn_protocol()` устарели: используйте ALPN вместо них.1144 - `ssl.OP_NO_SSL*`: опции1145 - `ssl.OP_NO_TLS*`: опции1146 - `ssl.PROTOCOL_SSLv3`1147 - `ssl.PROTOCOL_TLS`1148 - `ssl.PROTOCOL_TLSv1`1149 - `ssl.PROTOCOL_TLSv1_1`1150 - `ssl.PROTOCOL_TLSv1_2`1151 - `ssl.TLSVersion.SSLv3`1152 - `ssl.TLSVersion.TLSv1`1153 - `ssl.TLSVersion.TLSv1_1`1154- [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading): методы11551156 - `threading.Condition.notifyAll()`: используйте [`notify_all()`](https://python-all.ru/3.16/library/threading.html#threading.Condition.notify_all).1157 - `threading.Event.isSet()`: используйте [`is_set()`](https://python-all.ru/3.16/library/threading.html#threading.Event.is_set).1158 - `threading.Thread.isDaemon()`, [`threading.Thread.setDaemon()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.setDaemon): используйте атрибут [`threading.Thread.daemon`](https://python-all.ru/3.16/library/threading.html#threading.Thread.daemon).1159 - `threading.Thread.getName()`, [`threading.Thread.setName()`](https://python-all.ru/3.16/library/threading.html#threading.Thread.setName): используйте атрибут [`threading.Thread.name`](https://python-all.ru/3.16/library/threading.html#threading.Thread.name).1160 - `threading.currentThread()`: используйте [`threading.current_thread()`](https://python-all.ru/3.16/library/threading.html#threading.current_thread).1161 - `threading.activeCount()`: используйте [`threading.active_count()`](https://python-all.ru/3.16/library/threading.html#threading.active_count).1162- [`typing.Text`](https://python-all.ru/3.16/library/typing.html#typing.Text) ([gh-92332](https://python-all.ru/3.16/whatsnew/3.13.html)).1163- Внутренний класс `typing._UnionGenericAlias` больше не используется для реализации [`typing.Union`](https://python-all.ru/3.16/library/typing.html#typing.Union). Для сохранения совместимости с пользователями, использующими этот закрытый класс, будет предоставлена прослойка совместимости как минимум до Python 3.17. (Автор: Jelle Zijlstra, [gh-105499](https://python-all.ru/3.16/whatsnew/3.13.html).)1164- [`unittest.IsolatedAsyncioTestCase`](https://python-all.ru/3.16/library/unittest.html#unittest.IsolatedAsyncioTestCase): возврат значения, не являющегося `None`, из тестового примера устарел.1165- [`urllib.parse`](https://python-all.ru/3.16/library/urllib.parse.html#module-urllib.parse) устаревшие функции: используйте [`urlparse()`](https://python-all.ru/3.16/library/urllib.parse.html#urllib.parse.urlparse) вместо них.11661167 - `splitattr()`1168 - `splithost()`1169 - `splitnport()`1170 - `splitpasswd()`1171 - `splitport()`1172 - `splitquery()`1173 - `splittag()`1174 - `splittype()`1175 - `splituser()`1176 - `splitvalue()`1177 - `to_bytes()`1178- [`wsgiref`](https://python-all.ru/3.16/library/wsgiref.html#module-wsgiref): `SimpleHandler.stdout.write()` не должна выполнять частичную запись.1179- [`xml.etree.ElementTree`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#module-xml.etree.ElementTree): проверка истинностного значения [`Element`](https://python-all.ru/3.16/library/xml.etree.elementtree.html#xml.etree.ElementTree.Element) устарела. В будущем выпуске она всегда будет возвращать `True`. Вместо этого используйте явные проверки `len(elem)` или `elem is not None`.1180- [`sys._clear_type_cache()`](https://python-all.ru/3.16/library/sys.html#sys._clear_type_cache) устарело: используйте [`sys._clear_internal_caches()`](https://python-all.ru/3.16/library/sys.html#sys._clear_internal_caches) вместо него.11811182## Изменения байт-кода CPython11831184- Аргумент oparg инструкции [`YIELD_VALUE`](https://python-all.ru/3.16/library/dis.html#opcode-YIELD_VALUE) теперь равен `1`, если yield является частью yield-from или await, и `0` в противном случае. Аргумент oparg инструкции [`RESUME`](https://python-all.ru/3.16/library/dis.html#opcode-RESUME) был изменён: добавлен бит, указывающий, равна ли глубина except 1, что необходимо для оптимизации закрытия генераторов. (Автор: Irit Katriel, [gh-111354](https://python-all.ru/3.16/whatsnew/3.13.html).)11851186## Изменения C API11871188### Новые возможности11891190- Добавлен [C API PyMonitoring](https://python-all.ru/3.16/c-api/monitoring.html#c-api-monitoring) для генерации событий мониторинга [**PEP 669**](https://python-all.ru/3.16/whatsnew/3.13.html):11911192 - [`PyMonitoringState`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoringState)1193 - [`PyMonitoring_FirePyStartEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FirePyStartEvent)1194 - [`PyMonitoring_FirePyResumeEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FirePyResumeEvent)1195 - [`PyMonitoring_FirePyReturnEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FirePyReturnEvent)1196 - [`PyMonitoring_FirePyYieldEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FirePyYieldEvent)1197 - [`PyMonitoring_FireCallEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireCallEvent)1198 - [`PyMonitoring_FireLineEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireLineEvent)1199 - [`PyMonitoring_FireJumpEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireJumpEvent)1200 - `PyMonitoring_FireBranchEvent`1201 - [`PyMonitoring_FireCReturnEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireCReturnEvent)1202 - [`PyMonitoring_FirePyThrowEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FirePyThrowEvent)1203 - [`PyMonitoring_FireRaiseEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireRaiseEvent)1204 - [`PyMonitoring_FireCRaiseEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireCRaiseEvent)1205 - [`PyMonitoring_FireReraiseEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireReraiseEvent)1206 - [`PyMonitoring_FireExceptionHandledEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireExceptionHandledEvent)1207 - [`PyMonitoring_FirePyUnwindEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FirePyUnwindEvent)1208 - [`PyMonitoring_FireStopIterationEvent()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_FireStopIterationEvent)1209 - [`PyMonitoring_EnterScope()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_EnterScope)1210 - [`PyMonitoring_ExitScope()`](https://python-all.ru/3.16/c-api/monitoring.html#c.PyMonitoring_ExitScope)12111212 (Автор: Irit Katriel, [gh-111997](https://python-all.ru/3.16/whatsnew/3.13.html)).1213- Добавлена [`PyMutex`](https://python-all.ru/3.16/c-api/synchronization.html#c.PyMutex) – легковесная мьютекс-блокировка, занимающая один байт, а также новые функции [`PyMutex_Lock()`](https://python-all.ru/3.16/c-api/synchronization.html#c.PyMutex_Lock) и [`PyMutex_Unlock()`](https://python-all.ru/3.16/c-api/synchronization.html#c.PyMutex_Unlock). `PyMutex_Lock()` освободит [GIL](https://python-all.ru/3.16/glossary.html#term-GIL) (если он удерживается в данный момент), если операции необходимо заблокироваться. (Автор: Sam Gross, [gh-108724](https://python-all.ru/3.16/whatsnew/3.13.html).)1214- Добавлен [C API PyTime](https://python-all.ru/3.16/c-api/time.html#c-api-time) для предоставления доступа к системным часам:12151216 - [`PyTime_t`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_t).1217 - [`PyTime_MIN`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_MIN) и [`PyTime_MAX`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_MAX).1218 - [`PyTime_AsSecondsDouble()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_AsSecondsDouble).1219 - [`PyTime_Monotonic()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_Monotonic).1220 - [`PyTime_MonotonicRaw()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_MonotonicRaw).1221 - [`PyTime_PerfCounter()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_PerfCounter).1222 - [`PyTime_PerfCounterRaw()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_PerfCounterRaw).1223 - [`PyTime_Time()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_Time).1224 - [`PyTime_TimeRaw()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_TimeRaw).12251226 (Авторы: Victor Stinner и Petr Viktorin, [gh-110850](https://python-all.ru/3.16/whatsnew/3.13.html).)1227- Добавлена функция [`PyDict_ContainsString()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_ContainsString) с тем же поведением, что и [`PyDict_Contains()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_Contains), но *key* задаётся как строка байтов в кодировке UTF-8 типа const char\*, а не [PyObject](https://python-all.ru/3.16/c-api/structures.html#c.PyObject)\*. (Автор: Victor Stinner, [gh-108314](https://python-all.ru/3.16/whatsnew/3.13.html).)1228- Добавлены функции [`PyDict_GetItemRef()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemRef) и [`PyDict_GetItemStringRef()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemStringRef), которые ведут себя аналогично [`PyDict_GetItemWithError()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemWithError), но возвращают [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) вместо [заимствованной ссылки](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). Кроме того, эти функции возвращают `-1` при ошибке, что устраняет необходимость проверять `PyErr_Occurred()`. (Автор: Victor Stinner, [gh-106004](https://python-all.ru/3.16/whatsnew/3.13.html).)1229- Добавлена функция [`PyDict_SetDefaultRef()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_SetDefaultRef), которая ведёт себя аналогично [`PyDict_SetDefault()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_SetDefault), но возвращает [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) вместо [заимствованной ссылки](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). Эта функция возвращает `-1` при ошибке, `0` при вставке и `1`, если ключ уже присутствовал в словаре. (Автор: Sam Gross, [gh-112066](https://python-all.ru/3.16/whatsnew/3.13.html).)1230- Добавлены функции [`PyDict_Pop()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_Pop) и [`PyDict_PopString()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_PopString) для удаления ключа из словаря с возможностью возврата удалённого значения. Это похоже на [`dict.pop()`](https://python-all.ru/3.16/library/stdtypes.html#dict.pop), но без значения по умолчанию, и [`KeyError`](https://python-all.ru/3.16/library/exceptions.html#KeyError) не вызывается для отсутствующих ключей. (Авторы: Stefan Behnel и Victor Stinner, [gh-111262](https://python-all.ru/3.16/whatsnew/3.13.html).)1231- Добавлены функции [`PyMapping_GetOptionalItem()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_GetOptionalItem) и [`PyMapping_GetOptionalItemString()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_GetOptionalItemString) как альтернативы [`PyObject_GetItem()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_GetItem) и [`PyMapping_GetItemString()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_GetItemString) соответственно. Новые функции не вызывают [`KeyError`](https://python-all.ru/3.16/library/exceptions.html#KeyError), если запрошенный ключ отсутствует в отображении. Эти варианты удобнее и быстрее, если отсутствие ключа не должно считаться ошибкой. (Автор: Serhiy Storchaka, [gh-106307](https://python-all.ru/3.16/whatsnew/3.13.html).)1232- Добавлены функции [`PyObject_GetOptionalAttr()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_GetOptionalAttr) и [`PyObject_GetOptionalAttrString()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_GetOptionalAttrString) как альтернативы [`PyObject_GetAttr()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_GetAttr) и [`PyObject_GetAttrString()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_GetAttrString) соответственно. Новые функции не вызывают [`AttributeError`](https://python-all.ru/3.16/library/exceptions.html#AttributeError), если запрошенный атрибут не найден у объекта. Эти варианты удобнее и быстрее, если отсутствие атрибута не должно считаться ошибкой. (Автор: Serhiy Storchaka, [gh-106521](https://python-all.ru/3.16/whatsnew/3.13.html).)1233- Добавлена функция [`PyErr_FormatUnraisable()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_FormatUnraisable) как расширение [`PyErr_WriteUnraisable()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_WriteUnraisable), позволяющее настраивать сообщение предупреждения. (Автор: Serhiy Storchaka, [gh-108082](https://python-all.ru/3.16/whatsnew/3.13.html).)1234- Добавлены новые функции, которые возвращают [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) вместо [заимствованной ссылки](https://python-all.ru/3.16/glossary.html#term-borrowed-reference) для локальных переменных фрейма, глобальных и встроенных объектов, в рамках [PEP 667](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-locals-semantics):12351236 - [`PyEval_GetFrameBuiltins()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetFrameBuiltins) заменяет [`PyEval_GetBuiltins()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetBuiltins)1237 - [`PyEval_GetFrameGlobals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetFrameGlobals) заменяет [`PyEval_GetGlobals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetGlobals)1238 - [`PyEval_GetFrameLocals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetFrameLocals) заменяет [`PyEval_GetLocals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetLocals)12391240 (Авторы: Марк Шеннон и Тянь Гао в [gh-74929](https://python-all.ru/3.16/whatsnew/3.13.html).)1241- Добавлены функции [`Py_GetConstant()`](https://python-all.ru/3.16/c-api/object.html#c.Py_GetConstant) и [`Py_GetConstantBorrowed()`](https://python-all.ru/3.16/c-api/object.html#c.Py_GetConstantBorrowed) для получения [сильных](https://python-all.ru/3.16/glossary.html#term-strong-reference) или [заёмных](https://python-all.ru/3.16/glossary.html#term-borrowed-reference) ссылок на константы. Например, `Py_GetConstant(Py_CONSTANT_ZERO)` возвращает сильную ссылку на константу ноль. (Автор: Виктор Стиннер в [gh-115754](https://python-all.ru/3.16/whatsnew/3.13.html).)1242- Добавлена функция [`PyImport_AddModuleRef()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_AddModuleRef) как замена [`PyImport_AddModule()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_AddModule), возвращающая [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) вместо [заёмной ссылки](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). (Автор: Виктор Стиннер в [gh-105922](https://python-all.ru/3.16/whatsnew/3.13.html).)1243- Добавлена функция [`Py_IsFinalizing()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_IsFinalizing) для проверки, [завершается ли](https://python-all.ru/3.16/glossary.html#term-interpreter-shutdown) основной интерпретатор Python. (Автор: Виктор Стиннер в [gh-108014](https://python-all.ru/3.16/whatsnew/3.13.html).)1244- Добавлена функция [`PyList_GetItemRef()`](https://python-all.ru/3.16/c-api/list.html#c.PyList_GetItemRef) как замена [`PyList_GetItem()`](https://python-all.ru/3.16/c-api/list.html#c.PyList_GetItem), возвращающая [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) вместо [заёмной ссылки](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). (Автор: Сэм Гросс в [gh-114329](https://python-all.ru/3.16/whatsnew/3.13.html).)1245- Добавлены функции [`PyList_Extend()`](https://python-all.ru/3.16/c-api/list.html#c.PyList_Extend) и [`PyList_Clear()`](https://python-all.ru/3.16/c-api/list.html#c.PyList_Clear), соответствующие методам Python [`list.extend()`](https://python-all.ru/3.16/library/stdtypes.html#list.extend) и [`list.clear()`](https://python-all.ru/3.16/library/stdtypes.html#list.clear). (Автор: Виктор Стиннер в [gh-111138](https://python-all.ru/3.16/whatsnew/3.13.html).)1246- Добавлена функция [`PyLong_AsInt()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsInt). Она ведёт себя аналогично [`PyLong_AsLong()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsLong), но сохраняет результат в C int вместо C long. (Автор: Виктор Стиннер в [gh-108014](https://python-all.ru/3.16/whatsnew/3.13.html).)1247- Добавлены функции [`PyLong_AsNativeBytes()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsNativeBytes), [`PyLong_FromNativeBytes()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FromNativeBytes) и [`PyLong_FromUnsignedNativeBytes()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_FromUnsignedNativeBytes) для упрощения преобразования между нативными целочисленными типами и объектами Python [`int`](https://python-all.ru/3.16/library/functions.html#int). (Автор: Стив Дауэр в [gh-111140](https://python-all.ru/3.16/whatsnew/3.13.html).)1248- Добавлена функция [`PyModule_Add()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_Add), похожая на [`PyModule_AddObjectRef()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_AddObjectRef) и [`PyModule_AddObject()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_AddObject), но всегда крадущая ссылку на значение. (Автор: Сергей Сторчака в [gh-86493](https://python-all.ru/3.16/whatsnew/3.13.html).)1249- Добавлена функция [`PyObject_GenericHash()`](https://python-all.ru/3.16/c-api/hash.html#c.PyObject_GenericHash), реализующая хеш-функцию по умолчанию для объекта Python. (Автор: Сергей Сторчака в [gh-113024](https://python-all.ru/3.16/whatsnew/3.13.html).)1250- Добавлена функция [`Py_HashPointer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashPointer) для хеширования сырого указателя. (Автор: Виктор Стиннер в [gh-111545](https://python-all.ru/3.16/whatsnew/3.13.html).)1251- Добавлены функции [`PyObject_VisitManagedDict()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_VisitManagedDict) и [`PyObject_ClearManagedDict()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_ClearManagedDict). Они должны вызываться функциями traverse и clear типа, использующего флаг [`Py_TPFLAGS_MANAGED_DICT`](https://python-all.ru/3.16/c-api/typeobj.html#c.Py_TPFLAGS_MANAGED_DICT). [Проект pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать для применения этих функций с Python 3.11 и 3.12. (Автор: Виктор Стиннер в [gh-107073](https://python-all.ru/3.16/whatsnew/3.13.html).)1252- Добавлены функции [`PyRefTracer_SetTracer()`](https://python-all.ru/3.16/c-api/profiling.html#c.PyRefTracer_SetTracer) и [`PyRefTracer_GetTracer()`](https://python-all.ru/3.16/c-api/profiling.html#c.PyRefTracer_GetTracer), позволяющие отслеживать создание и уничтожение объектов так же, как это делает модуль [`tracemalloc`](https://python-all.ru/3.16/library/tracemalloc.html#module-tracemalloc). (Автор: Пабло Галиндо в [gh-93502](https://python-all.ru/3.16/whatsnew/3.13.html).)1253- Добавлена функция [`PySys_AuditTuple()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_AuditTuple) как альтернатива [`PySys_Audit()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_Audit), принимающая аргументы события как объект Python [`tuple`](https://python-all.ru/3.16/library/stdtypes.html#tuple). (Автор: Виктор Стиннер в [gh-85283](https://python-all.ru/3.16/whatsnew/3.13.html).)1254- Добавлена функция [`PyThreadState_GetUnchecked()`](https://python-all.ru/3.16/c-api/threads.html#c.PyThreadState_GetUnchecked) как альтернатива [`PyThreadState_Get()`](https://python-all.ru/3.16/c-api/threads.html#c.PyThreadState_Get), которая не завершает процесс фатальной ошибкой, если она `NULL`. Вызывающий код отвечает за проверку, является ли результат `NULL`. (Автор: Виктор Стиннер в [gh-108867](https://python-all.ru/3.16/whatsnew/3.13.html).)1255- Добавлена функция [`PyType_GetFullyQualifiedName()`](https://python-all.ru/3.16/c-api/type.html#c.PyType_GetFullyQualifiedName) для получения полного квалифицированного имени типа. Имя модуля добавляется, если [`type.__module__`](https://python-all.ru/3.16/reference/datamodel.html#type.__module__) является строкой и не равна ни `'builtins'`, ни `'__main__'`. (Автор: Виктор Стиннер в [gh-111696](https://python-all.ru/3.16/whatsnew/3.13.html).)1256- Добавлена функция [`PyType_GetModuleName()`](https://python-all.ru/3.16/c-api/type.html#c.PyType_GetModuleName) для получения имени модуля типа. Это эквивалентно получению атрибута [`type.__module__`](https://python-all.ru/3.16/reference/datamodel.html#type.__module__). (Авторы: Эрик Сноу и Виктор Стиннер в [gh-111696](https://python-all.ru/3.16/whatsnew/3.13.html).)1257- Добавлены функции [`PyUnicode_EqualToUTF8AndSize()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_EqualToUTF8AndSize) и [`PyUnicode_EqualToUTF8()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_EqualToUTF8) для сравнения объекта Unicode с const char\* строкой в кодировке UTF-8 и `1`, если они равны, или `0` в противном случае. Эти функции не вызывают исключений. (Автор: Сергей Сторчака в [gh-110289](https://python-all.ru/3.16/whatsnew/3.13.html).)1258- Добавлена функция [`PyWeakref_GetRef()`](https://python-all.ru/3.16/c-api/weakref.html#c.PyWeakref_GetRef) как альтернатива `PyWeakref_GetObject()`, возвращающая [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference) или `NULL`, если объект больше не существует. (Автор: Виктор Стиннер в [gh-105927](https://python-all.ru/3.16/whatsnew/3.13.html).)1259- Добавлены исправленные варианты функций, которые молча игнорируют ошибки:12601261 - [`PyObject_HasAttrWithError()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_HasAttrWithError) заменяет [`PyObject_HasAttr()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_HasAttr).1262 - [`PyObject_HasAttrStringWithError()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_HasAttrStringWithError) заменяет [`PyObject_HasAttrString()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_HasAttrString).1263 - [`PyMapping_HasKeyWithError()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_HasKeyWithError) заменяет [`PyMapping_HasKey()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_HasKey).1264 - [`PyMapping_HasKeyStringWithError()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_HasKeyStringWithError) заменяет [`PyMapping_HasKeyString()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_HasKeyString).12651266 Новые функции возвращают `-1` в случае ошибок, стандартные `1` для истинного значения и `0` для ложного.12671268 (Автор: Сергей Сторчака в [gh-108511](https://python-all.ru/3.16/whatsnew/3.13.html).)12691270### Изменённые C API12711272- Параметр *keywords* функций [`PyArg_ParseTupleAndKeywords()`](https://python-all.ru/3.16/c-api/arg.html#c.PyArg_ParseTupleAndKeywords) и [`PyArg_VaParseTupleAndKeywords()`](https://python-all.ru/3.16/c-api/arg.html#c.PyArg_VaParseTupleAndKeywords) теперь имеет тип char \*const\* в C и const char \*const\* в C++ вместо char\*\*. В C++ это делает эти функции совместимыми с аргументами типа const char \*const\*, const char\*\* или char \*const\* без явного приведения типа. В C функции поддерживают только аргументы типа char \*const\*. Это можно переопределить с помощью макроса [`PY_CXX_CONST`](https://python-all.ru/3.16/c-api/arg.html#c.PY_CXX_CONST). (Автор: Сергей Сторчака в [gh-65210](https://python-all.ru/3.16/whatsnew/3.13.html).)1273- [`PyArg_ParseTupleAndKeywords()`](https://python-all.ru/3.16/c-api/arg.html#c.PyArg_ParseTupleAndKeywords) теперь поддерживает не-ASCII имена параметров-ключевых слов. (Автор: Сергей Сторчака в [gh-110815](https://python-all.ru/3.16/whatsnew/3.13.html).)1274- Функция `PyCode_GetFirstFree()` теперь является нестабильным API и переименована в [`PyUnstable_Code_GetFirstFree()`](https://python-all.ru/3.16/c-api/code.html#c.PyUnstable_Code_GetFirstFree). (Автор: Богдан Романюк в [gh-115781](https://python-all.ru/3.16/whatsnew/3.13.html).)1275- Функции [`PyDict_GetItem()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItem), [`PyDict_GetItemString()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemString), [`PyMapping_HasKey()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_HasKey), [`PyMapping_HasKeyString()`](https://python-all.ru/3.16/c-api/mapping.html#c.PyMapping_HasKeyString), [`PyObject_HasAttr()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_HasAttr), [`PyObject_HasAttrString()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_HasAttrString) и [`PySys_GetObject()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_GetObject), каждая из которых очищала все ошибки, возникшие при их вызове, теперь сообщают об этих ошибках с помощью [`sys.unraisablehook()`](https://python-all.ru/3.16/library/sys.html#sys.unraisablehook). Их можно заменить другими функциями, как рекомендовано в документации. (Автор: Сергей Сторчака в [gh-106672](https://python-all.ru/3.16/whatsnew/3.13.html).)1276- Добавлена поддержка форматов `%T`, `%#T`, `%N` и `%#N` в [`PyUnicode_FromFormat()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_FromFormat):12771278 - `%T`: Возвращает полное имя типа объекта1279 - `%#T`: То же, что выше, но с двоеточием в качестве разделителя1280 - `%N`: Возвращает полное имя типа1281 - `%#N`: То же, что выше, но с двоеточием в качестве разделителя12821283 Подробнее см. [**PEP 737**](https://python-all.ru/3.16/whatsnew/3.13.html). (Вклад Victor Stinner в [gh-111696](https://python-all.ru/3.16/whatsnew/3.13.html).)1284- Больше не нужно определять макрос `PY_SSIZE_T_CLEAN` перед включением `Python.h` при использовании форматов `#` в [форматных кодах](https://python-all.ru/3.16/c-api/arg.html#arg-parsing-string-and-buffers). API, принимающие форматы кодов, всегда используют `Py_ssize_t` для форматов `#`. (Вклад Inada Naoki в [gh-104922](https://python-all.ru/3.16/whatsnew/3.13.html).)1285- Если Python собран в [режиме отладки](https://python-all.ru/3.16/using/configure.html#debug-build) или [`with assertions`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-assertions), [`PyTuple_SET_ITEM()`](https://python-all.ru/3.16/c-api/tuple.html#c.PyTuple_SET_ITEM) и [`PyList_SET_ITEM()`](https://python-all.ru/3.16/c-api/list.html#c.PyList_SET_ITEM) теперь проверяют аргумент индекса с помощью утверждения. (Вклад Victor Stinner в [gh-106168](https://python-all.ru/3.16/whatsnew/3.13.html).)12861287### Изменения ограниченного C API12881289- Следующие функции теперь включены в ограниченный C API:12901291 - [`PyMem_RawMalloc()`](https://python-all.ru/3.16/c-api/memory.html#c.PyMem_RawMalloc)1292 - [`PyMem_RawCalloc()`](https://python-all.ru/3.16/c-api/memory.html#c.PyMem_RawCalloc)1293 - [`PyMem_RawRealloc()`](https://python-all.ru/3.16/c-api/memory.html#c.PyMem_RawRealloc)1294 - [`PyMem_RawFree()`](https://python-all.ru/3.16/c-api/memory.html#c.PyMem_RawFree)1295 - [`PySys_Audit()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_Audit)1296 - [`PySys_AuditTuple()`](https://python-all.ru/3.16/c-api/sys.html#c.PySys_AuditTuple)1297 - [`PyType_GetModuleByDef()`](https://python-all.ru/3.16/c-api/type.html#c.PyType_GetModuleByDef)12981299 (Вклад Victor Stinner в [gh-85283](https://python-all.ru/3.16/whatsnew/3.13.html) и [gh-116936](https://python-all.ru/3.16/whatsnew/3.13.html).)1300- Python, собранный с [`--with-trace-refs`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs) (трассировка ссылок), теперь поддерживает [ограниченный API](https://python-all.ru/3.16/c-api/stable.html#limited-c-api). (Вклад Victor Stinner в [gh-108634](https://python-all.ru/3.16/whatsnew/3.13.html).)13011302### Удалённые C API13031304- Удалены несколько функций, макросов, переменных и т.д. с именами, начинающимися с `_Py` или `_PY` (считаются приватными). Если ваш проект затронут одним из этих удалений и вы считаете, что удалённый API должен оставаться доступным, пожалуйста, [откройте новую задачу](https://python-all.ru/3.16/bugs.html#using-the-tracker), чтобы запросить публичный C API, и добавьте `cc: @vstinner` в задачу для уведомления Victor Stinner. (Вклад Victor Stinner в [gh-106320](https://python-all.ru/3.16/whatsnew/3.13.html).)1305- Удалены старые буферные протоколы, объявленные устаревшими в Python 3.0. Вместо них используйте [Протокол буфера](https://python-all.ru/3.16/c-api/buffer.html#bufferobjects).13061307 - `PyObject_CheckReadBuffer()`: Используйте [`PyObject_CheckBuffer()`](https://python-all.ru/3.16/c-api/buffer.html#c.PyObject_CheckBuffer), чтобы проверить, поддерживает ли объект буферный протокол. Обратите внимание, что `PyObject_CheckBuffer()` не гарантирует, что [`PyObject_GetBuffer()`](https://python-all.ru/3.16/c-api/buffer.html#c.PyObject_GetBuffer) выполнится успешно. Чтобы проверить, действительно ли объект читаем, см. следующий пример `PyObject_GetBuffer()`.1308 - `PyObject_AsCharBuffer()`, `PyObject_AsReadBuffer()`: Вместо них используйте [`PyObject_GetBuffer()`](https://python-all.ru/3.16/c-api/buffer.html#c.PyObject_GetBuffer) и [`PyBuffer_Release()`](https://python-all.ru/3.16/c-api/buffer.html#c.PyBuffer_Release):13091310 ```c1311 Py_buffer view;1312 if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) {1313 return NULL;1314 }1315 // `view.buf` и `view.len` используются для чтения из буфера.1316 // Возможно, потребуется привести buf к типу `(const char*)view.buf`.1317 PyBuffer_Release(&view);1318 ```1319 - `PyObject_AsWriteBuffer()`: Вместо него используйте [`PyObject_GetBuffer()`](https://python-all.ru/3.16/c-api/buffer.html#c.PyObject_GetBuffer) и [`PyBuffer_Release()`](https://python-all.ru/3.16/c-api/buffer.html#c.PyBuffer_Release):13201321 ```c1322 Py_buffer view;1323 if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) {1324 return NULL;1325 }1326 // `view.buf` и `view.len` используются для записи в буфер.1327 PyBuffer_Release(&view);1328 ```13291330 (Вклад Inada Naoki в [gh-85275](https://python-all.ru/3.16/whatsnew/3.13.html).)1331- Удалены различные функции, объявленные устаревшими в Python 3.9:13321333 - `PyEval_CallObject()`, `PyEval_CallObjectWithKeywords()`: Вместо них используйте [`PyObject_CallNoArgs()`](https://python-all.ru/3.16/c-api/call.html#c.PyObject_CallNoArgs) или [`PyObject_Call()`](https://python-all.ru/3.16/c-api/call.html#c.PyObject_Call).13341335 > **Предупреждение**1336 >1337 > В [`PyObject_Call()`](https://python-all.ru/3.16/c-api/call.html#c.PyObject_Call) позиционные аргументы должны быть типа [`tuple`](https://python-all.ru/3.16/library/stdtypes.html#tuple) и не должны быть типа `NULL`, а именованные аргументы должны быть типа [`dict`](https://python-all.ru/3.16/library/stdtypes.html#dict) или `NULL`, тогда как удалённые функции проверяли типы аргументов и принимали `NULL` в качестве позиционных и именованных аргументов. Чтобы заменить `PyEval_CallObjectWithKeywords(func, NULL, kwargs)` на `PyObject_Call()`, передайте пустой кортеж в качестве позиционных аргументов с помощью [`PyTuple_New(0)`](https://python-all.ru/3.16/c-api/tuple.html#c.PyTuple_New).1338 - `PyEval_CallFunction()`: Вместо этого используйте [`PyObject_CallFunction()`](https://python-all.ru/3.16/c-api/call.html#c.PyObject_CallFunction).1339 - `PyEval_CallMethod()`: Вместо этого используйте [`PyObject_CallMethod()`](https://python-all.ru/3.16/c-api/call.html#c.PyObject_CallMethod).1340 - `PyCFunction_Call()`: Вместо этого используйте [`PyObject_Call()`](https://python-all.ru/3.16/c-api/call.html#c.PyObject_Call).13411342 (Вклад Victor Stinner в [gh-105107](https://python-all.ru/3.16/whatsnew/3.13.html).)1343- Удалены следующие устаревшие функции для настройки инициализации Python, объявленные устаревшими в Python 3.11:13441345 - `PySys_AddWarnOptionUnicode()`: Вместо этого используйте [`PyConfig.warnoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.warnoptions).1346 - `PySys_AddWarnOption()`: Вместо этого используйте [`PyConfig.warnoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.warnoptions).1347 - `PySys_AddXOption()`: Вместо этого используйте [`PyConfig.xoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.xoptions).1348 - `PySys_HasWarnOptions()`: Вместо этого используйте [`PyConfig.xoptions`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.xoptions).1349 - `PySys_SetPath()`: Вместо этого задайте [`PyConfig.module_search_paths`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths).1350 - `Py_SetPath()`: Вместо этого задайте [`PyConfig.module_search_paths`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.module_search_paths).1351 - `Py_SetStandardStreamEncoding()`: Вместо этого задайте [`PyConfig.stdio_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.stdio_encoding), и, возможно, также [`PyConfig.legacy_windows_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.legacy_windows_stdio) (в Windows).1352 - `_Py_SetProgramFullPath()`: Вместо этого задайте [`PyConfig.executable`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.executable).13531354 Вместо этого используйте новый API [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig) из [Python Initialization Configuration](https://python-all.ru/3.16/c-api/init_config.html#init-config) ([**PEP 587**](https://python-all.ru/3.16/whatsnew/3.13.html)), добавленный в Python 3.8. (Вклад Victor Stinner в [gh-105145](https://python-all.ru/3.16/whatsnew/3.13.html).)1355- Удалены функции `PyEval_AcquireLock()` и `PyEval_ReleaseLock()`, объявленные устаревшими в Python 3.2. Они не обновляли состояние текущего потока. Их можно заменить на:13561357 - [`PyEval_SaveThread()`](https://python-all.ru/3.16/c-api/threads.html#c.PyEval_SaveThread) и [`PyEval_RestoreThread()`](https://python-all.ru/3.16/c-api/threads.html#c.PyEval_RestoreThread);1358 - низкоуровневые [`PyEval_AcquireThread()`](https://python-all.ru/3.16/c-api/threads.html#c.PyEval_AcquireThread) и [`PyEval_RestoreThread()`](https://python-all.ru/3.16/c-api/threads.html#c.PyEval_RestoreThread);1359 - или [`PyGILState_Ensure()`](https://python-all.ru/3.16/c-api/threads.html#c.PyGILState_Ensure) и [`PyGILState_Release()`](https://python-all.ru/3.16/c-api/threads.html#c.PyGILState_Release).13601361 (Вклад Victor Stinner в [gh-105182](https://python-all.ru/3.16/whatsnew/3.13.html).)1362- Удалена функция `PyEval_ThreadsInitialized()`, объявленная устаревшей в Python 3.9. Начиная с Python 3.7, `Py_Initialize()` всегда создаёт GIL: вызов `PyEval_InitThreads()` ничего не делает, а `PyEval_ThreadsInitialized()` всегда возвращает ненулевое значение. (Вклад Victor Stinner в [gh-105182](https://python-all.ru/3.16/whatsnew/3.13.html).)1363- Удалён псевдоним `_PyInterpreterState_Get()` для [`PyInterpreterState_Get()`](https://python-all.ru/3.16/c-api/subinterpreters.html#c.PyInterpreterState_Get), который сохранялся для обратной совместимости с Python 3.8. Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать, чтобы получить `PyInterpreterState_Get()` на Python 3.8 и старше. (Автор: Victor Stinner в [gh-106320](https://python-all.ru/3.16/whatsnew/3.13.html).)1364- Удалена приватная функция `_PyObject_FastCall()`: используйте `PyObject_Vectorcall()`, которая доступна начиная с Python 3.8 ([**PEP 590**](https://python-all.ru/3.16/whatsnew/3.13.html)). (Автор: Victor Stinner в [gh-106023](https://python-all.ru/3.16/whatsnew/3.13.html).)1365- Удалён заголовочный файл `cpython/pytime.h`, который содержал только приватные функции. (Автор: Victor Stinner в [gh-106316](https://python-all.ru/3.16/whatsnew/3.13.html).)1366- Удалена недокументированная константа `PY_TIMEOUT_MAX` из ограниченного C API. (Автор: Victor Stinner в [gh-110014](https://python-all.ru/3.16/whatsnew/3.13.html).)1367- Удалены старые макросы trashcan `Py_TRASHCAN_SAFE_BEGIN` и `Py_TRASHCAN_SAFE_END`. Оба замените новыми макросами `Py_TRASHCAN_BEGIN` и `Py_TRASHCAN_END`. (Автор: Irit Katriel в [gh-105111](https://python-all.ru/3.16/whatsnew/3.13.html).)13681369### Устаревшие C API13701371- Устарели старые функции инициализации Python:13721373 - `PySys_ResetWarnOptions()`: Вместо этого очистите [`sys.warnoptions`](https://python-all.ru/3.16/library/sys.html#sys.warnoptions) и `warnings.filters`.1374 - `Py_GetExecPrefix()`: Вместо этого используйте [`sys.exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix).1375 - `Py_GetPath()`: Вместо этого используйте [`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path).1376 - `Py_GetPrefix()`: Вместо этого используйте [`sys.prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix).1377 - `Py_GetProgramFullPath()`: Вместо этого используйте [`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable).1378 - `Py_GetProgramName()`: Вместо этого используйте [`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable).1379 - `Py_GetPythonHome()`: Вместо этого используйте [`PyConfig.home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home) или переменную окружения [`PYTHONHOME`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONHOME).13801381 (Автор: Victor Stinner в [gh-105145](https://python-all.ru/3.16/whatsnew/3.13.html).)1382- [Мягкое устаревание](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) функций [`PyEval_GetBuiltins()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetBuiltins), [`PyEval_GetGlobals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetGlobals) и [`PyEval_GetLocals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetLocals), которые возвращают [заимствованную ссылку](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). (Мягкое устаревание в рамках [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html).)1383- Устарела функция `PyImport_ImportModuleNoBlock()`, которая является просто псевдонимом [`PyImport_ImportModule()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_ImportModule) начиная с Python 3.3. (Автор: Victor Stinner в [gh-105396](https://python-all.ru/3.16/whatsnew/3.13.html).)1384- [Мягкое устаревание](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) функции [`PyModule_AddObject()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_AddObject). Её следует заменить на [`PyModule_Add()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_Add) или [`PyModule_AddObjectRef()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_AddObjectRef). (Автор: Serhiy Storchaka в [gh-86493](https://python-all.ru/3.16/whatsnew/3.13.html).)1385- Устарели старые типы `Py_UNICODE` и `PY_UNICODE_TYPE` и макрос `Py_UNICODE_WIDE`. Вместо них напрямую используйте тип `wchar_t`. Начиная с Python 3.3, `Py_UNICODE` и `PY_UNICODE_TYPE` являются просто псевдонимами `wchar_t`. (Автор: Victor Stinner в [gh-105156](https://python-all.ru/3.16/whatsnew/3.13.html).)1386- Устарели функции `PyWeakref_GetObject()` и `PyWeakref_GET_OBJECT()`, которые возвращают [заимствованную ссылку](https://python-all.ru/3.16/glossary.html#term-borrowed-reference). Замените их на новую функцию [`PyWeakref_GetRef()`](https://python-all.ru/3.16/c-api/weakref.html#c.PyWeakref_GetRef), которая возвращает [сильную ссылку](https://python-all.ru/3.16/glossary.html#term-strong-reference). Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать, чтобы получить `PyWeakref_GetRef()` на Python 3.12 и старше. (Автор: Victor Stinner в [gh-105927](https://python-all.ru/3.16/whatsnew/3.13.html).)13871388#### Ожидается удаление в Python 3.1413891390- Поле `ma_version_tag` в [`PyDictObject`](https://python-all.ru/3.16/c-api/dict.html#c.PyDictObject) для модулей расширения ([**PEP 699**](https://python-all.ru/3.16/whatsnew/3.13.html); [gh-101193](https://python-all.ru/3.16/whatsnew/3.13.html)).1391- Создание [`immutable types`](https://python-all.ru/3.16/c-api/typeobj.html#c.Py_TPFLAGS_IMMUTABLETYPE) с изменяемыми базовыми классами ([gh-95388](https://python-all.ru/3.16/whatsnew/3.13.html)).13921393#### Ожидается удаление в Python 3.1513941395- `PyImport_ImportModuleNoBlock()`: Вместо этого используйте [`PyImport_ImportModule()`](https://python-all.ru/3.16/c-api/import.html#c.PyImport_ImportModule).1396- `PyWeakref_GetObject()` и `PyWeakref_GET_OBJECT()`: Вместо этого используйте [`PyWeakref_GetRef()`](https://python-all.ru/3.16/c-api/weakref.html#c.PyWeakref_GetRef). Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать, чтобы получить `PyWeakref_GetRef()` на Python 3.12 и старше.1397- `PyUnicode_AsDecodedObject()`: Вместо этого используйте [`PyCodec_Decode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Decode).1398- `PyUnicode_AsDecodedUnicode()`: Вместо этого используйте [`PyCodec_Decode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Decode); Обратите внимание, что некоторые кодеки (например, «base64») могут возвращать тип, отличный от [`str`](https://python-all.ru/3.16/library/stdtypes.html#str), например, [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes).1399- `PyUnicode_AsEncodedObject()`: Вместо этого используйте [`PyCodec_Encode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Encode).1400- `PyUnicode_AsEncodedUnicode()`: Вместо этого используйте [`PyCodec_Encode()`](https://python-all.ru/3.16/c-api/codec.html#c.PyCodec_Encode); Обратите внимание, что некоторые кодеки (например, «base64») могут возвращать тип, отличный от [`bytes`](https://python-all.ru/3.16/library/stdtypes.html#bytes), например, [`str`](https://python-all.ru/3.16/library/stdtypes.html#str).1401- Функции инициализации Python, устаревшие в Python 3.13:14021403 - `Py_GetPath()`: Вместо этого используйте [`PyConfig_Get("module_search_paths")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.path`](https://python-all.ru/3.16/library/sys.html#sys.path)).1404 - `Py_GetPrefix()`: Вместо этого используйте [`PyConfig_Get("base_prefix")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.base_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_prefix)). Используйте `PyConfig_Get("prefix")` ([`sys.prefix`](https://python-all.ru/3.16/library/sys.html#sys.prefix)), если необходимо обрабатывать [виртуальные окружения](https://python-all.ru/3.16/library/venv.html#venv-def).1405 - `Py_GetExecPrefix()`: Вместо этого используйте [`PyConfig_Get("base_exec_prefix")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.base_exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.base_exec_prefix)). Используйте `PyConfig_Get("exec_prefix")` ([`sys.exec_prefix`](https://python-all.ru/3.16/library/sys.html#sys.exec_prefix)), если необходимо обрабатывать [виртуальные окружения](https://python-all.ru/3.16/library/venv.html#venv-def).1406 - `Py_GetProgramFullPath()`: Вместо этого используйте [`PyConfig_Get("executable")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable)).1407 - `Py_GetProgramName()`: Вместо этого используйте [`PyConfig_Get("executable")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) ([`sys.executable`](https://python-all.ru/3.16/library/sys.html#sys.executable)).1408 - `Py_GetPythonHome()`: Используйте [`PyConfig_Get("home")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) или переменную окружения [`PYTHONHOME`](https://python-all.ru/3.16/using/cmdline.html#envvar-PYTHONHOME).14091410 Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать, чтобы получить [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) на Python 3.13 и старше.14111412#### Запланировано к удалению в Python 3.1614131414- Функции для настройки инициализации Python, устаревшие в Python 3.11:14151416 - `PySys_SetArgvEx()`: Вместо этого задайте [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv).1417 - `PySys_SetArgv()`: Вместо этого задайте [`PyConfig.argv`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.argv).1418 - `Py_SetProgramName()`: Вместо этого задайте [`PyConfig.program_name`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.program_name).1419 - `Py_SetPythonHome()`: Вместо этого задайте [`PyConfig.home`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.home).14201421 API [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) следует использовать с [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig) вместо этого.1422- Глобальные переменные конфигурации:14231424 - [`Py_DebugFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_DebugFlag): Используйте [`PyConfig.parser_debug`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.parser_debug) или [`PyConfig_Get("parser_debug")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1425 - [`Py_VerboseFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_VerboseFlag): Используйте [`PyConfig.verbose`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.verbose) или [`PyConfig_Get("verbose")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1426 - [`Py_QuietFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_QuietFlag): Используйте [`PyConfig.quiet`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.quiet) или [`PyConfig_Get("quiet")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1427 - [`Py_InteractiveFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InteractiveFlag): Используйте [`PyConfig.interactive`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.interactive) или [`PyConfig_Get("interactive")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1428 - [`Py_InspectFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InspectFlag): Используйте [`PyConfig.inspect`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.inspect) или [`PyConfig_Get("inspect")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1429 - [`Py_OptimizeFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_OptimizeFlag): Используйте [`PyConfig.optimization_level`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.optimization_level) или [`PyConfig_Get("optimization_level")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1430 - [`Py_NoSiteFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_NoSiteFlag): Используйте [`PyConfig.site_import`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.site_import) или [`PyConfig_Get("site_import")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1431 - [`Py_BytesWarningFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_BytesWarningFlag): Используйте [`PyConfig.bytes_warning`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.bytes_warning) или [`PyConfig_Get("bytes_warning")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1432 - [`Py_FrozenFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_FrozenFlag): Используйте [`PyConfig.pathconfig_warnings`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.pathconfig_warnings) или [`PyConfig_Get("pathconfig_warnings")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1433 - [`Py_IgnoreEnvironmentFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_IgnoreEnvironmentFlag): Используйте [`PyConfig.use_environment`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_environment) или [`PyConfig_Get("use_environment")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1434 - [`Py_DontWriteBytecodeFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_DontWriteBytecodeFlag): Используйте [`PyConfig.write_bytecode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.write_bytecode) или [`PyConfig_Get("write_bytecode")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1435 - [`Py_NoUserSiteDirectory`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_NoUserSiteDirectory): Используйте [`PyConfig.user_site_directory`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.user_site_directory) или [`PyConfig_Get("user_site_directory")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1436 - [`Py_UnbufferedStdioFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_UnbufferedStdioFlag): Используйте [`PyConfig.buffered_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.buffered_stdio) или [`PyConfig_Get("buffered_stdio")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1437 - [`Py_HashRandomizationFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_HashRandomizationFlag): Используйте [`PyConfig.use_hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.use_hash_seed) и [`PyConfig.hash_seed`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.hash_seed) или [`PyConfig_Get("hash_seed")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1438 - [`Py_IsolatedFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_IsolatedFlag): Используйте [`PyConfig.isolated`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.isolated) или [`PyConfig_Get("isolated")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1439 - [`Py_LegacyWindowsFSEncodingFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_LegacyWindowsFSEncodingFlag): Используйте [`PyPreConfig.legacy_windows_fs_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.legacy_windows_fs_encoding) или [`PyConfig_Get("legacy_windows_fs_encoding")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1440 - [`Py_LegacyWindowsStdioFlag`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_LegacyWindowsStdioFlag): Используйте [`PyConfig.legacy_windows_stdio`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.legacy_windows_stdio) или [`PyConfig_Get("legacy_windows_stdio")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1441 - `Py_FileSystemDefaultEncoding`, `Py_HasFileSystemDefaultEncoding`: Используйте [`PyConfig.filesystem_encoding`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_encoding) или [`PyConfig_Get("filesystem_encoding")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1442 - `Py_FileSystemDefaultEncodeErrors`: Используйте [`PyConfig.filesystem_errors`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig.filesystem_errors) или [`PyConfig_Get("filesystem_errors")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого.1443 - `Py_UTF8Mode`: Используйте [`PyPreConfig.utf8_mode`](https://python-all.ru/3.16/c-api/init_config.html#c.PyPreConfig.utf8_mode) или [`PyConfig_Get("utf8_mode")`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) вместо этого. (см. [`Py_PreInitialize()`](https://python-all.ru/3.16/c-api/init_config.html#c.Py_PreInitialize))14441445 API [`Py_InitializeFromConfig()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_InitializeFromConfig) следует использовать с [`PyConfig`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig) для установки этих параметров. Или [`PyConfig_Get()`](https://python-all.ru/3.16/c-api/init_config.html#c.PyConfig_Get) можно использовать для получения этих параметров во время выполнения.1446- [`Py_UNICODE`](https://python-all.ru/3.16/c-api/unicode.html#c.Py_UNICODE), который был объявлен устаревшим в [**PEP 393**](https://python-all.ru/3.16/whatsnew/3.13.html).14471448#### Запланировано удаление в Python 3.1814491450- Следующие закрытые функции устарели и планируются к удалению в Python 3.18:14511452 - `_PyBytes_Join()`: используйте [`PyBytes_Join()`](https://python-all.ru/3.16/c-api/bytes.html#c.PyBytes_Join).1453 - `_PyDict_GetItemStringWithError()`: используйте [`PyDict_GetItemStringRef()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemStringRef).1454 - `_PyDict_Pop()`: используйте [`PyDict_Pop()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_Pop).1455 - `_PyLong_Sign()`: используйте [`PyLong_GetSign()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_GetSign).1456 - `_PyLong_FromDigits()` и `_PyLong_New()`: используйте [`PyLongWriter_Create()`](https://python-all.ru/3.16/c-api/long.html#c.PyLongWriter_Create).1457 - `_PyThreadState_UncheckedGet()`: используйте [`PyThreadState_GetUnchecked()`](https://python-all.ru/3.16/c-api/threads.html#c.PyThreadState_GetUnchecked).1458 - `_PyUnicode_AsString()`: используйте [`PyUnicode_AsUTF8()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_AsUTF8).1459 - `_PyUnicodeWriter_Init()`: заменить `_PyUnicodeWriter_Init(&writer)` на [`writer = PyUnicodeWriter_Create(0)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Create).1460 - `_PyUnicodeWriter_Finish()`: заменить `_PyUnicodeWriter_Finish(&writer)` на [`PyUnicodeWriter_Finish(writer)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Finish).1461 - `_PyUnicodeWriter_Dealloc()`: заменить `_PyUnicodeWriter_Dealloc(&writer)` на [`PyUnicodeWriter_Discard(writer)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_Discard).1462 - `_PyUnicodeWriter_WriteChar()`: заменить `_PyUnicodeWriter_WriteChar(&writer, ch)` на [`PyUnicodeWriter_WriteChar(writer, ch)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteChar).1463 - `_PyUnicodeWriter_WriteStr()`: заменить `_PyUnicodeWriter_WriteStr(&writer, str)` на [`PyUnicodeWriter_WriteStr(writer, str)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteStr).1464 - `_PyUnicodeWriter_WriteSubstring()`: заменить `_PyUnicodeWriter_WriteSubstring(&writer, str, start, end)` на [`PyUnicodeWriter_WriteSubstring(writer, str, start, end)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteSubstring).1465 - `_PyUnicodeWriter_WriteASCIIString()`: заменить `_PyUnicodeWriter_WriteASCIIString(&writer, str)` на [`PyUnicodeWriter_WriteASCII(writer, str)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteASCII).1466 - `_PyUnicodeWriter_WriteLatin1String()`: заменить `_PyUnicodeWriter_WriteLatin1String(&writer, str)` на [`PyUnicodeWriter_WriteUTF8(writer, str)`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicodeWriter_WriteUTF8).1467 - `_PyUnicodeWriter_Prepare()`: (нет замены).1468 - `_PyUnicodeWriter_PrepareKind()`: (нет замены).1469 - `_Py_HashPointer()`: используйте [`Py_HashPointer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashPointer).1470 - `_Py_fopen_obj()`: используйте [`Py_fopen()`](https://python-all.ru/3.16/c-api/sys.html#c.Py_fopen).1471 - [`PyGen_New()`](https://python-all.ru/3.16/c-api/gen.html#c.PyGen_New): (нет замены).1472 - [`PyGen_NewWithQualName()`](https://python-all.ru/3.16/c-api/gen.html#c.PyGen_NewWithQualName): (нет замены).1473 - [`PyCoro_New()`](https://python-all.ru/3.16/c-api/coro.html#c.PyCoro_New): (нет замены).1474 - [`PyAsyncGen_New()`](https://python-all.ru/3.16/c-api/gen.html#c.PyAsyncGen_New): (нет замены).14751476 Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать для получения этих новых открытых функций в Python 3.13 и старше. (Предложено Виктором Стиннером в [gh-128863](https://python-all.ru/3.16/whatsnew/3.13.html).)14771478#### Будет удалено в будущих версиях14791480Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.14811482- [`Py_TPFLAGS_HAVE_FINALIZE`](https://python-all.ru/3.16/c-api/typeobj.html#c.Py_TPFLAGS_HAVE_FINALIZE): Не требуется начиная с Python 3.8.1483- [`PyErr_Fetch()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Fetch): Вместо этого используйте [`PyErr_GetRaisedException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_GetRaisedException).1484- [`PyErr_NormalizeException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_NormalizeException): Вместо этого используйте [`PyErr_GetRaisedException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_GetRaisedException).1485- [`PyErr_Restore()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Restore): Вместо этого используйте [`PyErr_SetRaisedException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_SetRaisedException).1486- [`PyModule_GetFilename()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_GetFilename): Вместо этого используйте [`PyModule_GetFilenameObject()`](https://python-all.ru/3.16/c-api/module.html#c.PyModule_GetFilenameObject).1487- [`PyOS_AfterFork()`](https://python-all.ru/3.16/c-api/sys.html#c.PyOS_AfterFork): Вместо этого используйте [`PyOS_AfterFork_Child()`](https://python-all.ru/3.16/c-api/sys.html#c.PyOS_AfterFork_Child).1488- [`PySlice_GetIndicesEx()`](https://python-all.ru/3.16/c-api/slice.html#c.PySlice_GetIndicesEx): Вместо этого используйте [`PySlice_Unpack()`](https://python-all.ru/3.16/c-api/slice.html#c.PySlice_Unpack) и [`PySlice_AdjustIndices()`](https://python-all.ru/3.16/c-api/slice.html#c.PySlice_AdjustIndices).1489- [`PyUnicode_READY()`](https://python-all.ru/3.16/c-api/unicode.html#c.PyUnicode_READY): Не требуется начиная с Python 3.121490- `PyErr_Display()`: Вместо этого используйте [`PyErr_DisplayException()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_DisplayException).1491- `_PyErr_ChainExceptions()`: Вместо этого используйте `_PyErr_ChainExceptions1()`.1492- Элемент `PyBytesObject.ob_shash`: вместо этого вызывайте [`PyObject_Hash()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_Hash).1493- API локального хранилища потока (TLS):14941495 - [`PyThread_create_key()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_create_key): Вместо этого используйте [`PyThread_tss_alloc()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_alloc).1496 - [`PyThread_delete_key()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_delete_key): Вместо этого используйте [`PyThread_tss_free()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_free).1497 - [`PyThread_set_key_value()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_set_key_value): Вместо этого используйте [`PyThread_tss_set()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_set).1498 - [`PyThread_get_key_value()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_get_key_value): Вместо этого используйте [`PyThread_tss_get()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_get).1499 - [`PyThread_delete_key_value()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_delete_key_value): Вместо этого используйте [`PyThread_tss_delete()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_tss_delete).1500 - [`PyThread_ReInitTLS()`](https://python-all.ru/3.16/c-api/tls.html#c.PyThread_ReInitTLS): Не требуется с Python 3.7.15011502## Изменения сборки15031504- `arm64-apple-ios` и `arm64-apple-ios-simulator` теперь являются платформами третьего уровня [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.13.html). ([PEP 730](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-platform-support) написан, реализация предоставлена Russell Keith-Magee в [gh-114099](https://python-all.ru/3.16/whatsnew/3.13.html).)1505- `aarch64-linux-android` и `x86_64-linux-android` теперь являются платформами третьего уровня [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.13.html). ([PEP 738](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-platform-support) написан, реализация предоставлена Malcolm Smith в [gh-116622](https://python-all.ru/3.16/whatsnew/3.13.html).)1506- `wasm32-wasi` теперь является платформой второго уровня [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.13.html). (Автор: Brett Cannon в [gh-115192](https://python-all.ru/3.16/whatsnew/3.13.html).)1507- `wasm32-emscripten` больше не является поддерживаемой платформой [**PEP 11**](https://python-all.ru/3.16/whatsnew/3.13.html). (Автор: Brett Cannon в [gh-115192](https://python-all.ru/3.16/whatsnew/3.13.html).)1508- Для сборки CPython теперь требуется компилятор с поддержкой атомарной библиотеки C11, встроенных атомарных функций GCC или встроенных функций MSVC для атомарных операций (interlocked intrinsics).1509- Для перегенерации скрипта `configure` теперь требуются Autoconf 2.71 и aclocal 1.16.5. (Авторы: Christian Heimes в [gh-89886](https://python-all.ru/3.16/whatsnew/3.13.html) и Victor Stinner в [gh-112090](https://python-all.ru/3.16/whatsnew/3.13.html).)1510- Для сборки модуля расширения [`sqlite3`](https://python-all.ru/3.16/library/sqlite3.html#module-sqlite3) требуется SQLite 3.15.2 или новее. (Автор: Erlend Aasland в [gh-105875](https://python-all.ru/3.16/whatsnew/3.13.html).)1511- CPython теперь по умолчанию включает библиотеку [mimalloc](https://python-all.ru/3.16/whatsnew/3.13.html). Она распространяется под лицензией MIT; см. [лицензию mimalloc](https://python-all.ru/3.16/license.html#mimalloc-license). Включённая mimalloc содержит пользовательские изменения – подробности [gh-113141](https://python-all.ru/3.16/whatsnew/3.13.html). (Автор: Dino Viehland в [gh-109914](https://python-all.ru/3.16/whatsnew/3.13.html).)1512- Опция `configure` `--with-system-libmpdec` теперь по умолчанию равна `yes`. Включённая копия `libmpdec` будет удалена в Python 3.16.1513- Python, собранный с `configure` [`--with-trace-refs`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-trace-refs) (трассировка ссылок), теперь ABI-совместим со сборкой Python для выпуска и [отладочной сборкой](https://python-all.ru/3.16/using/configure.html#debug-build). (Автор: Victor Stinner в [gh-108634](https://python-all.ru/3.16/whatsnew/3.13.html).)1514- На системах POSIX имена файлов pkg-config (`.pc`) теперь содержат флаги ABI. Например, сборка со свободной потокостью (free-threaded) генерирует `python-3.13t.pc`, а отладочная сборка генерирует `python-3.13d.pc`.1515- Расширения C `errno`, `fcntl`, `grp`, `md5`, `pwd`, `resource`, `termios`, `winsound`, `_ctypes_test`, `_multiprocessing.posixshmem`, `_scproxy`, `_stat`, `_statistics`, `_testconsole`, `_testimportmultiple` и `_uuid` теперь собираются с [ограниченным C API](https://python-all.ru/3.16/c-api/stable.html#limited-c-api). (Автор: Victor Stinner в [gh-85283](https://python-all.ru/3.16/whatsnew/3.13.html).)15161517## Перенос на Python 3.1315181519В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать изменений в вашем коде.15201521### Изменения в Python API15221523- [PEP 667](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-locals-semantics) вводит несколько изменений в семантику [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) и [`f_locals`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_locals):15241525 - Вызов [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) в [оптимизированной области видимости](https://python-all.ru/3.16/glossary.html#term-optimized-scope) теперь создаёт независимый снимок при каждом вызове и поэтому больше не обновляет неявно ранее возвращённые ссылки. Чтобы получить прежнее поведение CPython, теперь требуются явные вызовы для обновления первоначально возвращённого словаря результатами последующих вызовов `locals()`. Функциям выполнения кода, которые неявно обращаются к `locals()` (таким как `exec` и `eval`), необходимо передавать явное пространство имён для получения их результатов в оптимизированной области видимости. (Изменено в рамках [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html).)1526 - Вызов [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) из включения на уровне модуля или класса (в том числе через `exec` или `eval`) снова ведёт себя так, как если бы включение выполнялось как независимая вложенная функция (т.е. локальные переменные из содержащей области видимости не включаются). В Python 3.12 это поведение изменилось: локальные переменные стали включаться при реализации [**PEP 709**](https://python-all.ru/3.16/whatsnew/3.13.html). (Изменено в рамках [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html).)1527 - Обращение к [`FrameType.f_locals`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_locals) в [оптимизированной области видимости](https://python-all.ru/3.16/glossary.html#term-optimized-scope) теперь возвращает прокси со сквозной записью, а не снимок, который обновляется в неопределённые моменты. Если нужен снимок, его нужно создать явно с помощью `dict` или метода `.copy()` прокси. (Изменено в рамках [**PEP 667**](https://python-all.ru/3.16/whatsnew/3.13.html).)1528- [`functools.partial`](https://python-all.ru/3.16/library/functools.html#functools.partial) теперь выдаёт [`FutureWarning`](https://python-all.ru/3.16/library/exceptions.html#FutureWarning) при использовании в качестве метода. Поведение изменится в будущих версиях Python. Оберните его в [`staticmethod()`](https://python-all.ru/3.16/library/functions.html#staticmethod), чтобы сохранить прежнее поведение. (Автор: Serhiy Storchaka в [gh-121027](https://python-all.ru/3.16/whatsnew/3.13.html).)1529- Теперь [`getpass.getuser()`](https://python-all.ru/3.16/library/getpass.html#getpass.getuser) возбуждает [`OSError`](https://python-all.ru/3.16/library/exceptions.html#OSError) при любой ошибке получения имени пользователя вместо [`ImportError`](https://python-all.ru/3.16/library/exceptions.html#ImportError) на платформах, отличных от Unix, или [`KeyError`](https://python-all.ru/3.16/library/exceptions.html#KeyError) на платформах Unix, где пустая база паролей.1530- Значение атрибута `mode` объекта [`gzip.GzipFile`](https://python-all.ru/3.16/library/gzip.html#gzip.GzipFile) теперь является строкой (`'rb'` или `'wb'`) вместо целого числа (`1` или `2`). Значение атрибута `mode` читаемого файлоподобного объекта, возвращаемого [`zipfile.ZipFile.open()`](https://python-all.ru/3.16/library/zipfile.html#zipfile.ZipFile.open), теперь `'rb'` вместо `'r'`. (Автор: Serhiy Storchaka в [gh-115961](https://python-all.ru/3.16/whatsnew/3.13.html).)1531- [`mailbox.Maildir`](https://python-all.ru/3.16/library/mailbox.html#mailbox.Maildir) теперь игнорирует файлы, начинающиеся с точки (`.`). (Автор: Zackery Spytz в [gh-65559](https://python-all.ru/3.16/whatsnew/3.13.html).)1532- [`pathlib.Path.glob()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.glob) и [`rglob()`](https://python-all.ru/3.16/library/pathlib.html#pathlib.Path.rglob) теперь возвращают как файлы, так и каталоги, если задан шаблон, оканчивающийся на «`**`», а не только каталоги. Добавьте завершающий слеш, чтобы сохранить прежнее поведение и сопоставлять только каталоги.1533- Модуль [`threading`](https://python-all.ru/3.16/library/threading.html#module-threading) теперь ожидает, что модуль `_thread` содержит функцию `_is_main_interpreter()`. Эта функция не принимает аргументов и возвращает `True`, если текущий интерпретатор является главным.15341535 Любая библиотека или приложение, предоставляющее пользовательский модуль `_thread`, должны предоставлять `_is_main_interpreter()`, как и другие «приватные» атрибуты модуля. ([gh-112826](https://python-all.ru/3.16/whatsnew/3.13.html).)15361537### Изменения в C API15381539- `Python.h` больше не включает стандартный заголовок `<ieeefp.h>`. Ранее он подключался для функции `finite()`, которая теперь предоставляется заголовком `<math.h>`. При необходимости его теперь нужно подключать явно. Также удалён макрос `HAVE_IEEEFP_H`. (Автор: Victor Stinner в [gh-108765](https://python-all.ru/3.16/whatsnew/3.13.html).)1540- `Python.h` больше не включает следующие стандартные заголовочные файлы: `<time.h>`, `<sys/select.h>` и `<sys/time.h>`. При необходимости их теперь нужно подключать явно. Например, `<time.h>` предоставляет функции `clock()` и `gmtime()`, `<sys/select.h>` – функцию `select()`, а `<sys/time.h>` – функции `futimes()`, `gettimeofday()` и `setitimer()`. (Автор: Victor Stinner в [gh-108765](https://python-all.ru/3.16/whatsnew/3.13.html).)1541- В Windows `Python.h` больше не включает стандартный заголовочный файл `<stddef.h>`. При необходимости его теперь нужно подключать явно. Например, он предоставляет функцию `offsetof()` и типы `size_t` и `ptrdiff_t`. Явное подключение `<stddef.h>` уже требовалось на всех остальных платформах, макрос `HAVE_STDDEF_H` определён только в Windows. (Автор: Victor Stinner в [gh-108765](https://python-all.ru/3.16/whatsnew/3.13.html).)1542- Если определён макрос [`Py_LIMITED_API`](https://python-all.ru/3.16/c-api/stable.html#c.Py_LIMITED_API), то макросы `Py_BUILD_CORE`, `Py_BUILD_CORE_BUILTIN` и `Py_BUILD_CORE_MODULE` теперь отменяются с помощью `<Python.h>`. (Автор: Victor Stinner в [gh-85283](https://python-all.ru/3.16/whatsnew/3.13.html).)1543- Старые макросы корзины `Py_TRASHCAN_SAFE_BEGIN` и `Py_TRASHCAN_SAFE_END` удалены. Их следует заменить на новые макросы `Py_TRASHCAN_BEGIN` и `Py_TRASHCAN_END`.15441545 Функция `tp_dealloc`, использующая старые макросы, например:15461547 ```python1548 static void1549 mytype_dealloc(mytype *p)1550 {1551 PyObject_GC_UnTrack(p);1552 Py_TRASHCAN_SAFE_BEGIN(p);1553 ...1554 Py_TRASHCAN_SAFE_END1555 }1556 ```15571558 следует перенести на новые макросы следующим образом:15591560 ```python1561 static void1562 mytype_dealloc(mytype *p)1563 {1564 PyObject_GC_UnTrack(p);1565 Py_TRASHCAN_BEGIN(p, mytype_dealloc)1566 ...1567 Py_TRASHCAN_END1568 }1569 ```15701571 Обратите внимание, что `Py_TRASHCAN_BEGIN` имеет второй аргумент, которым должна быть функция освобождения, в которой он находится. Новые макросы были добавлены в Python 3.8, а старые устарели в Python 3.11. (Автор: Irit Katriel в [gh-105111](https://python-all.ru/3.16/whatsnew/3.13.html).)15721573- [PEP 667](https://python-all.ru/3.16/whatsnew/3.13.html#whatsnew313-locals-semantics) вводит несколько изменений в функции, связанные с фреймами:15741575 - Эффект от изменения словаря, возвращаемого [`PyEval_GetLocals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetLocals) в [оптимизированной области видимости](https://python-all.ru/3.16/glossary.html#term-optimized-scope), изменился. Новые записи словаря, добавленные таким образом, теперь будут *только* видны последующим вызовам `PyEval_GetLocals()` в этом фрейме, поскольку [`PyFrame_GetLocals()`](https://python-all.ru/3.16/c-api/frame.html#c.PyFrame_GetLocals), [`locals()`](https://python-all.ru/3.16/library/functions.html#locals) и [`FrameType.f_locals`](https://python-all.ru/3.16/reference/datamodel.html#frame.f_locals) больше не обращаются к одному и тому же базовому кэшированному словарю. Изменения, внесённые в записи для реальных имён переменных и имён, добавленных через интерфейсы прокси со сквозной записью, будут перезаписаны при последующих вызовах `PyEval_GetLocals()` в этом фрейме. Рекомендуемое обновление кода зависит от того, как использовалась функция, поэтому для подробностей обратитесь к уведомлению об устаревании этой функции.1576 - Вызов [`PyFrame_GetLocals()`](https://python-all.ru/3.16/c-api/frame.html#c.PyFrame_GetLocals) в [оптимизированной области видимости](https://python-all.ru/3.16/glossary.html#term-optimized-scope) теперь возвращает прокси со сквозной записью, а не снимок, который обновляется в неопределённые моменты. Если нужен снимок, его нужно создать явно (например, с помощью [`PyDict_Copy()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_Copy)) или вызвав новый API [`PyEval_GetFrameLocals()`](https://python-all.ru/3.16/c-api/reflection.html#c.PyEval_GetFrameLocals).1577 - `PyFrame_FastToLocals()` и `PyFrame_FastToLocalsWithError()` больше не имеют никакого эффекта. Вызов этих функций был избыточен начиная с Python 3.11, когда был впервые введён [`PyFrame_GetLocals()`](https://python-all.ru/3.16/c-api/frame.html#c.PyFrame_GetLocals).1578 - `PyFrame_LocalsToFast()` больше не имеет никакого эффекта. Вызов этой функции избыточен теперь, когда [`PyFrame_GetLocals()`](https://python-all.ru/3.16/c-api/frame.html#c.PyFrame_GetLocals) возвращает прокси со сквозной записью для [оптимизированных областей видимости](https://python-all.ru/3.16/glossary.html#term-optimized-scope).1579- Python 3.13 удалил множество закрытых функций. Некоторые из них можно заменить следующими альтернативами:15801581 - `_PyDict_Pop()`: [`PyDict_Pop()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_Pop) или [`PyDict_PopString()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_PopString);1582 - `_PyDict_GetItemWithError()`: [`PyDict_GetItemRef()`](https://python-all.ru/3.16/c-api/dict.html#c.PyDict_GetItemRef);1583 - `_PyErr_WriteUnraisableMsg()`: [`PyErr_FormatUnraisable()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_FormatUnraisable);1584 - `_PyEval_SetTrace()`: [`PyEval_SetTrace()`](https://python-all.ru/3.16/c-api/profiling.html#c.PyEval_SetTrace) или [`PyEval_SetTraceAllThreads()`](https://python-all.ru/3.16/c-api/profiling.html#c.PyEval_SetTraceAllThreads);1585 - `_PyList_Extend()`: [`PyList_Extend()`](https://python-all.ru/3.16/c-api/list.html#c.PyList_Extend);1586 - `_PyLong_AsInt()`: [`PyLong_AsInt()`](https://python-all.ru/3.16/c-api/long.html#c.PyLong_AsInt);1587 - `_PyMem_RawStrdup()`: `strdup()`;1588 - `_PyMem_Strdup()`: `strdup()`;1589 - `_PyObject_ClearManagedDict()`: [`PyObject_ClearManagedDict()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_ClearManagedDict);1590 - `_PyObject_VisitManagedDict()`: [`PyObject_VisitManagedDict()`](https://python-all.ru/3.16/c-api/object.html#c.PyObject_VisitManagedDict);1591 - `_PyThreadState_UncheckedGet()`: [`PyThreadState_GetUnchecked()`](https://python-all.ru/3.16/c-api/threads.html#c.PyThreadState_GetUnchecked);1592 - `_PyTime_AsSecondsDouble()`: [`PyTime_AsSecondsDouble()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_AsSecondsDouble);1593 - `_PyTime_GetMonotonicClock()`: [`PyTime_Monotonic()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_Monotonic) или [`PyTime_MonotonicRaw()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_MonotonicRaw);1594 - `_PyTime_GetPerfCounter()`: [`PyTime_PerfCounter()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_PerfCounter) или [`PyTime_PerfCounterRaw()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_PerfCounterRaw);1595 - `_PyTime_GetSystemClock()`: [`PyTime_Time()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_Time) или [`PyTime_TimeRaw()`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_TimeRaw);1596 - `_PyTime_MAX`: [`PyTime_MAX`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_MAX);1597 - `_PyTime_MIN`: [`PyTime_MIN`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_MIN);1598 - `_PyTime_t`: [`PyTime_t`](https://python-all.ru/3.16/c-api/time.html#c.PyTime_t);1599 - `_Py_HashPointer()`: [`Py_HashPointer()`](https://python-all.ru/3.16/c-api/hash.html#c.Py_HashPointer);1600 - `_Py_IsFinalizing()`: [`Py_IsFinalizing()`](https://python-all.ru/3.16/c-api/interp-lifecycle.html#c.Py_IsFinalizing).16011602 Проект [pythoncapi-compat](https://python-all.ru/3.16/whatsnew/3.13.html) можно использовать для получения большинства этих новых функций в Python 3.12 и старше.16031604## Изменения в тестах регрессии16051606- Python, собранный с `configure` [`--with-pydebug`](https://python-all.ru/3.16/using/configure.html#cmdoption-with-pydebug), теперь поддерживает опцию командной строки [`-X presite=package.module`](https://python-all.ru/3.16/using/cmdline.html#cmdoption-X). Если она указана, задаёт модуль, который должен импортироваться в начале жизненного цикла интерпретатора, до выполнения `site.py`. (Автор: Łukasz Langa в [gh-110769](https://python-all.ru/3.16/whatsnew/3.13.html).)1607