Что нового в Python 3.13¶
- Редактор:
Томас Воутерс
В этой статье рассказывается о новых возможностях в Python 3.13 по сравнению с 3.12.
Подробную информацию смотрите в changelog.
См.также
PEP 719 – График выхода Python 3.13
Примечание
Пользователи пререлиза должны знать, что этот документ в настоящее время находится в черновом варианте. Он будет существенно обновляться по мере продвижения Python 3.13 к релизу, поэтому стоит вернуться к нему даже после прочтения предыдущих версий.
Резюме - Основные моменты выпуска¶
Python 3.13 beta - это предварительный релиз следующей версии языка программирования Python, содержащий множество изменений в языке, реализации и стандартной библиотеке. Самые значительные изменения в реализации включают новый интерактивный интерпретатор, экспериментальную поддержку отказа от блокировки глобального интерпретатора (PEP 703) и компилятора Just-In-Time (PEP 744). Изменения в библиотеке содержат удаление устаревших API и модулей, а также обычные улучшения в удобстве использования и корректности.
Улучшения в работе переводчика:
Значительно улучшенные interactive interpreter и improved error messages.
Поддержка цвета в новом interactive interpreter, а также в выводах tracebacks и doctest. Это можно отключить с помощью переменных окружения
PYTHON_COLORS
иNO_COLOR
.PEP 744: Была добавлена базовая JIT compiler. В настоящее время он отключен по умолчанию (хотя мы можем включить его позже). Улучшения производительности скромные - мы планируем улучшить это в следующих выпусках.
PEP 667: Встроенный модуль
locals()
теперь имеет defined semantics при мутации возвращаемого отображения. Отладчики Python и аналогичные инструменты теперь могут более надежно обновлять локальные переменные в оптимизированных диапазонах даже во время параллельного выполнения кода.
Новые возможности набора текста:
PEP 696: Параметры типа (
typing.TypeVar
,typing.ParamSpec
иtyping.TypeVarTuple
) теперь поддерживают значения по умолчанию.PEP 702: Поддержка маркировки устареваний в системе типов с помощью нового декоратора
warnings.deprecated()
.PEP 742:
typing.TypeIs
, обеспечивая более интуитивное поведение сужения типа.PEP 705:
typing.ReadOnly
был добавлен, чтобы пометить элементtyping.TypedDict
как доступный только для чтения для средств проверки типов.
Свободно-поточная обработка:
PEP 703: В CPython 3.13 появилась экспериментальная поддержка запуска с отключенным global interpreter lock при сборке с
--disable-gil
. Более подробную информацию см. в разделе Free-threaded CPython.
Поддержка платформ:
PEP 730: iOS от Apple теперь является официально поддерживаемой платформой. Официальная поддержка Android (PEP 738) также находится в разработке.
Удаленные модули:
PEP 594: Оставшиеся 19 «севших батарей» были удалены из стандартной библиотеки:
aifc
,audioop
,cgi
,cgitb
,chunk
,crypt
,imghdr
,mailcap
,msilib
,nis
,nntplib
,ossaudiodev
,pipes
,sndhdr
,spwd
,sunau
,telnetlib
,uu
иxdrlib
.Также были удалены модули
tkinter.tix
иlib2to3
, а также программа2to3
.
Изменения в расписании релизов:
PEP 602 («Годовой цикл выпуска для Python») был обновлен:
Python 3.9 - 3.12 имеет полтора года полной поддержки, а затем три с половиной года исправлений безопасности.
Python 3.13 и более поздние версии имеют два года полной поддержки, а затем три года исправлений безопасности.
Новые возможности¶
Лучший интерактивный переводчик¶
В Unix-подобных системах, таких как Linux или macOS, а также Windows, Python теперь использует новую оболочку interactive. Когда пользователь запускает REPL с интерактивного терминала, интерактивная оболочка теперь поддерживает следующие новые возможности:
Раскрашенные подсказки.
Многострочное редактирование с сохранением истории.
Интерактивный просмотр справки с помощью F1 с отдельной историей команд.
Просмотр истории с помощью F2, который пропускает вывод, а также подсказки >>> и ….
«Режим вставки» с помощью клавиши F3 облегчает вставку больших блоков кода (нажмите F3 еще раз, чтобы вернуться к обычной подсказке).
Возможность вводить специфические для REPL команды, такие как help, exit и quit, без необходимости использовать вызывающие скобки после имени команды.
Если новая интерактивная оболочка не нужна, ее можно отключить с помощью переменной окружения PYTHON_BASIC_REPL
.
Новая оболочка требует curses
в Unix-подобных системах.
Подробнее об интерактивном режиме см. в разделе Интерактивный режим.
(Внесен Пабло Галиндо Сальгадо, Лукашем Ланга и Лисандросом Николау в gh-111201 на основе кода из проекта PyPy. В поддержку Windows внесли вклад Дино Вьеланд и Энтони Шоу).
Улучшенные сообщения об ошибках¶
Интерпретатор теперь по умолчанию окрашивает сообщения об ошибках при отображении трассировки. Этой возможностью можно управлять с помощью новой переменной окружения
PYTHON_COLORS
, а также канонических переменных окруженияNO_COLOR
иFORCE_COLOR
. См. также Управление цветом. (Внесено Пабло Галиндо Сальгадо в gh-112730).
Частой ошибкой является написание скрипта с тем же именем, что и модуль стандартной библиотеки. Когда это приводит к ошибкам, мы теперь выводим более полезное сообщение об ошибке:
$ python random.py Traceback (most recent call last): File "/home/random.py", line 1, in <module> import random; print(random.randint(5)) ^^^^^^^^^^^^^ File "/home/random.py", line 1, in <module> import random; print(random.randint(5)) ^^^^^^^^^^^^^^ AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/random.py' since it has the same name as the standard library module named 'random' and the import system gives it precedence)
Аналогично, если скрипт имеет то же имя, что и сторонний модуль, который он пытается импортировать, и это приводит к ошибкам, мы также выводим более полезное сообщение об ошибке:
$ python numpy.py Traceback (most recent call last): File "/home/numpy.py", line 1, in <module> import numpy as np; np.array([1,2,3]) ^^^^^^^^^^^^^^^^^^ File "/home/numpy.py", line 1, in <module> import numpy as np; np.array([1,2,3]) ^^^^^^^^ AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/numpy.py' if it has the same name as a third-party module you intended to import)
(Предоставлено Shantanu Jain в gh-95754).
Когда в функцию передается неверный аргумент ключевого слова, в сообщении об ошибке теперь потенциально предлагается правильный аргумент ключевого слова. (Вклад внесли Пабло Галиндо Сальгадо и Шантану Джайн в gh-107944).
>>> "better error messages!".split(max_split=1) Traceback (most recent call last): File "<stdin>", line 1, in <module> "better error messages!".split(max_split=1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?
Классы имеют новый атрибут
__static_attributes__
, заполняемый компилятором, с кортежем имен атрибутов этого класса, доступ к которым осуществляется черезself.X
из любой функции в его теле. (Внесено Ирит Катриэль в gh-115775).
Определена семантика мутации для locals()
.¶
Исторически сложилось так, что ожидаемый результат изменения возвращаемого значения locals()
оставался на усмотрение отдельных реализаций Python.
Благодаря PEP 667, Python 3.13 стандартизирует историческое поведение CPython для большинства областей выполнения кода, но изменяет optimized scopes (функции, генераторы, короутины, осмысления и генераторы выражений), чтобы явно возвращать независимые снимки локальных переменных, назначенных в данный момент, включая нелокальные переменные с локальными ссылками, захваченные в закрытиях.
Это изменение семантики locals()
в оптимизированных диапазонах также влияет на поведение по умолчанию функций выполнения кода, которые неявно обращаются к locals()
, если не указано явное пространство имен (например, exec()
и eval()
). В предыдущих версиях возможность доступа к изменениям путем вызова locals()
после вызова функции выполнения кода зависела от реализации. В частности, в CPython такой код обычно работал как надо, но иногда мог не работать в оптимизированных областях из-за того, что другой код (включая отладчики и средства отслеживания выполнения кода) потенциально мог сбросить общий снимок в этой области. Теперь код всегда будет работать с независимым снимком локальных переменных в оптимизированных областях, и, следовательно, изменения никогда не будут видны при последующих вызовах locals()
. Чтобы получить доступ к изменениям, сделанным в этих случаях, теперь необходимо передать соответствующей функции явную ссылку на пространство имен. В качестве альтернативы, возможно, имеет смысл обновить затронутый код, чтобы он использовал API более высокого уровня, который возвращает результирующее пространство имен выполнения кода (например, runpy.run_path()
при выполнении файлов Python с диска).
Чтобы отладчики и подобные инструменты могли надежно обновлять локальные переменные в областях, затронутых этим изменением, FrameType.f_locals
теперь возвращает прокси для записи в локальные и нелокальные переменные фрейма в этих областях, а не возвращает непоследовательно обновленный общий экземпляр dict
с неопределенной семантикой во время выполнения.
Более подробную информацию, включая связанные с этим изменения в API на языке C и устаревания, см. в разделе PEP 667. Ниже также приведены примечания по переносу для затронутых Python APIs и C APIs.
(Вклад в PEP и реализацию внесли Марк Шеннон и Тиан Гао в gh-74929. Обновления документации предоставлены Гвидо ван Россумом и Алиссой Коглан).
Инкрементная сборка мусора¶
Цикл сборщика мусора теперь инкрементный. Это означает, что максимальное время паузы сокращается на порядок или более для больших куч.
Поддержка мобильных платформ¶
iOS теперь является PEP 11 поддерживаемой платформой.
arm64-apple-ios
(устройства iPhone и iPad, выпущенные после 2013 года) иarm64-apple-ios-simulator
(симулятор Xcode iOS, работающий на оборудовании Apple Silicon) теперь являются платформами третьего уровня.x86_64-apple-ios-simulator
(симулятор Xcode iOS, работающий на старом оборудовании x86_64) не является поддерживаемой платформой третьего уровня, но будет поддерживаться по мере сил.Более подробную информацию см. в разделе PEP 730.
(PEP написан и реализован Расселом Кейт-Мейджи в gh-114099).
Экспериментальный JIT-компилятор¶
Когда CPython настроен с помощью опции --enable-experimental-jit
, добавляется компилятор just-in-time, который может ускорить работу некоторых программ на Python.
Внутренняя архитектура выглядит следующим образом.
Мы начнем со специализированного байткода уровня 1. Подробности см. в разделе What’s new in 3.11.
Когда байткод уровня 1 становится достаточно горячим, он переводится на новый, чисто внутренний уровень 2 IR, он же микрооперации («uops»).
В Tier 2 IR используется та же стековая ВМ, что и в Tier 1, но формат инструкций лучше подходит для трансляции в машинный код.
У нас есть несколько этапов оптимизации для Tier 2 IR, которые применяются перед интерпретацией или переводом в машинный код.
Существует интерпретатор уровня 2, но он в основном предназначен для отладки ранних этапов конвейера оптимизации. Интерпретатор уровня 2 можно включить, задав в конфигурации Python значение
--enable-experimental-jit=interpreter
.Когда JIT включен, оптимизированный Tier 2 IR транслируется в машинный код, который затем выполняется.
В процессе трансляции машинного кода используется техника, называемая copy-and-patch. У него нет зависимостей во время выполнения, но есть новая зависимость от LLVM во время сборки.
Флаг --enable-experimental-jit
имеет следующие необязательные значения:
no
(по умолчанию) – отключение всего конвейера Tier 2 и JIT.yes
(по умолчанию, если флаг присутствует без необязательного значения) – Включить JIT. Чтобы отключить JIT во время выполнения, передайте переменную окруженияPYTHON_JIT=0
.yes-off
– Создайте JIT, но отключите его по умолчанию. Чтобы включить JIT во время выполнения, передайте переменную окруженияPYTHON_JIT=1
.interpreter
– Включить интерпретатор уровня 2, но отключить JIT. Интерпретатор можно отключить, выполнив командуPYTHON_JIT=0
.
(В Windows используйте PCbuild/build.bat --experimental-jit
, чтобы включить JIT, или --experimental-jit-interpreter
, чтобы включить интерпретатор уровня 2).
Более подробную информацию см. в разделе PEP 744.
(JIT от Брандта Бухера, вдохновленный статьей Хаорана Сю и Фредрика Кьолстада. Tier 2 IR от Марка Шеннона и Гвидо ван Россума. Оптимизатор второго уровня - Кен Джин).
Свободнопоточный CPython¶
CPython будет работать с отключенным global interpreter lock (GIL), если во время сборки использовать опцию --disable-gil
. Это экспериментальная функция, поэтому по умолчанию она не используется. Пользователям необходимо либо скомпилировать свой собственный интерпретатор, либо установить одну из экспериментальных сборок, помеченных как свободнопоточные. См. PEP 703 «Как сделать глобальную блокировку интерпретатора необязательной в CPython» для более подробной информации.
Свободно-поточное выполнение позволяет полностью использовать доступную вычислительную мощность, запуская потоки параллельно на доступных ядрах процессора. Хотя не все программы получают от этого автоматическую выгоду, программы, разработанные с учетом многопоточного исполнения, будут работать быстрее на многоядерном оборудовании.
Работа все еще продолжается: ожидайте некоторых ошибок и значительного снижения производительности в однопоточном режиме.
Свободно-поточная сборка по-прежнему поддерживает возможность запуска с включенным GIL во время выполнения с помощью переменной окружения PYTHON_GIL
или опции командной строки -X gil
.
Чтобы проверить, сконфигурирован ли текущий интерпретатор с --disable-gil
, используйте функцию sysconfig.get_config_var("Py_GIL_DISABLED")
. Чтобы проверить, действительно ли GIL отключен в запущенном процессе, можно использовать функцию sys._is_gil_enabled()
.
Модули расширения C-API должны быть собраны специально для свободно-поточной сборки. Расширения, поддерживающие запуск с отключенным GIL, должны использовать слот Py_mod_gil
. Расширения, использующие однофазный init, должны использовать PyUnstable_Module_SetGIL()
, чтобы указать, поддерживают ли они запуск с отключенным GIL. Импорт расширений C, не использующих эти механизмы, приведет к включению GIL, если только GIL не был явно отключен с помощью переменной окружения PYTHON_GIL
или опции -X gil=0
.
Для установки пакетов с расширениями C в свободно-поточной сборке требуется pip 24.1b1 или новее.
Другие языковые изменения¶
Разрешите аргументу count в
str.replace()
быть ключевым словом. (Внесено Хьюго ван Кеменаде в gh-106487).Компилятор теперь удаляет отступы от строк документов. Это уменьшит размер bytecode cache (например, файла
.pyc
). Например, размер кэш-файла дляsqlalchemy.orm.session
в SQLAlchemy 2.0 уменьшился примерно на 5%. Это изменение затронет и инструменты, использующие документированные строки, напримерdoctest
. (Внесено Инадой Наоки в gh-81283).Встроенный
compile()
теперь может принимать новый флаг,ast.PyCF_OPTIMIZED_AST
, который аналогиченast.PyCF_ONLY_AST
, за исключением того, что возвращаемыйAST
оптимизируется в зависимости от значения аргументаoptimize
. (Внесено Ирит Катриэль в gh-108113).multiprocessing
,concurrent.futures
,compileall
: Заменитеos.cpu_count()
наos.process_cpu_count()
, чтобы выбрать количество рабочих потоков и процессов по умолчанию. Получите сродство к процессору, если оно поддерживается. (Внесено Виктором Стиннером в gh-109649).os.path.realpath()
теперь разрешает имена файлов в стиле MS-DOS, даже если файл недоступен. (Внесено Мунсиком Парком в gh-82367).Исправлена ошибка, при которой объявление
global
в блокеexcept
отклонялось, если глобал использовался в блокеelse
. (Внесено Ирит Катриэль в gh-111123).Многие функции теперь выдают предупреждение, если в качестве аргумента дескриптора файла передается булево значение. Это может помочь обнаружить некоторые ошибки раньше. (Внесено Сергеем Сторчакой в gh-82626).
Добавлена новая переменная окружения
PYTHON_FROZEN_MODULES
. Она определяет, будут ли замороженные модули игнорироваться механизмом импорта, что эквивалентно опции командной строки-X frozen_modules
. (Внесена Йилей Ян в gh-111374).Добавьте support for the perf profiler работу без указателей кадров с помощью новой переменной окружения
PYTHON_PERF_JIT_SUPPORT
и опции командной строки-X perf_jit
(Внесено Пабло Галиндо в gh-118518).Новая переменная окружения
PYTHON_HISTORY
может быть использована для изменения местоположения файла.python_history
. (Внесено Леви Сабахом, Закери Спитцем и Хьюго ван Кеменаде в gh-73965).Добавьте исключение
PythonFinalizationError
. Это исключение, производное отRuntimeError
, возникает, когда операция блокируется во время выполнения Python finalization.Следующие функции теперь вызывают ошибку PythonFinalizationError, а не
RuntimeError
:(Внесено Виктором Стиннером в gh-114570).
Добавлены атрибуты
name
иmode
для сжатых и архивированных файлоподобных объектов в модуляхbz2
,lzma
,tarfile
иzipfile
. (Внесено Сергеем Сторчакой в gh-115961).Позволяет управлять Expat >=2.6.0 reparse deferral (CVE-2023-52425), добавив пять новых методов:
xml.sax.expatreader.ExpatParser.flush()
(Внесено Себастьяном Пиппингом в gh-115623).
API
ssl.create_default_context()
API теперь включаетssl.VERIFY_X509_PARTIAL_CHAIN
иssl.VERIFY_X509_STRICT
в свои флаги по умолчанию.Примечание
ssl.VERIFY_X509_STRICT
может отклонять сертификаты с предварительным:rfc:5280 или неправильным оформлением, которые в противном случае реализация OpenSSL могла бы принять. Хотя отключать эту функцию не рекомендуется, вы можете сделать это с помощью:ctx = ssl.create_default_context() ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT
(Внесено Уильямом Вудруфом в gh-112389).
Теперь
configparser.ConfigParser
принимает неименованные секции перед именованными, если они настроены на это. (Внесено Педро Соузой Ласердой в gh-66449).annotation scope внутри диапазонов классов теперь может содержать ламбды и понимания. Постижения, расположенные внутри диапазонов классов, не вставляются в родительский диапазон. (Вклад Jelle Zijlstra в gh-109118 и gh-118160).
У классов появился новый атрибут
__firstlineno__
, заполняемый компилятором и содержащий номер первой строки определения класса. (Внесено Сергеем Сторчакой в gh-118465).Операторы
from __future__ import ...
теперь являются обычными относительными импортами, если перед именем модуля присутствуют точки. (Внесено Иеремией Габриэлем Паскуалем в gh-118216).
Новые модули¶
Нет.
Улучшенные модули¶
argparse¶
Добавьте параметр deprecated в методы
add_argument()
иadd_parser()
, который позволяет устаревать опции командной строки, позиционные аргументы и подкоманды. (Внесено Сергеем Сторчакой в gh-83648).
массив¶
ast¶
Конструкторы типов узлов в модуле
ast
теперь более строги к аргументам, которые они принимают, и имеют более интуитивное поведение, когда аргументы опущены.Если необязательное поле узла AST не включено в качестве аргумента при создании экземпляра, то теперь это поле будет установлено в значение
None
. Аналогично, если опущено поле списка, то теперь оно будет установлено в пустой список, а если опущено полеast.expr_context
, то по умолчанию будет установлено значениеLoad()
. (Ранее во всех случаях атрибут отсутствовал во вновь построенном экземпляре узла AST).Если другие аргументы опущены, выдается
DeprecationWarning
. Это вызовет исключение в Python 3.15. Аналогично, передача аргумента ключевого слова, который не сопоставляется с полем в узле AST, теперь устарела и вызовет исключение в Python 3.15.Эти изменения не распространяются на пользовательские подклассы
ast.AST
, если только класс не согласится с новым поведением, установив атрибутast.AST._field_types
.(Внесено Jelle Zijlstra в gh-105858, gh-117486 и gh-118851).
ast.parse()
теперь принимает необязательный аргумент optimize, который передается во встроенную функциюcompile()
. Это позволяет получить оптимизированный AST. (Внесено Ирит Катриэль в gh-108113).
asyncio¶
asyncio.loop.create_unix_server()
теперь будет автоматически удалять Unix-сокет при закрытии сервера. (Внесено Пьером Оссманом в gh-111246).asyncio.DatagramTransport.sendto()
теперь будет отправлять дейтаграммы нулевой длины, если вызвать его с пустым объектом bytes. Управление транспортным потоком также теперь учитывает заголовок дейтаграммы при расчете размера буфера. (Внесено Джейми Фаном в gh-115199).Добавьте методы
asyncio.Server.close_clients()
иasyncio.Server.abort_clients()
, позволяющие более принудительно закрывать сервер asyncio. (Внесено Пьером Оссманом в gh-113538).asyncio.as_completed()
теперь возвращает объект, который одновременно является asynchronous iterator и обычным iterator из awaitables. Ожидаемые объекты, получаемые при асинхронной итерации, включают в себя исходные объекты задач или будущих, которые были переданы, что облегчает ассоциацию результатов с выполняемыми задачами. (Внесено Джастином Артуром в gh-77714).Когда
asyncio.TaskGroup.create_task()
вызывается на неактивномasyncio.TaskGroup
, данный корутин будет закрыт (что предотвращает появлениеRuntimeWarning
о том, что данный корутин никогда не ожидался). (Внесено Артуром Такка и Джейсоном Чжаном в gh-115957).Улучшено поведение
asyncio.TaskGroup
, когда внешняя отмена сталкивается с внутренней отменой. Например, когда две группы задач вложены друг в друга и обе одновременно испытывают исключение в дочерней задаче, могло произойти зависание внешней группы задач, поскольку ее внутренняя отмена была поглощена внутренней группой задач.В случае, когда группа задач отменяется извне и также должна поднять
ExceptionGroup
, она теперь будет вызывать методcancel()
родительской задачи. Это гарантирует, чтоasyncio.CancelledError
будет поднят при следующемawait
, так что отмена не будет потеряна.Дополнительным преимуществом этих изменений является то, что группы задач теперь сохраняют счетчик отмен (
asyncio.Task.cancelling()
).Для обработки некоторых угловых случаев
asyncio.Task.uncancel()
теперь может сбрасывать недокументированный флаг_must_cancel
, когда счетчик отмены достигает нуля.(Навеяно проблемой, о которой сообщил Артур Такка в gh-116720).
Добавьте
asyncio.Queue.shutdown()
(вместе сasyncio.QueueShutDown
) для завершения очереди. (Внесено Лори Опперманом и Ивом Дюпра в gh-104228).Принимает кортеж разделителей в
asyncio.StreamReader.readuntil()
, останавливаясь, когда встречается один из них. (Внесено Брюсом Мерри в gh-81322).
base64¶
Добавьте функции
base64.z85encode()
иbase64.z85decode()
, которые позволяют кодировать и декодировать данные Z85. Дополнительную информацию см. в Z85 specification. (Внесено Матаном Перельманом в gh-75299).
копия¶
Добавьте функцию
copy.replace()
, которая позволяет создать модифицированную копию объекта, что особенно полезно для неизменяемых объектов. Она поддерживает именованные кортежи, созданные с помощью фабричной функцииcollections.namedtuple()
, экземплярыdataclass
, различныеdatetime
объекты,Signature
объекты,Parameter
объекты, code object и любые пользовательские классы, определяющие метод__replace__()
. (Внесено Сергеем Сторчакой в gh-108751).
ctypes¶
Расположение bit fields в
Structure
иUnion
было улучшено, чтобы лучше соответствовать платформе по умолчанию (GCC/Clang или MSC). В частности, поля больше не перекрываются. (Внесено Маттиасом Гёргенсом в gh-97702).Атрибут класса
ctypes.Structure._layout_
может быть установлен для соответствия ABI не по умолчанию. (Внесено Петром Викторином в gh-97702).
dbm¶
Добавьте методы
dbm.gnu.gdbm.clear()
иdbm.ndbm.ndbm.clear()
, которые удаляют все элементы из базы данных. (Внесено Donghee Na в gh-107122).Добавьте новый бэкэнд
dbm.sqlite3
и сделайте его бэкэндом по умолчаниюdbm
. (Внесено Раймондом Хеттингером и Эрлендом Э. Аасландом в gh-100414).
dis¶
doctest¶
По умолчанию цвет добавляется к выводу. Это можно контролировать с помощью новой переменной окружения
PYTHON_COLORS
, а также канонических переменных окруженияNO_COLOR
иFORCE_COLOR
. См. также Управление цветом. (Внесено Хьюго ван Кеменаде в gh-117225).Метод
doctest.DocTestRunner.run()
теперь подсчитывает количество пропущенных тестов. Добавьте атрибутыdoctest.DocTestRunner.skips
иdoctest.TestResults.skipped
. (Внесено Виктором Стиннером в gh-108794).
e-mail¶
email.utils.getaddresses()
иemail.utils.parseaddr()
теперь возвращают 2-кортежи('', '')
в большем количестве ситуаций, когда встречаются недействительные адреса электронной почты, вместо потенциально неточных значений. Добавьте необязательный параметр strict к этим двум функциям: используйтеstrict=False
, чтобы получить старое поведение, принимающее неправильно оформленные входные данные.getattr(email.utils, 'supports_strict_parsing', False)
можно использовать для проверки наличия параметра strict. (Вклад Томаса Дуайера и Виктора Стиннера в gh-102988 для улучшения исправления CVE-2023-27043).
фракции¶
Форматирование объектов типа
fractions.Fraction
теперь поддерживает правила стандартного мини-языка спецификации формата для заливки, выравнивания, обработки знаков, минимальной ширины и группировки. (Внесено Марком Дикинсоном в gh-111320).
gc¶
Циклический сборщик мусора теперь инкрементный, что меняет значения результатов
gc.get_threshold()
иgc.set_threshold()
, а такжеgc.get_count()
иgc.get_stats()
.gc.get_threshold()
возвращает кортеж из трех элементов для обратной совместимости. Первое значение - порог для молодых коллекций, как и раньше; второе значение определяет скорость, с которой сканируется старая коллекция (по умолчанию 10, а более высокие значения означают, что старая коллекция сканируется медленнее). Третье значение не имеет смысла и всегда равно нулю.gc.set_threshold()
игнорирует все элементы после второго.gc.get_count()
иgc.get_stats()
возвращают тот же формат результатов, что и раньше. Единственное отличие заключается в том, что вместо результатов, относящихся к молодому, стареющему и старому поколениям, результаты относятся к молодому поколению, стареющему и собирающему пространства старому поколению.
В общем, код, пытающийся манипулировать поведением цикла GC, может работать не совсем так, как было задумано, но вероятность того, что он будет вреден, очень мала. Весь остальной код будет работать нормально.
глобус¶
Добавьте функцию
glob.translate()
, которая преобразует спецификацию пути с подстановочными знаками в стиле shell в регулярное выражение. (Внесено Барни Гейлом в gh-72904).
importlib¶
Ранее устаревшие функции
importlib.resources
больше не устаревают:Все они теперь позволяют создавать каталог (или дерево) ресурсов, используя несколько позиционных аргументов.
Для функций чтения текста, кодировка и ошибки теперь должны быть указаны как аргументы ключевого слова.
API
contents()
остается устаревшим в пользу полнофункциональногоTraversable
. API. Однако в настоящее время его удаление не планируется.(Внесено Петром Викториным в gh-106532).
io¶
Финализатор
io.IOBase
теперь регистрирует ошибки методаclose()
вsys.unraisablehook
. Ранее ошибки по умолчанию игнорировались молча и регистрировались только в Python Development Mode или на Python built on debug mode. (Внесено Виктором Стиннером в gh-62948).
ipaddress¶
Добавьте свойство
ipaddress.IPv4Address.ipv6_mapped
, которое возвращает IPv4-сопоставленный IPv6-адрес. (Внесено Чарльзом Мачалоу в gh-109466).Исправьте поведение
is_global
иis_private
вIPv4Address
,IPv6Address
,IPv4Network
иIPv6Network
.
itertools¶
Добавлена опция
strict
кitertools.batched()
. Это вызывает ошибкуValueError
, если конечная партия короче указанного размера партии. (Внесено Раймондом Хеттингером в gh-113202).
маршал¶
Добавьте параметр allow_code в функции модуля. Передача
allow_code=False
предотвращает сериализацию и де-сериализацию объектов кода, которые несовместимы между версиями Python. (Внесено Сергеем Сторчакой в gh-113626).
математика¶
Добавлена новая функция
fma()
для слитных операций умножения-аддирования. Эта функция вычисляетx * y + z
только за один раунд, что позволяет избежать промежуточной потери точности. Она обертывает функциюfma()
, предусмотренную в C99, и следует спецификации операции IEEE 754 «fusedMultiplyAdd» для особых случаев. (Внесено Марком Дикинсоном и Виктором Стиннером в gh-73468).
mimetypes¶
Добавьте функцию
guess_file_type()
, которая работает с путем к файлу. Передача пути к файлу вместо URL вguess_type()
является soft deprecated. (Внесено Сергеем Сторчакой в gh-66543).
mmap¶
У класса
mmap.mmap
теперь есть методseekable()
, который можно использовать, когда требуется объект, похожий на файл с возможностью поиска. Методseek()
теперь возвращает новую абсолютную позицию. (Вклад Донгхи На и Сильви Либерман в gh-111835).mmap.mmap
теперь имеет параметр trackfd в Unix; если он равенFalse
, дескриптор файла, указанный fileno, не будет дублироваться. (Внесено Закери Спитцем и Петром Викторином в gh-78502).mmap.mmap
теперь защищен от сбоев в Windows, когда отображаемая память недоступна из-за ошибок файловой системы или нарушений доступа. (Внесено Яннисом Вайгендом в gh-118209).
опкод¶
Переместите
opcode.ENABLE_SPECIALIZATION
в_opcode.ENABLE_SPECIALIZATION
. Это поле было добавлено в 3.12, оно никогда не документировалось и не предназначено для внешнего использования. (Внесено Ирит Катриэль в gh-105481).Удалены
opcode.is_pseudo
,opcode.MIN_PSEUDO_OPCODE
иopcode.MAX_PSEUDO_OPCODE
, которые были добавлены в 3.12, никогда не документировались и не раскрывались черезdis
, и не предназначались для внешнего использования.
os¶
Добавьте функцию
os.process_cpu_count()
для получения количества логических процессоров, используемых вызывающим потоком текущего процесса. (Внесено Виктором Стиннером в gh-109649).Добавьте низкоуровневый интерфейс для файловых дескрипторов уведомлений таймера в Linux через
os.timerfd_create()
,os.timerfd_settime()
,os.timerfd_settime_ns()
,os.timerfd_gettime()
иos.timerfd_gettime_ns()
,os.TFD_NONBLOCK
,os.TFD_CLOEXEC
,os.TFD_TIMER_ABSTIME
иos.TFD_TIMER_CANCEL_ON_SET
(Внесено Масару Цучиямой в gh-108277).Параметры
os.cpu_count()
иos.process_cpu_count()
могут быть переопределены с помощью новой переменной окруженияPYTHON_CPU_COUNT
или новой опции командной строки-X cpu_count
. Эта опция полезна для пользователей, которым нужно ограничить ресурсы процессора контейнерной системы без необходимости модифицировать контейнер (код приложения). (Внесено Donghee Na в gh-109595).Добавьте поддержку
os.lchmod()
и аргумента follow_symlinks вos.chmod()
под Windows. Обратите внимание, что по умолчанию значение follow_symlinks вos.lchmod()
равноFalse
в Windows. (Внесено Сергеем Сторчакой в gh-59616).Добавьте поддержку
os.fchmod()
и файлового дескриптора вos.chmod()
под Windows. (Внесено Сергеем Сторчакой в gh-113191).os.posix_spawn()
теперь принимаетenv=None
, что заставляет вновь порожденный процесс использовать текущее окружение процесса. (Внесено Якубом Куликом в gh-113119).os.posix_spawn()
приобретает атрибутos.POSIX_SPAWN_CLOSEFROM
для использования вfile_actions=
на платформах, поддерживающихposix_spawn_file_actions_addclosefrom_np()
. (Внесено Якубом Куликом в gh-113117).os.mkdir()
иos.makedirs()
в Windows теперь поддерживают передачу значения mode0o700
для применения контроля доступа к новому каталогу. Это неявно влияет наtempfile.mkdtemp()
и является смягчением для CVE-2024-4030. Другие значения mode по-прежнему игнорируются. (Внесено Стивом Дауэром в gh-118486).
os.path¶
Добавьте
os.path.isreserved()
, чтобы проверить, зарезервирован ли путь в текущей системе. Эта функция доступна только в Windows. (Внесено Барни Гейлом в gh-88569).В Windows
os.path.isabs()
больше не считает абсолютными пути, начинающиеся ровно с одной (обратной) косой черты. (Внесено Барни Гейлом и Джоном Фостером в gh-44626).Добавьте поддержку аргументов ключевых слов dir_fd и follow_symlinks в
shutil.chown()
. (Внесено Беркером Пексагом и Тахией К в gh-62308)
pathlib¶
Добавьте
pathlib.UnsupportedOperation
, который выдается вместоNotImplementedError
, когда операция пути не поддерживается. (Внесено Барни Гейлом в gh-89812).Добавьте
pathlib.Path.from_uri()
, новый конструктор для создания объектаpathlib.Path
из URI „file“ (file://
). (Внесено Барни Гейлом в gh-107465).Добавьте
pathlib.PurePath.full_match()
для сопоставления путей с подстановочными знаками в стиле shell, включая рекурсивный подстановочный знак «**
». (Внесено Барни Гейлом в gh-73435).Добавьте атрибут класса
pathlib.PurePath.parser
, который хранит реализациюos.path
, используемую для низкоуровневого разбора и соединения путей: либоposixpath
, либоntpath
.Добавьте аргумент recurse_symlinks только для ключевых слов в
pathlib.Path.glob()
иrglob()
. (Внесено Барни Гейлом в gh-77609).Добавьте аргумент follow_symlinks только для ключевых слов в
is_file()
,is_dir()
,owner()
,group()
. (Внесено Барни Гейлом в gh-105793 и Камилом Туреком в gh-107962).Возвращает файлы и каталоги из
pathlib.Path.glob()
иrglob()
, если задан шаблон, заканчивающийся на «**
». В предыдущих версиях возвращались только каталоги. (Внесено Барни Гейлом в gh-70303).
pdb¶
Добавьте возможность перемещаться между цепочками исключений во время посмертной отладки в
pm()
, используя новую командуexceptions [exc_number]
для Pdb. (Внесено Маттиасом Буссонье в gh-106676).Выражения/высказывания, префиксом которых является команда pdb, теперь правильно определяются и выполняются. (Внесено Тянем Гао в gh-108464).
sys.path[0]
больше не будет заменяться каталогом отлаживаемого сценария, если заданsys.flags.safe_path
(через опцию командной строки-P
или переменную окруженияPYTHONSAFEPATH
). (Внесено Тианом Гао и Кристианом Вальтером в gh-111762).zipapp
поддерживается в качестве цели отладки. (Внесено Тянь Гао в gh-118501).breakpoint()
иpdb.set_trace()
теперь попадают в отладчик сразу, а не на следующей выполняемой строке кода. Это изменение предотвращает выход отладчика за пределы контекста, когдаbreakpoint()
располагается в конце контекста. (Внесено Тянь Гао в gh-118579).
очередь¶
Добавьте
queue.Queue.shutdown()
(вместе сqueue.ShutDown
) для завершения очереди. (Внесено Лори Опперманом и Ивом Дюпра в gh-104750).
случайно¶
Добавьте command-line interface. (Внесено Хьюго ван Кеменаде в gh-54321).
re¶
Переименуйте
re.error
вre.PatternError
для большей ясности.re.error
сохраняется для обратной совместимости.
сайт¶
Файлы
.pth
теперь сначала декодируются с помощью UTF-8, а затем с помощью locale encoding, если декодирование UTF-8 не удалось. (Внесено Инадой Наоки в gh-117802).
sqlite3¶
Теперь выдается
ResourceWarning
, если объектsqlite3.Connection
не являетсяclosed
явным. (Внесено Эрлендом Э. Аасланом в gh-105539).Добавьте в
sqlite3.Connection.iterdump()
параметр filter только с ключевым словом для фильтрации объектов базы данных для дампа. (Внесено Мариушем Фелисиаком в gh-91602).
статистика¶
Добавьте
statistics.kde()
для оценки плотности ядра. Это позволяет оценить непрерывную функцию плотности вероятности по фиксированному числу дискретных выборок. Также добавленstatistics.kde_random()
для выборки из оцененной функции плотности вероятности. (Внесено Раймондом Хеттингером в gh-115863).
подпроцесс¶
Модуль
subprocess
теперь использует функциюos.posix_spawn()
в большем количестве ситуаций. В частности, в случае использования по умолчаниюclose_fds=True
на более новых версиях платформ, включая Linux, FreeBSD и Solaris, где библиотека C предоставляетposix_spawn_file_actions_addclosefrom_np()
. В Linux этот код должен работать аналогично нашему существующемуvfork()
на базе Linux. Частный регуляторsubprocess._USE_POSIX_SPAWN
может быть установлен наFalse
, если вам нужно заставитьsubprocess
никогда не использоватьos.posix_spawn()
. Пожалуйста, сообщите о причине и платформе в трекере проблем CPython, если вы установили это значение, чтобы мы могли улучшить нашу логику выбора API для всех. (Внесено Якубом Куликом в gh-113117).
sys¶
Добавьте функцию
sys._is_interned()
, чтобы проверить, была ли строка интернирована. Наличие этой функции во всех реализациях Python не гарантируется. (Внесено Сергеем Сторчакой в gh-78573).
tempfile¶
В Windows режим по умолчанию
0o700
, используемыйtempfile.mkdtemp()
, теперь ограничивает доступ к новому каталогу из-за изменений вos.mkdir()
. Это смягчение для CVE-2024-4030. (Внесено Стивом Дауэром в gh-118486).
время¶
В Windows
time.monotonic()
теперь использует часыQueryPerformanceCounter()
с разрешением лучше, чем 1 us, вместо часовGetTickCount64()
, которые имеют разрешение 15,6 мс. (Внесено Виктором Стиннером в gh-88494).В Windows
time.time()
теперь использует часыGetSystemTimePreciseAsFileTime()
с разрешением лучше 1 мкс, а не часыGetSystemTimeAsFileTime()
, которые имеют разрешение 15,6 мс. (Внесено Виктором Стиннером в gh-63207).
tkinter¶
Добавьте методы виджетов
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).Метод
tkinter
виджетаwm_attributes()
теперь принимает имя атрибута без префикса минус для получения атрибутов окна, напримерw.wm_attributes('alpha')
, и позволяет указывать атрибуты и значения для установки в качестве аргументов по ключевому слову, напримерw.wm_attributes(alpha=0.5)
. Добавлен новый необязательный параметр return_python_dict, предназначенный только для ключевых слов: вызовw.wm_attributes(return_python_dict=True)
возвращает атрибуты в виде dict, а не кортежа. (Внесено Сергеем Сторчакой в gh-43457).Добавьте новый необязательный параметр return_ints в метод
Text.count()
. Передачаreturn_ints=True
заставляет его всегда возвращать одиночный счет в виде целого числа, а не 1 кортежа илиNone
. (Внесено Сергеем Сторчакой в gh-97928).Добавьте поддержку типа элемента «vsapi» в метод
element_create()
изtkinter.ttk.Style
. (Внесено Сергеем Сторчакой в gh-68166).Добавьте метод
after_info()
для виджетов Tkinter. (Внесено Шерил Сабелла в gh-77020).Добавьте метод
PhotoImage
copy_replace()
для копирования области с одного изображения на другое, возможно, с пиксельным масштабированием и/или поддискретизацией. Добавьте параметр from_coords в методыPhotoImage
copy()
,zoom()
иsubsample()
. Добавить параметры zoom и subsample в методPhotoImage
copy()
. (Внесено Сергеем Сторчакой в gh-118225).Добавьте методы
PhotoImage
read()
для чтения изображения из файла иdata()
для получения данных изображения. Добавьте параметры background и grayscale в методPhotoImage
write()
. (Внесено Сергеем Сторчакой в gh-118271).
traceback¶
Добавьте параметр show_group в
traceback.TracebackException.format_exception_only()
для рекурсивного форматирования вложенных исключений экземпляраBaseExceptionGroup
. (Внесено Ирит Катриэль в gh-105292).Добавьте в
TracebackException
поле exc_type_str, которое содержит строковое отображение exc_type. Утратить поле exc_type, в котором хранится сам объект типа. Добавьте параметр save_exc_type (по умолчаниюTrue
), чтобы указать, следует ли сохранятьexc_type
. (Внесено Ирит Катриэль в gh-112332).
типы¶
Конструктор
SimpleNamespace
теперь позволяет указывать начальные значения атрибутов в качестве позиционного аргумента, который должен представлять собой отображение или итерабель пар ключ-значение. (Внесено Сергеем Сторчакой в gh-108191).
набор текста¶
Добавьте
typing.get_protocol_members()
, чтобы вернуть набор членов, определяющихtyping.Protocol
. Добавьтеtyping.is_protocol()
для проверки того, является ли классtyping.Protocol
. (Внесено Jelle Zijlstra в gh-104873).Добавьте
typing.ReadOnly
, специальную конструкцию типизации, позволяющую пометить элементtyping.TypedDict
как доступный только для чтения для средств проверки типов. Подробнее см. в разделе PEP 705.Добавьте
typing.NoDefault
, объект sentinel, используемый для представления значений по умолчанию некоторых параметров в модулеtyping
. (Внесено Джеллом Зейлстра в gh-116126).
unicodedata¶
База данных Unicode была обновлена до версии 15.1.0. (Внесено Джеймсом Джерити в gh-109559).
venv¶
Добавьте поддержку добавления игнорируемых файлов управления контролем исходных текстов (SCM) в каталог виртуальной среды. По умолчанию поддерживается Git. Это реализовано как opt-in через API, который может быть расширен для поддержки других SCM (
venv.EnvBuilder
иvenv.create()
), и opt-out через CLI (с помощью--without-scm-ignore-files
). (Внесено Бреттом Кэнноном в gh-108125).
предупреждения¶
Новый декоратор
warnings.deprecated()
предоставляет возможность сообщать об устаревании в static type checkers и предупреждать об использовании устаревших классов и функций. Предупреждение об устаревании может также выдаваться, когда декорированная функция или класс используется во время выполнения. См. PEP 702. (Внесено Jelle Zijlstra в gh-104003).
xml.etree.ElementTree¶
Добавьте метод
close()
для итератора, возвращаемогоiterparse()
, для явной очистки. (Внесено Сергеем Сторчакой в gh-69893).
zipimport¶
Появилась поддержка файлов формата ZIP64. Все любят огромный код, верно? (Внесено Тимом Хэтчем в gh-94146).
Оптимизации¶
textwrap.indent()
теперь на ~30% быстрее, чем раньше, для больших входных данных. (Внесено Инадой Наоки в gh-107369).Модуль
subprocess
используетos.posix_spawn()
в большем количестве ситуаций, включая стандартныйclose_fds=True
на многих современных платформах. Это должно обеспечить заметный прирост производительности при запуске процессов на FreeBSD и Solaris. Подробности см. в разделе subprocess выше. (Внесено Якубом Куликом в gh-113117).Время импорта нескольких модулей стандартной библиотеки было значительно улучшено. Например, время импорта модуля
typing
сократилось примерно на треть за счет удаления зависимостей отre
иcontextlib
. Другие модули, время импорта которых ускорилось, включаютimportlib.metadata
,threading
,enum
,functools
иemail.utils
. (Вклад Алекса Уэйгуда, Шантану Джайна, Адама Тернера, Дэниела Холласа и других в gh-109653).
Удаленные модули и API¶
PEP 594: севшие батарейки (и другие способы удаления модулей)¶
PEP 594 удалил из стандартной библиотеки 19 модулей, устаревших в Python 3.11:
aifc
(Внесено Виктором Стиннером в gh-104773).audioop
(Внесено Виктором Стиннером в gh-104773).chunk
(Внесено Виктором Стиннером в gh-104773).cgi
иcgitb
.cgi.FieldStorage
обычно можно заменить наurllib.parse.parse_qsl()
для запросовGET
иHEAD
, а модульemail.message
или multipart PyPI-проект дляPOST
иPUT
.cgi.parse()
можно заменить вызовомurllib.parse.parse_qs()
непосредственно в нужной строке запроса, за исключением вводаmultipart/form-data
, который можно обработать, как описано дляcgi.parse_multipart()
.cgi.parse_header()
можно заменить функциональностью из пакетаemail
, который реализует те же MIME RFC. Например, с помощьюemail.message.EmailMessage
:from email.message import EmailMessage msg = EmailMessage() msg['content-type'] = 'application/json; charset="utf8"' main, params = msg.get_content_type(), msg['content-type'].params
cgi.parse_multipart()
можно заменить функциональностью из пакетаemail
(например,email.message.EmailMessage
иemail.message.Message
), которая реализует те же MIME RFC, или из multipart. PyPI-проекта.
(Внесено Виктором Стиннером в gh-104773).
Модуль
crypt
и его частное расширение_crypt
. Модульhashlib
является потенциальной заменой для некоторых случаев использования. В противном случае можно использовать следующие проекты PyPI:bcrypt: Современное хеширование паролей для вашего программного обеспечения и ваших серверов.
passlib: Комплексная система хеширования паролей, поддерживающая более 30 схем.
argon2-cffi: Безопасный алгоритм хеширования паролей Argon2.
legacycrypt:
ctypes
обертка для вызова библиотеки POSIX crypt и связанной с ней функциональности.crypt_r: Форк модуля
crypt
, обертка для вызова библиотеки crypt_r(3) и связанной с ней функциональности.
(Внесено Виктором Стиннером в gh-104773).
imghdr
: используйте вместо этого проекты filetype, puremagic или python-magic. (Внесено Виктором Стиннером в gh-104773).mailcap
. Модульmimetypes
предоставляет альтернативу. (Внесено Виктором Стиннером в gh-104773).msilib
(Внесено Закари Уэйром в gh-104773).nis
(Внесено Виктором Стиннером в gh-104773).nntplib
: проект nntplib Вместо этого можно использовать проект PyPI. (Внесено Виктором Стиннером в gh-104773).ossaudiodev
: используйте pygame project для воспроизведения звука. (Внесено Виктором Стиннером в gh-104780).pipes
: используйте вместо него модульsubprocess
. (Внесено Виктором Стиннером в gh-104773).sndhdr
: используйте вместо этого проекты filetype, puremagic или python-magic. (Внесено Виктором Стиннером в gh-104773).spwd
: вместо него можно использовать проект python-pam. (Внесено Виктором Стиннером в gh-104773).sunau
(Внесено Виктором Стиннером в gh-104773).telnetlib
, вместо этого используйте проекты telnetlib3 ` или :pypi:`Exscript. (Внесено Виктором Стиннером в gh-104773).uu
: модульbase64
- современная альтернатива. (Внесено Виктором Стиннером в gh-104773).xdrlib
(Внесено Виктором Стиннером в gh-104773).
Удалите программу
2to3
и модульlib2to3
, устаревшие в Python 3.11. (Внесено Виктором Стиннером в gh-104780).Удалите модуль
tkinter.tix
, устаревший в Python 3.6. Сторонняя библиотека Tix, в которую был завернут модуль, не поддерживается. (Внесено Закари Уэйром в gh-75552).
configparser¶
Удалите недокументированный класс
configparser.LegacyInterpolation
, устаревший в строке документации с Python 3.2 и с предупреждением об устаревании с Python 3.11. (Внесено Хьюго ван Кеменаде в gh-104886).
importlib¶
Удалите устаревший доступ к
__getitem__()
для объектовimportlib.metadata.EntryPoint
. (Внесено Джейсоном Р. Кумбсом в gh-113175).
локаль¶
Уберите функцию
locale.resetlocale()
, устаревшую в Python 3.11: вместо нее используйтеlocale.setlocale(locale.LC_ALL, "")
. (Внесено Виктором Стиннером в gh-104783).
ведение журнала¶
logging
: Удалите недокументированные и непроверенные методыLogger.warn()
иLoggerAdapter.warn()
и функциюlogging.warn()
. Утратившие актуальность с Python 3.3, они были псевдонимами методовlogging.Logger.warning()
,logging.LoggerAdapter.warning()
и функцииlogging.warning()
. (Внесено Виктором Стиннером в gh-105376).
pathlib¶
Удалите поддержку использования объектов
pathlib.Path
в качестве менеджеров контекста. В Python 3.9 эта функциональность была устаревшей и не поддерживается.
re¶
Удалите недокументированную, никогда не работающую и устаревшую функцию
re.template
и флагre.TEMPLATE
(и псевдонимre.T
). (Внесено Сергеем Сторчакой и Никитой Соболевым в gh-105687).
черепаха¶
Удалите метод
turtle.RawTurtle.settiltangle()
, устаревший в документации с Python 3.1 и получивший предупреждение об устаревании с Python 3.11. (Внесено Хьюго ван Кеменаде в gh-104876).
набор текста¶
Пространства имен
typing.io
иtyping.re
, устаревшие в Python 3.8, теперь удалены. Элементы из этих пространств имен можно импортировать непосредственно изtyping
. (Внесено Себастьяном Риттау в gh-92871).Удалите поддержку метода keyword-argument для создания типов
typing.TypedDict
, устаревшего в Python 3.11. (Внесено Томасом Роуном в gh-104786).
unittest¶
Удалите следующие функции
unittest
, устаревшие в Python 3.11:unittest.findTestCases()
unittest.makeSuite()
unittest.getTestCaseNames()
Вместо этого используйте методы
TestLoader
:(Предоставлено Хьюго ван Кеменаде в gh-104835).
Удалите непроверенный и недокументированный метод
unittest.TestProgram.usageExit()
, устаревший в Python 3.11. (Внесено Хьюго ван Кеменаде в gh-104992).
urllib¶
Удалите параметры cafile, capath и cadefault из функции
urllib.request.urlopen()
, устаревшей в Python 3.6: вместо них передавайте параметр context. Используйтеssl.SSLContext.load_cert_chain()
для загрузки определенных сертификатов или позвольтеssl.create_default_context()
выбрать доверенные сертификаты ЦС системы за вас. (Внесено Виктором Стиннером в gh-105382).
веб-браузер¶
Удалите непроверенный и недокументированный
webbrowser
MacOSX
, устаревший в Python 3.11. Вместо него используйте классMacOSXOSAScript
(появился в Python 3.2). (Внесено Хьюго ван Кеменаде в gh-104804).Удалите устаревший атрибут
webbrowser.MacOSXOSAScript._name
. Вместо него используйте атрибутwebbrowser.MacOSXOSAScript.name
. (Внесено Никитой Соболевым в gh-105546).
Новые амортизационные отчисления¶
Удалены дескрипторы с цепочкой
classmethod
(введены в gh-63272). Теперь их нельзя использовать для обертывания других дескрипторов, таких какproperty
. Основной дизайн этой функции был ошибочным и вызвал ряд последующих проблем. Чтобы «пропустить»classmethod
, используйте атрибут__wrapped__
, который был добавлен в Python 3.10. (Внесено Раймондом Хеттингером в gh-89519).array
:array
код формата'u'
, deprecated в документации с Python 3.3, испускаетDeprecationWarning
с 3.13 и будет удален в Python 3.16. Вместо этого используйте код формата'w'
. (Внесено Хьюго ван Кеменаде в gh-80480).ctypes
: Устраните недокументированные функцииctypes.SetPointerType()
иctypes.ARRAY()
. Заменитеctypes.ARRAY(item_type, size)
наitem_type * size
. (Внесено Виктором Стиннером в gh-105733).decimal
: Устраните нестандартный спецификатор формата «N» дляdecimal.Decimal
. Он не был документирован и поддерживался только в реализации на C. (Внесено Сергеем Сторчакой в gh-89902).dis
: Разделительdis.HAVE_ARGUMENT
устарел. Вместо этого проверьте принадлежность кhasarg
. (Внесено Ирит Катриэль в gh-109319).Каркасные объекты: Вызов
frame.clear()
на приостановленном кадре вызываетRuntimeError
(как это всегда происходило с выполняющимся кадром). (Внесено Ирит Катриэль в gh-79932).Модули
getopt
иoptparse
: Теперь они стали soft deprecated: модульargparse
следует использовать для новых проектов. Ранее модульoptparse
уже был устаревшим, его удаление не планировалось, и никаких предупреждений не выдавалось: так что на практике изменений нет. (Внесено Виктором Стиннером в gh-106535).gettext
: Выдавать предупреждение об устаревании для нецелых чисел в функциях и методахgettext
, которые учитывают множественные формы, даже если перевод не найден. (Внесено Сергеем Сторчакой в gh-88434).glob
: Недокументированные функцииglob.glob0()
иglob.glob1()
устарели. Вместо них используйтеglob.glob()
и передавайте каталог в ее аргументе root_dir. (Внесено Барни Гейлом в gh-117337).http.server
:http.server.CGIHTTPRequestHandler
теперь выдаетDeprecationWarning
, так как он будет удален в 3.15. Основанные на процессах CGI HTTP-серверы уже очень давно не используются. Этот код был устаревшим, не поддерживался и редко использовался. Он имеет высокий потенциал ошибок как в безопасности, так и в функциональности. Это включает в себя удаление флага--cgi
в командной строкеpython -m http.server
в версии 3.15.mimetypes
: Передача пути к файлу вместо URL вguess_type()
- это soft deprecated. Вместо этого используйтеguess_file_type()
. (Внесено Сергеем Сторчакой в gh-66543).re
: Передача необязательных аргументов maxsplit, count и flags в функции уровня модуляre.split()
,re.sub()
иre.subn()
в качестве позиционных аргументов теперь неактуальна. В будущих версиях Python эти параметры будут иметь вид keyword-only. (Внесено Сергеем Сторчакой в gh-56166).pathlib
:pathlib.PurePath.is_reserved()
устарел и планируется к удалению в Python 3.15. Используйтеos.path.isreserved()
для определения зарезервированных путей в Windows.platform
:java_ver()
устарел и будет удален в версии 3.15. Она была практически не протестирована, имела запутанный API и была полезна только для поддержки Jython. (Внесено Никитой Соболевым в gh-116349).pydoc
: Устраните недокументированную функциюpydoc.ispackage()
. (Внесено Закери Спитцем в gh-64020).sqlite3
: Передача более одного позиционного аргумента вsqlite3.connect()
и конструкторsqlite3.Connection
является устаревшей. Остальные параметры станут только ключевыми в Python 3.15.Откажитесь от передачи имени, количества аргументов и вызываемого объекта в качестве аргументов ключевого слова для следующих
sqlite3.Connection
API:Откажитесь от передачи вызываемого обратного вызова по ключевому слову для следующих
sqlite3.Connection
API:В Python 3.15 затронутые параметры станут только позиционными.
sys
:sys._enablelegacywindowsfsencoding()
. Замените ее переменной окруженияPYTHONLEGACYWINDOWSFSENCODING
. (Внесено Инадой Наоки в gh-73427).tarfile
: Недокументированный и неиспользуемый атрибутtarfile
вtarfile.TarFile
является устаревшим и планируется к удалению в Python 3.16.traceback
: Поле exc_type изtraceback.TracebackException
устарело. Вместо него используйте exc_type_str.-
Создание класса
typing.NamedTuple
с использованием ключевых слов-аргументов для обозначения полей (NT = NamedTuple("NT", x=int, y=int)
) устарело и будет запрещено в Python 3.15. Вместо этого используйте синтаксис, основанный на классах, или функциональный синтаксис. (Внесено Алексом Уэйгудом в gh-105566).При использовании функционального синтаксиса для создания класса
typing.NamedTuple
или классаtyping.TypedDict
отказ от передачи значения параметру „fields“ (NT = NamedTuple("NT")
илиTD = TypedDict("TD")
) является неактуальным. Передача значенияNone
параметру „fields“ (NT = NamedTuple("NT", None)
илиTD = TypedDict("TD", None)
) также является недопустимой. Оба параметра будут запрещены в Python 3.15. Чтобы создать класс NamedTuple с 0 полями, используйтеclass NT(NamedTuple): pass
илиNT = NamedTuple("NT", [])
. Чтобы создать класс TypedDict с 0 полей, используйтеclass TD(TypedDict): pass
илиTD = TypedDict("TD", {})
. (Внесено Алексом Уэйгудом в gh-105566 и gh-105570).typing.no_type_check_decorator()
является устаревшим и планируется к удалению в Python 3.15. После восьми лет существования в модулеtyping
он до сих пор не поддерживается ни одной крупной программой проверки типов. (Внесено Алексом Уэйгудом в gh-106309).typing.AnyStr
является устаревшим. В Python 3.16 он будет удален изtyping.__all__
, а при импорте или обращении к нему будет выдаватьсяDeprecationWarning
. В Python 3.18 он будет удален полностью. Вместо него используйте новый type parameter syntax. (Внесено Майклом Те в gh-107116).
Определяемые пользователем функции: Присвоение атрибуту
__code__
функции, когда тип нового объекта кода не совпадает с типом функции, является устаревшим. Различные типы: обычная функция, генератор, асинхронный генератор и coroutine. (Внесено Ирит Катриэль в gh-81137).wave
: Утрачиваем методыgetmark()
,setmark()
иgetmarkers()
классовwave.Wave_read
иwave.Wave_write
. Они будут удалены в Python 3.15. (Внесено Виктором Стиннером в gh-105096).
Удаление ожиданий в Python 3.14¶
argparse
: Параметры type, choices и metavar изargparse.BooleanOptionalAction
устарели и будут удалены в 3.14. (Внесено Никитой Соболевым в gh-92248).ast
: Следующие функции были устаревшими в документации с Python 3.8, теперь вызываютDeprecationWarning
во время выполнения при обращении к ним или их использовании, и будут удалены в Python 3.14:ast.Num
ast.Str
ast.Bytes
ast.NameConstant
ast.Ellipsis
Вместо этого используйте
ast.Constant
. (Внесено Сергеем Сторчакой в gh-90953).collections.abc
: Утратившие актуальностьcollections.abc.ByteString
. ПредпочтитеSequence
илиBuffer
. Для использования в типизации предпочтите объединение, напримерbytes | bytearray
илиcollections.abc.Buffer
. (Внесено Shantanu Jain в gh-91896).email
: Утратил силу параметр isdst вemail.utils.localtime()
(внесен Аланом Уильямсом в gh-72346).importlib
:__package__
и__cached__
перестанут устанавливаться или учитываться системой импорта (gh-97879).importlib.abc
устаревшие классы:importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
Вместо этого используйте классы
importlib.resources.abc
:(Предоставлено Джейсоном Р. Кумбсом и Хьюго ван Кеменаде в gh-93963).
itertools
имела недокументированную, неэффективную, исторически ошибочную и непоследовательную поддержку операций копирования, глубокого копирования и pickle. Они будут удалены в версии 3.14, что значительно сократит объем кода и нагрузку по сопровождению. (Внесено Раймондом Хеттингером в gh-101588).multiprocessing
: Метод запуска по умолчанию будет изменен на более безопасный в Linux, BSD и других POSIX-платформах, отличных от macOS, где'fork'
в настоящее время используется по умолчанию (gh-84559). Добавление предупреждения об этом во время выполнения было сочтено слишком разрушительным, так как большинство кода, как ожидается, не будет беспокоиться об этом. Используйтеget_context()
илиset_start_method()
API, чтобы явно указать, когда ваш код требует'fork'
. См. Контексты и методы запуска.pathlib
:is_relative_to()
иrelative_to()
: передача дополнительных аргументов устарела.pkgutil
:find_loader()
иget_loader()
теперь повышаютDeprecationWarning
; используйте вместо этогоimportlib.util.find_spec()
. (Внесено Никитой Соболевым в gh-97850).pty
:master_open()
: использоватьpty.openpty()
.slave_open()
: использоватьpty.openpty()
.
-
version
иversion_info
.execute()
иexecutemany()
, если используется named placeholders, а параметры - это последовательность, а неdict
.адаптер даты и времени, конвертер даты и временной метки: см. документацию
sqlite3
для предлагаемых рецептов замены.
types.CodeType
: Доступ кco_lnotab
был устаревшим в PEP 626 с 3.10 и планировался к удалению в 3.12, но только в 3.12 он получил полноценныйDeprecationWarning
. Может быть удален в 3.14. (Внесено Никитой Соболевым в gh-101866).typing
:typing.ByteString
, устаревший с Python 3.9, теперь при его использовании выдаетсяDeprecationWarning
.urllib
:urllib.parse.Quoter
устарел: он не предназначался для использования в качестве общедоступного API. (Внесено Грегори П. Смитом в gh-88168).xml.etree.ElementTree
: Проверка истинности значенияElement
устарела и вызовет исключение в Python 3.14.
Удаление ожиданий в Python 3.15¶
http.server.CGIHTTPRequestHandler
будет удален вместе со связанным с ним флагом--cgi
вpython -m http.server
. Он был устаревшим и редко использовался. Прямой замены не существует. Для взаимодействия веб-сервера с обработчиком запросов любое средство лучше, чем CGI.locale
:locale.getdefaultlocale()
был устаревшим в Python 3.11 и первоначально планировался к удалению в Python 3.13 (gh-90817), но удаление было отложено до Python 3.15. Вместо этого используйтеlocale.setlocale()
,locale.getencoding()
иlocale.getlocale()
. (Внесено Хьюго ван Кеменаде в gh-111187).pathlib
:pathlib.PurePath.is_reserved()
устарел и планируется к удалению в Python 3.15. Используйтеos.path.isreserved()
для определения зарезервированных путей в Windows.platform
:java_ver()
устарел и будет удален в версии 3.15. Она была практически не протестирована, имела запутанный API и была полезна только для поддержки Jython. (Внесено Никитой Соболевым в gh-116349).threading
: Передача любых аргументов вthreading.RLock()
теперь устарела. Версия на C допускает любое количество аргументов args и kwargs, но они просто игнорируются. Версия Python не допускает никаких аргументов. Все аргументы будут удалены изthreading.RLock()
в Python 3.15. (Внесено Никитой Соболевым в gh-102029).-
Недокументированный синтаксис аргумента ключевого слова для создания классов
NamedTuple
(NT = NamedTuple("NT", x=int)
) является устаревшим и будет запрещен в версии 3.15. Вместо этого используйте синтаксис, основанный на классах, или функциональный синтаксис.При использовании функционального синтаксиса для создания класса
NamedTuple
передача значения в параметр fields (NT = NamedTuple("NT")
) запрещена. ПередачаNone
параметру fields (NT = NamedTuple("NT", None)
) также является устаревшей. Оба параметра будут запрещены в Python 3.15. Чтобы создать классNamedTuple
с 0 полей, используйтеclass NT(NamedTuple): pass
илиNT = NamedTuple("NT", [])
.
typing.TypedDict
: При использовании функционального синтаксиса для создания классаTypedDict
отказ от передачи значения параметру fields (TD = TypedDict("TD")
) является устаревшим. Передача значенияNone
параметру fields (TD = TypedDict("TD", None)
) также является неактуальной. Оба параметра будут запрещены в Python 3.15. Чтобы создать классTypedDict
с 0 полей, используйтеclass TD(TypedDict): pass
илиTD = TypedDict("TD", {})
.wave
: Утрачиваем методыgetmark()
,setmark()
иgetmarkers()
классовwave.Wave_read
иwave.Wave_write
. Они будут удалены в Python 3.15. (Внесено Виктором Стиннером в gh-105096).
Ожидание удаления в Python 3.16¶
array.array
'u'
типа (wchar_t
): используйте вместо него тип'w'
(Py_UCS4
).
Ожидается удаление в будущих версиях¶
Следующие API были устаревшими в предыдущих версиях Python и будут удалены, хотя на данный момент дата их удаления не назначена.
argparse
: Вложенные группы аргументов и вложенные взаимоисключающие группы устарели.-
~bool
, побитовая инверсия на bool.bool(NotImplemented)
.Генераторы: Сигнатура
throw(type, exc, tb)
иathrow(type, exc, tb)
устарела: вместо нее используйтеthrow(exc)
иathrow(exc)
, сигнатуру с одним аргументом.В настоящее время Python принимает числовые литералы, за которыми сразу следуют ключевые слова, например
0in x
,1or x
,0if 1else 2
. Это позволяет использовать такие запутанные и неоднозначные выражения, как[0x1for x in y]
(которое может быть интерпретировано как[0x1 for x in y]
или[0x1f or x in y]
). Если за числовым литералом сразу следует одно из ключевых словand
,else
,for
,if
,in
,is
иor
, то выдается синтаксическое предупреждение. В будущем выпуске это будет заменено на синтаксическую ошибку. (gh-87999)Поддержка методов
__index__()
и__int__()
, возвращающих неинтовый тип: эти методы должны будут возвращать экземпляр строгого подклассаint
.Поддержка метода
__float__()
, возвращающего строгий подклассfloat
: эти методы должны будут возвращать экземплярfloat
.Поддержка метода
__complex__()
, возвращающего строгий подклассcomplex
: эти методы должны будут возвращать экземплярcomplex
.Делегирование метода
int()
методу__trunc__()
.
calendar
: Константыcalendar.January
иcalendar.February
устарели и заменены наcalendar.JANUARY
иcalendar.FEBRUARY
. (Внесено принцем Рошаном в gh-103636).codeobject.co_lnotab
: вместо этого используйте методcodeobject.co_lines()
.-
utcnow()
: использоватьdatetime.datetime.now(tz=datetime.UTC)
.utcfromtimestamp()
: использоватьdatetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)
.
gettext
: Множественное значение должно быть целым числом.-
Метод
load_module()
: вместо него используйтеexec_module()
.cache_from_source()
Параметр debug_override устарел: вместо него используйте параметр optimization.
-
EntryPoints
кортеж интерфейса.Неявные
None
для возвращаемых значений.
mailbox
: Использование ввода StringIO и текстового режима устарело, вместо этого используйте BytesIO и двоичный режим.os
: Вызовos.register_at_fork()
в многопоточном процессе.pydoc.ErrorDuringImport
: Значение кортежа для параметра exc_info устарело, используйте экземпляр исключения.re
: Для числовых ссылок на группы и имен групп в регулярных выражениях теперь применяются более строгие правила. Теперь в качестве числовой ссылки принимается только последовательность ASCII-цифр. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы и цифры ASCII и символ подчеркивания. (Внесено Сергеем Сторчакой в gh-91760).Модули
sre_compile
,sre_constants
иsre_parse
.shutil
: Параметр onerror вrmtree()
устарел в Python 3.12; вместо него используйте параметр onexc.ssl
опции и протоколы:ssl.SSLContext
без аргумента протокола является устаревшим.ssl.SSLContext
:set_npn_protocols()
иselected_npn_protocol()
устарели: вместо них используйте ALPN.ssl.OP_NO_SSL*
вариантовssl.OP_NO_TLS*
вариантовssl.PROTOCOL_SSLv3
ssl.PROTOCOL_TLS
ssl.PROTOCOL_TLSv1
ssl.PROTOCOL_TLSv1_1
ssl.PROTOCOL_TLSv1_2
ssl.TLSVersion.SSLv3
ssl.TLSVersion.TLSv1
ssl.TLSVersion.TLSv1_1
sysconfig.is_python_build()
Параметр check_home устарел и игнорируется.threading
методы:threading.Condition.notifyAll()
: использоватьnotify_all()
.threading.Event.isSet()
: использоватьis_set()
.threading.Thread.isDaemon()
,threading.Thread.setDaemon()
: используйте атрибутthreading.Thread.daemon
.threading.Thread.getName()
,threading.Thread.setName()
: используйте атрибутthreading.Thread.name
.threading.currentThread()
: использоватьthreading.current_thread()
.threading.activeCount()
: использоватьthreading.active_count()
.
unittest.IsolatedAsyncioTestCase
: возвращать значение, которое не являетсяNone
, из тестового случая не рекомендуется.urllib.parse
устаревшие функции:urlparse()
вместо нихsplitattr()
splithost()
splitnport()
splitpasswd()
splitport()
splitquery()
splittag()
splittype()
splituser()
splitvalue()
to_bytes()
urllib.request
:URLopener
иFancyURLopener
стиль вызова запросов устарел. Используйте более новые функции и методыurlopen()
.wsgiref
:SimpleHandler.stdout.write()
не должны выполнять частичную запись.zipimport.zipimporter.load_module()
устарел: вместо него используйтеexec_module()
.
Изменения байткода CPython¶
Опарг
YIELD_VALUE
теперь равен1
, если yield является частью yield-from или await, и0
в противном случае. opargRESUME
был изменен, чтобы добавить бит, указывающий, является ли глубина except-depth равной 1, что необходимо для оптимизации закрытия генераторов. (Внесено Ирит Катриэль в gh-111354).
Изменения в API на языке C¶
Новые возможности¶
Больше не нужно определять макрос
PY_SSIZE_T_CLEAN
перед включениемPython.h
при использовании форматов#
в format codes. API, принимающие коды форматов, всегда используютPy_ssize_t
для форматов#
. (Внесено Инадой Наоки в gh-104922).Параметр keywords в функциях
PyArg_ParseTupleAndKeywords()
иPyArg_VaParseTupleAndKeywords()
теперь имеет тип char *const* в C и const char *const* в C++, а не char**. Это делает эти функции совместимыми с аргументами типа const char *const*, const char** или char *const* в C++ и char *const* в C без явного приведения типа. Это можно переопределить с помощью макросаPY_CXX_CONST
. (Внесено Сергеем Сторчакой в gh-65210).Добавьте
PyImport_AddModuleRef()
: аналогичноPyImport_AddModule()
, но вместо borrowed reference возвращается strong reference. (Внесено Виктором Стиннером в gh-105922).Добавьте функцию
PyWeakref_GetRef()
: аналогичнаPyWeakref_GetObject()
, но возвращает strong reference, илиNULL
, если референт больше не жив. (Внесено Виктором Стиннером в gh-105927).Добавьте
PyObject_GetOptionalAttr()
иPyObject_GetOptionalAttrString()
, вариантыPyObject_GetAttr()
иPyObject_GetAttrString()
, которые не вызываютAttributeError
, если атрибут не найден. Эти варианты удобнее и быстрее, если отсутствующий атрибут не должен рассматриваться как сбой. (Внесено Сергеем Сторчакой в gh-106521).Добавьте
PyMapping_GetOptionalItem()
иPyMapping_GetOptionalItemString()
: вариантыPyObject_GetItem()
иPyMapping_GetItemString()
, которые не вызываютKeyError
, если ключ не найден. Эти варианты удобнее и быстрее, если отсутствие ключа не должно рассматриваться как сбой. (Внесено Сергеем Сторчакой в gh-106307).Добавьте исправленные варианты функций, которые молча игнорируют ошибки:
PyObject_HasAttrStringWithError()
заменяетPyObject_HasAttrString()
.PyMapping_HasKeyStringWithError()
заменяетPyMapping_HasKeyString()
.
Новые функции возвращают не только
1
для true и0
для false, но и-1
для error.(Предоставлено Serhiy Storchaka в gh-108511).
Если Python собран в debug mode или
with assertions
,PyTuple_SET_ITEM()
иPyList_SET_ITEM()
теперь проверяют аргумент index с помощью утверждения. (Внесено Виктором Стиннером в gh-106168).Добавьте функцию
PyModule_Add()
: аналогичнаPyModule_AddObjectRef()
иPyModule_AddObject()
, но всегда крадет ссылку на значение. (Внесено Сергеем Сторчакой в gh-86493).Добавьте функции
PyDict_GetItemRef()
иPyDict_GetItemStringRef()
: они аналогичныPyDict_GetItemWithError()
, но возвращают strong reference вместо borrowed reference. Кроме того, эти функции возвращают -1 при ошибке, поэтому проверкаPyErr_Occurred()
не нужна. (Внесено Виктором Стиннером в gh-106004).Добавлена функция
PyDict_SetDefaultRef()
, которая аналогичнаPyDict_SetDefault()
, но возвращает strong reference вместо borrowed reference. Эта функция возвращает-1
при ошибке,0
при вставке и1
, если ключ уже присутствовал в словаре. (Внесено Сэмом Гроссом в gh-112066).Добавьте функцию
PyDict_ContainsString()
: то же самое, что иPyDict_Contains()
, но ключ указывается в виде строки const char*. байтовой строки в кодировке UTF-8, а не PyObject*. (Внесено Виктором Стиннером в gh-108314).Добавлена функция
PyList_GetItemRef()
: аналогичнаPyList_GetItem()
, но возвращает strong reference вместо borrowed reference.Добавьте функцию
Py_IsFinalizing()
: проверьте, является ли основной интерпретатор Python shutting down. (Внесено Виктором Стиннером в gh-108014).Добавьте функцию
PyLong_AsInt()
: она аналогичнаPyLong_AsLong()
, но хранит результат в C int, а не в C long. Ранее она была известна как частная функция_PyLong_AsInt()
(с префиксом подчеркивания). (Внесено Виктором Стиннером в gh-108014).Python, созданный с использованием
configure
--with-trace-refs
(трассировка ссылок) теперь поддерживает Limited API. (Внесено Виктором Стиннером в gh-108634).Добавьте функции
PyObject_VisitManagedDict()
иPyObject_ClearManagedDict()
, которые должны вызываться функциями traverse и clear типа, использующего флагPy_TPFLAGS_MANAGED_DICT
. С помощью pythoncapi-compat project можно получить эти функции в Python 3.11 и 3.12. (Внесено Виктором Стиннером в gh-107073).Добавьте функции
PyUnicode_EqualToUTF8AndSize()
иPyUnicode_EqualToUTF8()
: сравните объект Unicode со строкой const char* UTF-8 и возвращают true (1
), если они равны, или false (0
) в противном случае. Эти функции не вызывают исключений. (Внесено Сергеем Сторчакой в gh-110289).Добавьте функцию
PyThreadState_GetUnchecked()
: аналогичноPyThreadState_Get()
, но не убивайте процесс с фатальной ошибкой, если результат равен NULL. Вызывающая сторона сама проверяет, является ли результат NULL. Ранее эта функция была приватной и была известна как_PyThreadState_UncheckedGet()
. (Внесена Виктором Стиннером в gh-108867).Добавьте функцию
PySys_AuditTuple()
: аналогичнуюPySys_Audit()
, но передающую аргументы события в виде объекта Pythontuple
. (Внесено Виктором Стиннером в gh-85283).PyArg_ParseTupleAndKeywords()
теперь поддерживает имена параметров ключевых слов, отличные от ASCII. (Внесено Сергеем Сторчакой в gh-110815).Добавьте
PyMem_RawMalloc()
,PyMem_RawCalloc()
,PyMem_RawRealloc()
иPyMem_RawFree()
в ограниченный C API (версия 3.13). (Внесено Виктором Стиннером в gh-85283).Добавьте функции
PySys_Audit()
иPySys_AuditTuple()
в ограниченный C API. (Внесено Виктором Стиннером в gh-85283).Добавьте функцию
PyErr_FormatUnraisable()
: аналогичнаPyErr_WriteUnraisable()
, но позволяет настраивать предупреждающее сообщение. (Внесено Сергеем Сторчакой в gh-108082).Добавьте функции
PyList_Extend()
иPyList_Clear()
: аналогично методам Pythonlist.extend()
иlist.clear()
. (Внесено Виктором Стиннером в gh-111138).Добавьте функции
PyDict_Pop()
иPyDict_PopString()
: удаление ключа из словаря и возвращение удаленного значения по желанию. Это похоже наdict.pop()
, но без значения по умолчанию и без возможности вызватьKeyError
, если ключ отсутствует. (Внесено Стефаном Бехнелем и Виктором Стиннером в gh-111262).Добавьте функцию
Py_HashPointer()
для хэширования указателя. (Внесено Виктором Стиннером в gh-111545).Добавьте функцию
PyObject_GenericHash()
, которая реализует функцию хеширования по умолчанию для объекта Python. (Внесено Сергеем Сторчакой в gh-113024).Добавьте PyTime C API:
PyTime_t
тип.Константы
PyTime_MIN
иPyTime_MAX
.Добавьте функции:
(Предоставлено Виктором Стиннером и Петром Викторином в gh-110850)
Добавьте функции
PyLong_AsNativeBytes()
,PyLong_FromNativeBytes()
иPyLong_FromUnsignedNativeBytes()
для упрощения преобразования между родными целочисленными типами и объектами Pythonint
. (Внесено Стивом Дауэром в gh-111140).Добавьте функцию
PyType_GetFullyQualifiedName()
для получения полного имени типа. Эквивалентноf"{type.__module__}.{type.__qualname__}"
илиtype.__qualname__
, еслиtype.__module__
не является строкой или равно"builtins"
. (Внесено Виктором Стиннером в gh-111696).Добавьте функцию
PyType_GetModuleName()
для получения имени модуля типа. Эквивалентно получению атрибутаtype.__module__
. (Внесено Эриком Сноу и Виктором Стиннером в gh-111696).Добавьте поддержку форматов
%T
,%#T
,%N
и%#N
вPyUnicode_FromFormat()
: форматирование полного имени типа объекта и типа: вызовPyType_GetModuleName()
. Дополнительные сведения см. в разделе PEP 737. (Внесено Виктором Стиннером в gh-111696).Добавьте функции
Py_GetConstant()
иPy_GetConstantBorrowed()
, чтобы получить константы. Например,Py_GetConstant(Py_CONSTANT_ZERO)
возвращает strong reference константу ноль. (Внесено Виктором Стиннером в gh-115754).Добавьте
PyType_GetModuleByDef()
в ограниченный C API (Внесено Виктором Стиннером в gh-116936).Добавьте в C-API две новые функции,
PyRefTracer_SetTracer()
иPyRefTracer_GetTracer()
, которые позволяют отслеживать создание и уничтожение объектов так же, как это делает модульtracemalloc
. (Внесено Пабло Галиндо в gh-93502).Добавьте
PyEval_GetFrameBuiltins()
,PyEval_GetFrameGlobals()
иPyEval_GetFrameLocals()
в API языка C. Эти замены дляPyEval_GetBuiltins()
,PyEval_GetGlobals()
иPyEval_GetLocals()
возвращают strong references, а не заимствованные ссылки. (Добавлены как часть PEP 667).
Изменения в конструкции¶
Опция
configure
--with-system-libmpdec
теперь по умолчанию принимает значениеyes
. Копияlibmpdecimal
в комплекте будет удалена в Python 3.15.Autoconf 2.71 и aclocal 1.16.4 теперь необходимы для регенерации скрипта
configure
. (Внесено Кристианом Хаймсом в gh-89886).Для сборки модуля расширения
sqlite3
требуется SQLite 3.15.2 или новее. (Внесено Эрлендом Аасланом в gh-105875).Python, собранный с помощью
configure
--with-trace-refs
(трассировка ссылок) теперь совместим по ABI с релизной сборкой Python и debug build. (Внесено Виктором Стиннером в gh-108634).Для сборки CPython теперь требуется компилятор с поддержкой атомарной библиотеки C11, встроенных атомарных функций GCC или взаимосвязанных интринсиков MSVC.
Расширения
errno
,fcntl
,grp
,md5
,pwd
,resource
,termios
,winsound
,_ctypes_test
,_multiprocessing.posixshmem
,_scproxy
,_stat
,_statistics
,_testconsole
,_testimportmultiple
и_uuid
Расширения C теперь строятся с помощью limited C API. (Внесено Виктором Стиннером в gh-85283).wasm32-wasi
теперь является платформой PEP 11 второго уровня. (Внесено Бреттом Кэнноном из gh-115192).wasm32-emscripten
больше не является платформой, поддерживаемой PEP 11. (Внесено Бреттом Кэнноном в gh-115192).Теперь в Python используется mimalloc library. Он лицензирован под лицензией MIT; см. mimalloc license. В поставляемый mimalloc внесены пользовательские изменения, подробности см. в gh-113141. (Внесено Дино Вьеландом в gh-109914).
На POSIX-системах имена файлов pkg-config (
.pc
) теперь включают флаги ABI. Например, для сборки со свободным потоком генерируетсяpython-3.13t.pc
, а для сборки с отладкой -python-3.13d.pc
.
Переход на Python 3.13¶
В этом разделе перечислены ранее описанные изменения и другие исправления, которые могут потребовать внесения изменений в ваш код.
Изменения в API Python¶
Теперь при неудаче с получением имени пользователя вместо
ImportError
на платформах, отличных от Unix, илиKeyError
на платформах Unix, где база данных паролей пуста, выдается сообщениеOSError
, а при неудаче с получением имени пользователя -getpass.getuser()
.Модуль
threading
теперь ожидает, что модуль_thread
будет иметь атрибут_is_main_interpreter
. Это функция без аргументов, которая возвращаетTrue
, если текущий интерпретатор является основным.Любая библиотека или приложение, предоставляющее пользовательский модуль
_thread
, должно предоставлять_is_main_interpreter()
, как и другие «приватные» атрибуты модуля (см. gh-112826).mailbox.Maildir
теперь игнорирует файлы с ведущей точкой. (Внесено Закери Спитцем в gh-65559).pathlib.Path.glob()
иrglob()
теперь возвращают и файлы, и каталоги, если задан шаблон, заканчивающийся на «**
», а не только каталоги. Пользователи могут добавлять косую черту, чтобы искать только каталоги.Значение атрибута
mode
вgzip.GzipFile
было изменено с целого числа (1
или2
) на строку ('rb'
или'wb'
). Значение атрибутаmode
читаемого файлоподобного объекта, возвращаемогоzipfile.ZipFile.open()
, было изменено с'r'
на'rb'
. (Внесено Сергеем Сторчакой в gh-115961).
Вызов
locals()
в optimized scope теперь производит независимый снимок при каждом вызове, и, следовательно, больше не обновляет неявно ранее возвращенные ссылки. Для получения унаследованного поведения CPython теперь требуются явные вызовы для обновления первоначально возвращенного словаря результатами последующих вызововlocals()
. Функции выполнения кода, которые неявно нацелены наlocals()
(такие какexec
иeval
), должны быть переданы в явное пространство имен для доступа к их результатам в оптимизированной области видимости. (Изменено в рамках PEP 667).Вызов
locals()
из понимания в области видимости модуля или класса (в том числе черезexec
илиeval
) снова ведет себя так, как если бы понимание выполнялось как независимая вложенная функция (т.е. локальные переменные из содержащей области видимости не включаются). В Python 3.12 это было изменено на включение локальных переменных из содержащей области видимости при реализации PEP 709. (Изменено в рамках PEP 667).Обращение к
FrameType.f_locals
в optimized scope теперь возвращает прокси в режиме записи, а не снимок, который обновляется в неустановленное время. Если снимок нужен, его нужно создать явно с помощьюdict
или метода.copy()
прокси. (Изменено в рамках PEP 667).
Изменения в API языка C¶
Python.h
больше не включает стандартный заголовок<ieeefp.h>
. Он был включен для функцииfinite()
, которая теперь обеспечивается заголовком<math.h>
. Теперь его следует включать явно, если это необходимо. Удалите также макросHAVE_IEEEFP_H
. (Внесено Виктором Стиннером в gh-108765).Python.h
больше не включает эти стандартные заголовочные файлы:<time.h>
,<sys/select.h>
и<sys/time.h>
. При необходимости их теперь следует включать явно. Например,<time.h>
предоставляет функцииclock()
иgmtime()
,<sys/select.h>
- функциюselect()
, а<sys/time.h>
- функцииfutimes()
,gettimeofday()
иsetitimer()
. (Внесено Виктором Стиннером в gh-108765).В Windows
Python.h
больше не включает стандартный заголовочный файл<stddef.h>
. При необходимости его теперь следует включать явно. Например, он предоставляет функциюoffsetof()
, а также типыsize_t
иptrdiff_t
. Явное включение<stddef.h>
уже было необходимо для всех остальных платформ, макросHAVE_STDDEF_H
определен только в Windows. (Внесено Виктором Стиннером в gh-108765).Если макрос
Py_LIMITED_API
определен, то макросыPy_BUILD_CORE
,Py_BUILD_CORE_BUILTIN
иPy_BUILD_CORE_MODULE
теперь не определены<Python.h>
. (Внесено Виктором Стиннером в gh-85283).Старые макросы
Py_TRASHCAN_SAFE_BEGIN
иPy_TRASHCAN_SAFE_END
для мусорных корзин были удалены. Они должны быть заменены новыми макросамиPy_TRASHCAN_BEGIN
иPy_TRASHCAN_END
.Функция
tp_dealloc
, содержащая старые макросы, такие как:static void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_SAFE_BEGIN(p); ... Py_TRASHCAN_SAFE_END }
должны перейти на новые макросы следующим образом:
static void mytype_dealloc(mytype *p) { PyObject_GC_UnTrack(p); Py_TRASHCAN_BEGIN(p, mytype_dealloc) ... Py_TRASHCAN_END }
Обратите внимание, что
Py_TRASHCAN_BEGIN
имеет второй аргумент, который должен быть функцией деаллокации, в которой он находится. Новые макросы были добавлены в Python 3.8, а старые макросы были устаревшими в Python 3.11. (Внесено Ирит Катриэль в gh-105111).Функции
PyDict_GetItem()
,PyDict_GetItemString()
,PyMapping_HasKey()
,PyMapping_HasKeyString()
,PyObject_HasAttr()
,PyObject_HasAttrString()
иPySys_GetObject()
, которые очищали все ошибки, возникшие при их вызове, теперь сообщают о них с помощьюsys.unraisablehook()
. Вы можете заменить их другими функциями, как рекомендуется в документации. (Внесено Сергеем Сторчакой в gh-106672).PyCode_GetFirstFree()
теперь является нестабильным API и был переименован вPyUnstable_Code_GetFirstFree()
. (Внесено Богданом Романюком в gh-115781).
Эффекты мутации словаря, возвращаемого из
PyEval_GetLocals()
в optimized scope, изменились. Новые записи dict, добавленные таким образом, теперь будут только видны последующим вызовамPyEval_GetLocals()
в этом фрейме, посколькуPyFrame_GetLocals()
,locals()
иFrameType.f_locals
больше не обращаются к одному и тому же базовому кэшированному словарю. Изменения, внесенные в записи для реальных имен переменных и имен, добавленных через прокси-интерфейсы записи, будут перезаписаны при последующих вызовахPyEval_GetLocals()
в этом кадре. Рекомендуемое обновление кода зависит от того, как использовалась функция, поэтому за подробностями обратитесь к уведомлению об устаревании функции. (Изменено в рамках PEP 667).Вызов
PyFrame_GetLocals()
в optimized scope теперь возвращает прокси для записи, а не снимок, который обновляется в неустановленное время. Если снимок необходим, его нужно создать явно (например, с помощьюPyDict_Copy()
) или вызвав новыйPyEval_GetFrameLocals()
. API. (Изменено в рамках PEP 667).PyFrame_FastToLocals()
иPyFrame_FastToLocalsWithError()
больше не имеют никакого эффекта. Вызов этих функций стал излишним со времен Python 3.11, когда впервые появиласьPyFrame_GetLocals()
. (Изменено в рамках PEP 667).PyFrame_LocalsToFast()
больше не имеет никакого эффекта. Вызов этой функции теперь избыточен, посколькуPyFrame_GetLocals()
возвращает прокси для optimized scopes (изменено в рамках PEP 667).
Удаленные API на языке C¶
Удаление многих API (функций, макросов, переменных) с именами, имеющими префикс
_Py
или_PY
(считаются частными API). Если ваш проект затронут одним из этих удалений и вы считаете, что удаленный API должен оставаться доступным, пожалуйста, откройте новую проблему для запроса публичного C API и добавьтеcc @vstinner
к проблеме, чтобы уведомить Виктора Стиннера. (Внесено Виктором Стиннером в gh-106320).Удалите функции, устаревшие в Python 3.9:
PyEval_CallObject()
,PyEval_CallObjectWithKeywords()
: используйте вместо нихPyObject_CallNoArgs()
илиPyObject_Call()
. Внимание: позиционные аргументыPyObject_Call()
должны бытьtuple
и не должны бытьNULL
, аргументы ключевых слов должны бытьdict
илиNULL
, в то время как удаленные функции проверяли тип аргументов и принимали позиционные и ключевые аргументыNULL
. Чтобы заменитьPyEval_CallObjectWithKeywords(func, NULL, kwargs)
наPyObject_Call()
, передайте пустой кортеж в качестве позиционных аргументов с помощьюPyTuple_New(0)
.PyEval_CallFunction()
: используйте вместо негоPyObject_CallFunction()
.PyEval_CallMethod()
: используйте вместо негоPyObject_CallMethod()
.PyCFunction_Call()
: используйте вместо негоPyObject_Call()
.
(Внесено Виктором Стиннером в gh-105107).
Удалите старые буферные протоколы, устаревшие в Python 3.0. Вместо этого используйте Буферный протокол.
PyObject_CheckReadBuffer()
: ИспользуйтеPyObject_CheckBuffer()
, чтобы проверить, поддерживает ли объект протокол буфера. Обратите внимание, чтоPyObject_CheckBuffer()
не гарантирует успехаPyObject_GetBuffer()
. Чтобы проверить, действительно ли объект доступен для чтения, смотрите следующий примерPyObject_GetBuffer()
.PyObject_AsCharBuffer()
,PyObject_AsReadBuffer()
:PyObject_GetBuffer()
иPyBuffer_Release()
вместо этого:Py_buffer view; if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) { return NULL; } // Use `view.buf` and `view.len` to read from the buffer. // You may need to cast buf as `(const char*)view.buf`. PyBuffer_Release(&view);
PyObject_AsWriteBuffer()
: Вместо этого используйтеPyObject_GetBuffer()
иPyBuffer_Release()
:Py_buffer view; if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) { return NULL; } // Use `view.buf` and `view.len` to write to the buffer. PyBuffer_Release(&view);
(Внесено Инада Наоки в gh-85275).
Удалите следующие старые функции для настройки инициализации Python, устаревшие в Python 3.11:
PySys_AddWarnOptionUnicode()
: используйте вместо негоPyConfig.warnoptions
.PySys_AddWarnOption()
: используйте вместо негоPyConfig.warnoptions
.PySys_AddXOption()
: используйте вместо негоPyConfig.xoptions
.PySys_HasWarnOptions()
: используйте вместо негоPyConfig.xoptions
.PySys_SetPath()
: вместо этого установитеPyConfig.module_search_paths
.Py_SetPath()
: вместо этого установитеPyConfig.module_search_paths
.Py_SetStandardStreamEncoding()
: вместо него установитеPyConfig.stdio_encoding
, а также, возможно,PyConfig.legacy_windows_stdio
(в Windows)._Py_SetProgramFullPath()
: вместо этого установитеPyConfig.executable
.
Используйте новый
PyConfig
API вместо Python Initialization Configuration (PEP 587), добавленного в Python 3.8. (Внесено Виктором Стиннером в gh-105145).Удалите функцию
PyEval_ThreadsInitialized()
, устаревшую в Python 3.9. Начиная с Python 3.7,Py_Initialize()
всегда создает GIL: вызовPyEval_InitThreads()
ничего не дает, аPyEval_ThreadsInitialized()
всегда возвращает ненулевое значение. (Внесено Виктором Стиннером в gh-105182).Удалите функции
PyEval_AcquireLock()
иPyEval_ReleaseLock()
, устаревшие в Python 3.2. Они не обновляют текущее состояние потока. Их можно заменить на:низкоуровневые
PyEval_AcquireThread()
иPyEval_RestoreThread()
;
(Внесено Виктором Стиннером в gh-105182).
Удалите приватную функцию
_PyObject_FastCall()
: используйтеPyObject_Vectorcall()
, которая доступна с Python 3.8 (PEP 590). (Внесено Виктором Стиннером в gh-106023).Удалите заголовочный файл
cpython/pytime.h
: он содержал только приватные функции. (Внесено Виктором Стиннером в gh-106316).Удалите псевдоним
_PyInterpreterState_Get()
дляPyInterpreterState_Get()
, который был сохранен для обратной совместимости с Python 3.8. Псевдоним pythoncapi-compat project может быть использован для полученияPyInterpreterState_Get()
на Python 3.8 и старше. (Внесено Виктором Стиннером в gh-106320).Функция
PyModule_AddObject()
теперь является soft deprecated: Вместо нее следует использовать функцииPyModule_Add()
илиPyModule_AddObjectRef()
. (Внесено Сергеем Сторчакой в gh-86493).
Утраченные API на языке C¶
Откажитесь от старых типов
Py_UNICODE
иPY_UNICODE_TYPE
: вместо них используйте непосредственно типwchar_t
. Начиная с Python 3.3,Py_UNICODE
иPY_UNICODE_TYPE
- это просто псевдонимы дляwchar_t
. (Внесено Виктором Стиннером в gh-105156).Устраните старые функции инициализации Python:
PySys_ResetWarnOptions()
: вместо этого очиститеsys.warnoptions
иwarnings.filters
.Py_GetExecPrefix()
: получите вместо негоsys.exec_prefix
.Py_GetPath()
: получите вместо негоsys.path
.Py_GetPrefix()
: получите вместо негоsys.prefix
.Py_GetProgramFullPath()
: получите вместо негоsys.executable
.Py_GetProgramName()
: получите вместо негоsys.executable
.Py_GetPythonHome()
: вместо этого получите переменную окруженияPyConfig.home
илиPYTHONHOME
.
Функции, которые планируется удалить в Python 3.15. (Внесено Виктором Стиннером в gh-105145).
Устраните функцию
PyImport_ImportModuleNoBlock()
, которая с Python 3.3 является просто псевдонимом дляPyImport_ImportModule()
. Планируется к удалению в Python 3.15. (Внесено Виктором Стиннером в gh-105396).Утратили силу функции
PyWeakref_GetObject()
иPyWeakref_GET_OBJECT()
, которые возвращают borrowed reference: вместо них используйте новую функциюPyWeakref_GetRef()
, которая возвращает strong reference. Функция pythoncapi-compat project может быть использована для полученияPyWeakref_GetRef()
в Python 3.12 и старше. (Внесено Виктором Стиннером в gh-105927).Утрачиваем функции
PyEval_GetBuiltins()
,PyEval_GetGlobals()
иPyEval_GetLocals()
, которые возвращают значение borrowed reference. Рекомендуемые замены см. в уведомлениях об устаревании каждой функции. (Мягкие функции устарели как часть PEP 667).
Удаление ожиданий в Python 3.14¶
Создание неизменяемых типов (
Py_TPFLAGS_IMMUTABLETYPE
) с изменяемыми основаниями с помощью API языка C.Функции для настройки инициализации Python, устаревшие в Python 3.11:
PySys_SetArgvEx()
: вместо этого установитеPyConfig.argv
.PySys_SetArgv()
: вместо этого установитеPyConfig.argv
.Py_SetProgramName()
: вместо этого установитеPyConfig.program_name
.Py_SetPythonHome()
: вместо этого установитеPyConfig.home
.
API
Py_InitializeFromConfig()
API следует использовать сPyConfig
.Глобальные переменные конфигурации:
Py_DebugFlag
: использоватьPyConfig.parser_debug
Py_VerboseFlag
: использоватьPyConfig.verbose
Py_QuietFlag
: использоватьPyConfig.quiet
Py_InteractiveFlag
: использоватьPyConfig.interactive
Py_InspectFlag
: использоватьPyConfig.inspect
Py_OptimizeFlag
: использоватьPyConfig.optimization_level
Py_NoSiteFlag
: использоватьPyConfig.site_import
Py_BytesWarningFlag
: использоватьPyConfig.bytes_warning
Py_FrozenFlag
: использоватьPyConfig.pathconfig_warnings
Py_IgnoreEnvironmentFlag
: использоватьPyConfig.use_environment
Py_DontWriteBytecodeFlag
: использоватьPyConfig.write_bytecode
Py_NoUserSiteDirectory
: использоватьPyConfig.user_site_directory
Py_UnbufferedStdioFlag
: использоватьPyConfig.buffered_stdio
Py_HashRandomizationFlag
: используйтеPyConfig.use_hash_seed
иPyConfig.hash_seed
.Py_IsolatedFlag
: использоватьPyConfig.isolated
Py_LegacyWindowsFSEncodingFlag
: использоватьPyPreConfig.legacy_windows_fs_encoding
Py_LegacyWindowsStdioFlag
: использоватьPyConfig.legacy_windows_stdio
Py_FileSystemDefaultEncoding
: использоватьPyConfig.filesystem_encoding
Py_HasFileSystemDefaultEncoding
: использоватьPyConfig.filesystem_encoding
Py_FileSystemDefaultEncodeErrors
: использоватьPyConfig.filesystem_errors
Py_UTF8Mode
: используйтеPyPreConfig.utf8_mode
(см.Py_PreInitialize()
)
API
Py_InitializeFromConfig()
API следует использовать сPyConfig
.
Удаление ожиданий в Python 3.15¶
Упакованная копия
libmpdecimal
.PyImport_ImportModuleNoBlock()
: использоватьPyImport_ImportModule()
.PyWeakref_GET_OBJECT()
: используйте вместо негоPyWeakref_GetRef()
.PyWeakref_GetObject()
: используйте вместо негоPyWeakref_GetRef()
.Тип
Py_UNICODE_WIDE
: вместо него используйтеwchar_t
.Тип
Py_UNICODE
: вместо него используйтеwchar_t
.Функции инициализации Python:
PySys_ResetWarnOptions()
: вместо этого очиститеsys.warnoptions
иwarnings.filters
.Py_GetExecPrefix()
: получите вместо негоsys.exec_prefix
.Py_GetPath()
: получите вместо негоsys.path
.Py_GetPrefix()
: получите вместо негоsys.prefix
.Py_GetProgramFullPath()
: получите вместо негоsys.executable
.Py_GetProgramName()
: получите вместо негоsys.executable
.Py_GetPythonHome()
: вместо этого получите переменную окруженияPyConfig.home
илиPYTHONHOME
.
Ожидается удаление в будущих версиях¶
Следующие API были устаревшими в предыдущих версиях Python и будут удалены, хотя на данный момент дата их удаления не назначена.
Py_TPFLAGS_HAVE_FINALIZE
: не требуется, начиная с Python 3.8.PyErr_Fetch()
: использоватьPyErr_GetRaisedException()
.PyErr_NormalizeException()
: использоватьPyErr_GetRaisedException()
.PyErr_Restore()
: использоватьPyErr_SetRaisedException()
.PyModule_GetFilename()
: использоватьPyModule_GetFilenameObject()
.PyOS_AfterFork()
: использоватьPyOS_AfterFork_Child()
.PyUnicode_AsDecodedObject()
.PyUnicode_AsDecodedUnicode()
.PyUnicode_AsEncodedObject()
.PyUnicode_AsEncodedUnicode()
.PyUnicode_READY()
: не требуется, начиная с версии Python 3.12._PyErr_ChainExceptions()
.Член
PyBytesObject.ob_shash
: вместо этого вызовитеPyObject_Hash()
.PyDictObject.ma_version_tag
участник.API TLS:
PyThread_create_key()
: использоватьPyThread_tss_alloc()
.PyThread_delete_key()
: использоватьPyThread_tss_free()
.PyThread_set_key_value()
: использоватьPyThread_tss_set()
.PyThread_get_key_value()
: использоватьPyThread_tss_get()
.PyThread_delete_key_value()
: использоватьPyThread_tss_delete()
.PyThread_ReInitTLS()
: больше не нужен.
Удалите недокументированную константу
PY_TIMEOUT_MAX
из ограниченного API C. (Внесено Виктором Стиннером в gh-110014).
Изменения в регрессионных тестах¶
Python, созданный с помощью
configure
--with-pydebug
теперь поддерживает опцию командной строки-X presite=package.module
. Если она используется, то указывает модуль, который должен быть импортирован на ранней стадии жизненного цикла интерпретатора, до выполненияsite.py
. (Внесено Лукашем Ланга в gh-110769).