Документация Python неофициальный перевод
Содержание страницы

Что нового в Python 3.16What’s new in Python 3.16

Редактор:

Уточняется

В этой статье рассматриваются новые возможности Python 3.16 по сравнению с версией 3.15.

Полные сведения см. в журнале изменений.

Примечание

Пользователям предварительных версий следует знать, что этот документ находится в черновой форме. Он будет существенно обновляться по мере приближения выхода Python 3.16, поэтому стоит заглядывать сюда снова, даже после прочтения предыдущих версий.

Краткое описание – основные возможности выпускаSummary – release highlights

Новые возможностиNew features

Прочие изменения в языкеOther language changes

Новые модулиNew modules

  • Пока нет.

Улучшенные модулиImproved modules

curses

  • Добавлена поддержка нескольких терминалов в модуль curses: новые функции curses.newterm(), curses.set_term() и curses.new_prescr(), соответствующий объект screen и метод window.use(). (Автор: Serhiy Storchaka; gh-90092.)

  • Методы окон curses для работы с символьными ячейками теперь принимают полную символьную ячейку – пробельный символ, за которым необязательно следуют комбинирующие символы – помимо одного целого числа или байтового символа. Это затрагивает addch(), bkgd(), bkgdset(), border(), box(), echochar(), hline(), insch() и vline(). Также добавлены методы чтения широких символов get_wstr() и in_wstr(), аналоги getstr() и instr(), возвращающие str вместо bytes, а также функции модуля curses.erasewchar(), curses.killwchar() и curses.wunctrl() – широкосимвольные аналоги curses.erasechar(), curses.killchar() и curses.unctrl(). В узкой сборке (не ncursesw) символьная ячейка содержит один символ без комбинирующих знаков, представимый в виде одного байта в кодировке окна, а in_wstr() возвращает его декодированный текст. (Автор: Serhiy Storchaka; gh-151757.)

  • Функции и методы широких символов cursesget_wch(), get_wstr(), curses.unget_wch(), curses.erasewchar(), curses.killwchar() и curses.wunctrl() – теперь также работают, когда Python собран без библиотеки curses, поддерживающей широкие символы, в 8-битной локали, где каждый символ представляет собой один байт в соответствующей кодировке. curses.ungetch() теперь также принимает строку из одного символа, например curses.unget_wch(); в широкосимвольной сборке это может быть любой символ (ранее многобайтовый символ вызывал OverflowError). (Автор: Serhiy Storchaka; gh-152470.)

  • Добавлен curses.nofilter(), отменяющий действие curses.filter(). (Автор: Serhiy Storchaka; gh-151744.)

  • Добавлены функции curses: curses.alloc_pair(), curses.find_pair(), curses.free_pair() и curses.reset_color_pairs() для динамического управления цветовыми парами, доступные при сборке с широкосимвольной ncurses с поддержкой расширенных цветов. (Автор: Serhiy Storchaka; gh-151774.)

  • Добавлены функции curses и методы окон, сообщающие состояние, которое ранее можно было только установить, например curses.window.is_keypad(), curses.window.getparent() и curses.is_cbreak(), доступные при сборке с ncurses с NCURSES_EXT_FUNCS. (Автор: Serhiy Storchaka; gh-151776.)

  • Добавлены методы окна curses: attr_get(), attr_set(), attr_on(), attr_off() и color_set(), которые передают цветовую пару отдельным аргументом вместо встраивания её в значение атрибута, а также соответствующие константы атрибутов WA_*. (Автор: Serhiy Storchaka; gh-152219.)

  • Добавлен тип curses.complexchar, представляющий стилизованную символьную ячейку (её текст, атрибуты и цветовую пару), и методы окна in_wch() и getbkgrnd(), возвращающие такой объект – аналоги inch() и getbkgd(). Методы символьных ячеек, такие как addch() и border(), теперь также принимают complexchar. Они работают независимо от того, собран ли Python с библиотекой curses, поддерживающей широкие символы; в узкой сборке ячейка содержит один символ, представимый в виде одного байта в кодировке окна (поэтому поддерживаются только 8-битные локали). (Автор: Serhiy Storchaka; gh-152233.)

  • Добавлен тип curses.complexstr – неизменяемая последовательность стилизованных ячеек (строковый аналог complexchar) и метод окна in_wchstr(), возвращающий такой объект. Методы строковых ячеек addstr(), addnstr(), insstr() и insnstr() теперь также принимают complexstr. Как и complexchar, он работает независимо от того, собран ли Python с библиотекой curses, поддерживающей широкие символы. (Автор: Serhiy Storchaka; gh-152233.)

  • Добавлен метод окна curses: dupwin(), возвращающий новое окно, которое является независимой копией существующего. (Автор: Serhiy Storchaka; gh-152258.)

  • Добавлены функции curses: scr_dump(), scr_restore(), scr_init() и scr_set(), которые сохраняют весь экран в файл и восстанавливают его. (Автор: Serhiy Storchaka; gh-152260.)

  • Добавлены функции мягких клавиш-меток в модуль curses, управляющие строкой меток вдоль нижней строки экрана: slk_init(), slk_set(), slk_label(), slk_refresh(), slk_noutrefresh(), slk_clear(), slk_restore(), slk_touch(), функции атрибутов slk_attron(), slk_attroff(), slk_attrset(), slk_attr(), slk_attr_on(), slk_attr_off(), slk_attr_set() и slk_color(). (Автор: Serhiy Storchaka; gh-152263.)

  • Добавлена функция curses.term_attrs(), возвращающая поддерживаемые видеоатрибуты в виде значений WA_* – аналог curses.termattrs(). (Автор: Serhiy Storchaka; gh-152332.)

  • Добавлены функции управления клавишами curses: define_key(), key_defined() и keyok(), доступные при сборке с ncurses с NCURSES_EXT_FUNCS. (Автор: Serhiy Storchaka; gh-152334.)

  • Добавлены функция curses.has_mouse() и метод curses.window.mouse_trafo(), завершающие интерфейс мыши curses. (Автор: Serhiy Storchaka; gh-152325.)

  • curses.textpad.Textbox теперь поддерживает ввод и считывание всего диапазона Unicode, включая комбинирующие символы, если curses собран с поддержкой широких символов. (Автор: Serhiy Storchaka; gh-133031.)

gzip

  • gzip.open() теперь принимает необязательный аргумент mtime, который передаётся конструктору класса GzipFile. (Автор: Marin Misur; gh-91372.)

io

  • Добавлен метод io.BytesIO.peek() для чтения без перемещения позиции. (Автор: Marcel Martin; gh-90533.)

imaplib

  • Добавлен метод id(), обёртка для команды ID (RFC 2971). (Автор: Serhiy Storchaka; gh-98092.)

  • Добавлен метод move(), обёртка для команды MOVE (RFC 6851). (Автор: Serhiy Storchaka; gh-77508.)

  • Добавлен метод login_plain(), выполняющий аутентификацию с помощью механизма SASL PLAIN (RFC 4616) и поддерживающий не-ASCII имена пользователей и пароли. (Автор: Przemysław Buczkowski и Serhiy Storchaka; gh-89869.)

logging

  • TimedRotatingFileHandler теперь использует время создания вместо времени последнего изменения существующего файла журнала в качестве основы для первой ротации после создания обработчика, если это поддерживается ОС и файловой системой. Это позволяет использовать его в короткоживущих программах, которые запускаются и завершаются до истечения интервала ротации. (Автор: Iván Márton и Serhiy Storchaka; gh-84649.)

lzma

  • Добавлена поддержка новых фильтров BCJ ARM64 и RISC-V через lzma.FILTER_ARM64 и lzma.FILTER_RISCV. Обратите внимание, что новые фильтры будут работать только в том случае, если их поддерживает библиотека времени выполнения. Фильтр ARM64 требует lzma 5.4.0 или новее, а RISC-V – 5.6.0 или новее. (Автор: Chien Wong; gh-115988.)

math

  • Добавлены тригонометрические функции, работающие в единицах полуоборотов, а не радианов. Новые функции math.acospi(), math.asinpi(), math.atanpi() и math.atan2pi() возвращают углы в полуоборотах. Новые функции math.cospi(), math.sinpi() и math.tanpi() принимают аргументы в виде углов в полуоборотах. Эти функции рекомендованы стандартом IEEE 754-2019 и стандартизированы в C23. (Автор: Jeff Epler; gh-150534.)

os

  • Добавлена os.pidfd_getfd() для дублирования файлового дескриптора из другого процесса через pidfd. Доступно на Linux 5.6+. (Автор: Maurycy Pawłowski-Wieroński в gh-149464.)

re

  • re теперь поддерживает операции над множествами и вложенные множества в символьных классах, как описано в Unicode Technical Standard #18: разность множеств ([A--B]), пересечение ([A&&B]) и объединение ([A||B]), где операндом может быть вложенное множество, записанное в квадратных скобках. Например, [a-z--[aeiou]] соответствует строчной согласной букве ASCII. (Автор: Serhiy Storchaka в gh-152100.)

  • Регулярные выражения теперь поддерживают экранирования свойств Unicode \p{...} и \P{...}, которые сопоставляют символ по свойству Unicode – например, \p{Lu} (заглавная буква), \p{Cased} или \p{ASCII}. Список поддерживаемых свойств см. в синтаксисе регулярных выражений. (Автор: Serhiy Storchaka в gh-95555.)

shlex

  • Добавлен параметр, передаваемый только по ключу, force в shlex.quote() для принудительного заключения строки в кавычки, даже если она уже безопасна для оболочки без кавычек. (Автор: Jay Berry в gh-148846.)

tkinter

  • Добавлено много методов tkinter.ttk.Treeview, обёртывающих расширенные команды виджета ttk::treeview из Tk 9.1, таких как sort(), search(), expand(), collapse(), hide(), unhide(), а также методы для фокуса ячейки, выделения и разметки. Методы expand() и collapse() (без рекурсии) также работают на Tk старше 9.1. (Автор: Serhiy Storchaka в gh-151910.)

  • Добавлены новые методы tkinter.Text: edit_canundo() и edit_canredo(), которые возвращают, возможна ли отмена (undo) или повтор (redo). (Автор: Serhiy Storchaka в gh-151674.)

  • Добавлены новые методы tkinter.Text: sync() и pendingsync(), которые управляют синхронизацией отображаемого представления с базовым текстом и сообщают о ней. (Автор: Serhiy Storchaka в gh-151675.)

  • Добавлен метод ttk.Style.theme_styles, который возвращает список стилей, определённых в теме. (Автор: Serhiy Storchaka в gh-151920.)

  • Добавлены новые методы tkinter.Canvas: rchars(), который заменяет текст или координаты элементов холста, и rotate(), который вращает координаты элементов холста. (Автор: Serhiy Storchaka в gh-151876.)

  • Добавлен метод validate() в виджеты tkinter.Entry и tkinter.Spinbox, который принудительно выполняет проверочную команду. (Автор: Serhiy Storchaka в gh-151878.)

  • Добавлены метод tkinter.Menu.postcascade(), а также методы tk_scaling() и tk_inactive(), которые соответственно запрашивают или устанавливают коэффициент масштабирования экрана и сообщают время бездействия пользователя. (Автор: Serhiy Storchaka в gh-151881.)

  • Добавлены новые методы управления окнами: winfo_isdark() (обнаружение тёмной темы), wm_iconbadge() (значок приложения) и wm_stackorder() (порядок расположения окон верхнего уровня). (Автор: Serhiy Storchaka в gh-151874.)

  • Добавлены методы tk_appname(), tk_useinputmethods() и tk_caret(), предоставляющие доступ к имени отправки приложения, состоянию X Input Methods и положению курсора метода ввода. (Автор: Serhiy Storchaka в gh-151886.)

  • Добавлена поддержка дополнительных опций в методах tkinter.PhotoImage: параметр format в put(), параметр metadata в put(), параметры read(), write() и data(), а также параметр withalpha в get(). (Автор: Serhiy Storchaka в gh-151890.)

  • Добавлен метод redither(), который пересчитывает изображение с дизерингом, когда его данные были переданы частями. (Автор: Serhiy Storchaka в gh-151888.)

  • tkinter.OptionMenu теперь принимает произвольные опции tkinter.Menubutton в качестве именованных аргументов, которые также могут переопределять его внешний вид по умолчанию. (Автор: Serhiy Storchaka в gh-101284.)

  • Диалоги tkinter.simpledialog были модернизированы, чтобы соответствовать внешнему виду и поведению нативных диалогов Tk. Диалоги tkinter.simpledialog.SimpleDialog, askinteger(), askfloat() и askstring() теперь строятся из тематических виджетов tkinter.ttk вместо классических виджетов tkinter; базовый класс tkinter.simpledialog.Dialog по-прежнему по умолчанию использует классические виджеты для совместимости. Оба класса Dialog и SimpleDialog получили параметр use_ttk, который выбирает между классическими виджетами Tk и тематическими виджетами ttk. SimpleDialog также получил параметры bitmap и detail, рисует стандартные значки тематическими изображениями в версии ttk и принимает сопоставления параметров кнопок как записи buttons. (Автор: Serhiy Storchaka в gh-59396.)

  • Диалог tkinter.filedialog.FileDialog и его подклассы tkinter.filedialog.LoadFileDialog и tkinter.filedialog.SaveFileDialog теперь по умолчанию строятся из тематических виджетов tkinter.ttk вместо классических виджетов tkinter и получили параметр use_ttk для выбора между ними. (Автор: Serhiy Storchaka в gh-59396.)

  • tkinter.font.Font теперь может оборачивать описание шрифта без создания нового именованного шрифта, передавая его как font с помощью exists=True и без name. Это позволяет избежать потери точности в actual(), measure() и metrics(). (Автор: Serhiy Storchaka в gh-143990.)

xml

  • Добавлена поддержка множества многобайтовых кодировок в XML parser: «cp932», «cp949», «cp950», «Big5», «EUC-JP», «GB2312», «GBK», «johab» и «Shift_JIS». Добавлена частичная поддержка (только символы BMP) для многобайтовых кодировок «Big5-HKSCS», «EUC_JIS-2004», «EUC_JISX0213», «Shift_JIS-2004», «Shift_JISX0213», «utf-8-sig» и нестандартных псевдонимов, таких как «UTF8» (без дефиса). Теперь парсер вызывает ValueError для известных неподдерживаемых многобайтовых кодировок, таких как «ISO-2022-JP» или «raw-unicode-escape», вместо того чтобы завершаться ошибкой позже при встрече с не-ASCII данными. (Автор: Serhiy Storchaka в gh-62259.)

zipfile

  • Добавлены ZipFile.remove() для удаления элемента из центрального каталога архива и ZipFile.repack() для освобождения места, занятого локальными записями файлов удалённых элементов. (Автор: Danny Lin в gh-51067.)

ОптимизацииOptimizations

re

  • Экранирования символьных классов (\d, \D, \s, \S, \w и \W) вне набора символов, а также наборы символов, содержащие одно такое экранирование (например, [\d] или [^\s]), теперь компилируются в один опкод CATEGORY вместо того, чтобы быть обёрнутыми в блок IN. Это ускоряет сопоставление таких шаблонов, как \d+, и уменьшает размер скомпилированного байт-кода. (Автор: Serhiy Storchaka в gh-152033 и Pieter Eendebak в gh-152056.)

module_name

  • TODO

УдаленоRemoved

annotationlib

array

  • Код формата 'u' (wchar_t), устаревший в документации с Python 3.3 и во время выполнения с Python 3.13. Вместо него используйте код формата 'w' (Py_UCS4, всегда 4 байта).

asyncio

  • asyncio.iscoroutinefunction(), устаревшее с Python 3.14. Вместо него используйте inspect.iscoroutinefunction().

  • Система политик цикла событий, включая классы asyncio.AbstractEventLoopPolicy, asyncio.DefaultEventLoopPolicy, asyncio.WindowsSelectorEventLoopPolicy и asyncio.WindowsProactorEventLoopPolicy, а также функции asyncio.get_event_loop_policy() и asyncio.set_event_loop_policy(), устарела с Python 3.14. Вместо неё используйте asyncio.run() или asyncio.Runner с собственной loop_factory.

functools

  • Вызов реализации functools.reduce() на Python с function или sequence в качестве именованных аргументов устарел начиная с Python 3.14.

logging

  • Поддержка пользовательских обработчиков журнала с аргументом strm устарела и будет удалена в Python 3.16. Вместо этого определяйте обработчики с аргументом stream.

mimetypes

  • Допустимые расширения начинаются с точки «.» или пусты для mimetypes.MimeTypes.add_type(). Расширения без точки теперь вызывают ValueError.

shutil

  • Исключение ExecError устарело с Python 3.14. Оно не использовалось ни одной функцией в shutil начиная с Python 3.4. (Автор: Stan Ulbrych в gh-149567.)

symtable

  • Метод symtable.Class.get_methods() устарел с Python 3.14.

sys

  • Функция _enablelegacywindowsfsencoding() устарела с Python 3.13. Вместо неё используйте переменную окружения PYTHONLEGACYWINDOWSFSENCODING. (Автор: Stan Ulbrych в gh-149595.)

sysconfig

  • Функция sysconfig.expand_makefile_vars() устарела с Python 3.14. Вместо неё используйте аргумент vars функции sysconfig.get_paths(). (Автор: Stan Ulbrych в gh-149499.)

tarfile

  • Недокументированный и неиспользуемый атрибут tarfile.TarFile.tarfile устарел начиная с Python 3.13.

УстарелоDeprecated

Новые устареванияNew deprecations

  • abc

  • ast:

    • Классы slice, Index, ExtSlice, Suite, Param, AugLoad и AugStore, устаревшие с Python 3.9, больше не импортируются from ast import * и выдают предупреждение об устаревании при использовании. Эти классы планируется удалить в Python 3.21. Данные типы не создаются парсером и не принимаются генератором кода.

    • Свойство dims объектов ast.Tuple, устаревшее с Python 3.9, теперь выдает предупреждение об устаревании при использовании. Это свойство планируется удалить в Python 3.21. Вместо него используйте ast.Tuple.elts.

  • struct:

    • Мягкое устаревание с Python 3.15, сейчас использование кодов типов 'F' и 'D' устарело. Эти коды будут удалены в Python 3.21. Вместо них используйте двухбуквенные формы 'Zf' и 'Zd'. (Автор: Sergey B Kirpichev в gh-121249.)

  • tempfile

    • Приватное имя tempfile._TemporaryFileWrapper устарело и будет удалено в Python 3.21. Вместо него используйте новое публичное tempfile.TemporaryFileWrapper, которое является типом возврата tempfile.NamedTemporaryFile().

Запланировано к удалению в Python 3.17Pending removal in Python 3.17

  • datetime:

    • strptime() вызовы со строкой формата, содержащей %e (день месяца) без указания года. Это объявлено устаревшим начиная с Python 3.15. (Автор: Stan Ulbrych в gh-70647.)

  • collections.abc:

    • collections.abc.ByteString запланирован к удалению в Python 3.17.

      Используйте isinstance(obj, collections.abc.Buffer) для проверки, реализует ли obj протокол буфера во время выполнения. Для использования в аннотациях типов используйте Buffer или объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, bytes | bytearray | memoryview).

      ByteString изначально задумывался как абстрактный класс, который должен был служить супертипом как для bytes, так и для bytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром ByteString, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как memoryview, также никогда не рассматривались как подтипы ByteString (ни во время выполнения, ни статическими проверками типов).

      См. PEP 688 для получения подробностей. (Автор: Shantanu Jain в gh-91896.)

  • encodings:

    • Передача кодировок, не являющихся ASCII, в encodings.normalize_encoding() объявлена устаревшей и запланирована к удалению в Python 3.17. (Автор: Stan Ulbrych в gh-136702.)

  • webbrowser:

    • webbrowser.MacOSXOSAScript объявлен устаревшим в пользу webbrowser.MacOS. (gh-137586)

  • typing:

    • До Python 3.14 старые объединения реализовывались с помощью приватного класса typing._UnionGenericAlias. Этот класс больше не нужен для реализации, но он сохранён для обратной совместимости, его удаление запланировано на Python 3.17. Пользователям следует использовать документированные вспомогательные средства интроспекции, такие как typing.get_origin() и typing.get_args(), вместо того чтобы полагаться на детали приватной реализации.

    • typing.ByteString, устаревший с Python 3.9, запланирован к удалению в Python 3.17.

      Используйте isinstance(obj, collections.abc.Buffer) для проверки, реализует ли obj протокол буфера во время выполнения. Для использования в аннотациях типов используйте Buffer или объединение, которое явно указывает типы, поддерживаемые вашим кодом (например, bytes | bytearray | memoryview).

      ByteString изначально задумывался как абстрактный класс, который должен был служить супертипом как для bytes, так и для bytearray. Однако, поскольку у ABC никогда не было методов, знание того, что объект является экземпляром ByteString, никогда не давало полезной информации об объекте. Другие распространённые типы буферов, такие как memoryview, также никогда не рассматривались как подтипы ByteString (ни во время выполнения, ни статическими проверками типов).

      См. PEP 688 для получения подробностей. (Автор: Shantanu Jain в gh-91896.)

  • tkinter:

    • Методы tkinter.Variable: trace_variable(), trace() (псевдоним trace_variable()), trace_vdelete() и trace_vinfo(), устаревшие с Python 3.14, запланированы к удалению в Python 3.17. Используйте trace_add(), trace_remove() и trace_info() вместо них. (Автор: Serhiy Storchaka в gh-120220.)

Запланировано удаление в Python 3.18Pending removal in Python 3.18

  • Больше не принимает логическое значение, если ожидается файловый дескриптор. (Автор: Serhiy Storchaka в gh-82626.)

  • decimal:

    • Нестандартный и недокументированный Decimal спецификатор формата 'N', который поддерживается только в реализации C модуля decimal, устарел с Python 3.13. (Автор: Serhiy Storchaka в gh-89902.)

  • Устаревшие элементы, определённые PEP 829:

    • Строки import в файлах name.pth молча игнорируются.

    (Вклад: Barry Warsaw в gh-148641.)

Запланировано к удалению в Python 3.19Pending removal in Python 3.19

  • ctypes:

    • Неявное переключение на совместимую с MSVC структуру путём установки _pack_ без _layout_ на платформах, отличных от Windows.

  • hashlib:

    • В конструкторах хеш-функций, таких как new(), или прямых конструкторах, названных по имени хеша, таких как md5() и sha256(), их необязательный параметр начальных данных мог также передаваться как именованный аргумент с именем data= или string= в различных реализациях hashlib.

      Поддержка имени именованного аргумента string теперь устарела и будет удалена в Python 3.19.

      До Python 3.13 именованный параметр string не поддерживался правильно в зависимости от реализации хеш-функций на стороне бэкенда. Предпочтительно передавать начальные данные как позиционный аргумент для максимальной обратной совместимости.

  • http.cookies:

  • imaplib:

    • Изменение IMAP4.file теперь устарело и будет удалено в Python 3.19. Это свойство теперь не используется, и изменение его значения не приводит к автоматическому закрытию текущего файла.

      До Python 3.14 это свойство использовалось для реализации соответствующих методов read() и readline() для IMAP4, но с тех пор это уже не так.

Ожидается удаление в Python 3.20Pending removal in Python 3.20

  • Вызов метода __new__() объекта struct.Struct без аргумента format устарел и будет удалён в Python 3.20. Вызов __init__() метода для инициализированных объектов Struct устарел и будет удалён в Python 3.20.

    (Вклад: Sergey B Kirpichev и Serhiy Storchaka в gh-143715.)

  • Атрибуты __version__, version и VERSION были объявлены устаревшими в этих модулях стандартной библиотеки и будут удалены в Python 3.20. Вместо них используйте sys.version_info.

    (Вклад: Hugo van Kemenade и Stan Ulbrych в gh-76007.)

  • Устаревшие элементы, определённые PEP 829:

    • Предупреждения выводятся для строк import, найденных в name.pth файлах.

    • Файлы name.pth больше не декодируются в кодировке локали по умолчанию. Они ДОЛЖНЫ быть закодированы в utf-8-sig.

    (Вклад: Barry Warsaw в gh-148641.)

  • ast:

    • Создание экземпляров абстрактных узлов AST (таких как ast.AST или ast.expr) устарело и будет вызывать ошибку в Python 3.20.

Ожидается удаление в Python 3.21Pending removal in Python 3.21

  • abc

  • ast:

    • Классы slice, Index, ExtSlice, Suite, Param, AugLoad и AugStore будут удалены в Python 3.21. Эти типы не создаются синтаксическим анализатором и не принимаются генератором кода.

    • Свойство dims объекта ast.Tuple будет удалено в Python 3.21. Используйте свойство ast.Tuple.elts вместо него.

  • struct:

    • Мягко устаревшие с Python 3.15, коды типов 'F' и 'D' теперь устарели. Эти коды будут удалены в Python 3.21. Используйте вместо них двухбуквенные формы 'Zf' и 'Zd'.

  • tempfile:

    • tempfile._TemporaryFileWrapper будет удалён в Python 3.21. Используйте публичный tempfile.TemporaryFileWrapper вместо него.

Будет удалено в будущих версияхPending removal in future versions

Следующие API будут удалены в будущем, хотя на данный момент нет запланированной даты их удаления.

  • argparse:

    • Вложение групп аргументов и вложение взаимоисключающих групп устарело.

    • Передача недокументированного именованного аргумента prefix_chars в add_argument_group() теперь устарела.

    • Конвертер типов argparse.FileType устарел.

  • builtins:

    • Генераторы: сигнатура throw(type, exc, tb) и athrow(type, exc, tb) устарела: используйте throw(exc) и athrow(exc) вместо неё, сигнатуру с одним аргументом.

    • В настоящее время Python принимает числовые литералы, за которыми сразу следуют ключевые слова, например 0in x, 1or x, 0if 1else 2. Это допускает запутанные и неоднозначные выражения вроде [0x1for x in y] (которое может быть интерпретировано как [0x1 for x in y] или [0x1f or x in y]). Выдаётся предупреждение синтаксиса, если за числовым литералом сразу следует одно из ключевых слов and, else, for, if, in, is и or. В будущем выпуске это будет изменено на синтаксическую ошибку. (gh-87999)

    • Поддержка методов __index__() и __int__(), возвращающих не-int тип: эти методы должны будут возвращать экземпляр строгого подкласса int.

    • Поддержка метода __float__(), возвращающего строгий подкласс float: эти методы должны будут возвращать экземпляр float.

    • Поддержка метода __complex__(), возвращающего строгий подкласс complex: эти методы должны будут возвращать экземпляр complex.

    • Передача комплексного числа в качестве аргумента real или imag в конструкторе complex() теперь устарела; его следует передавать только как единственный позиционный аргумент. (Автор: Сергей Сторчака в gh-109218.)

  • calendar: константы calendar.January и calendar.February устарели и заменены на calendar.JANUARY и calendar.FEBRUARY. (Автор: Prince Roshan в gh-103636.)

  • codecs: используйте open() вместо codecs.open(). (gh-133038)

  • codeobject.co_lnotab: используйте метод codeobject.co_lines() вместо этого.

  • datetime:

    • utcnow(): используйте datetime.datetime.now(tz=datetime.UTC).

    • utcfromtimestamp(): используйте datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC).

  • gettext: значение множественного числа должно быть целым числом.

  • importlib:

    • cache_from_source(): параметр debug_override устарел: используйте параметр optimization вместо него.

  • importlib.metadata:

    • EntryPoints: интерфейс кортежа.

    • Неявное None для возвращаемых значений.

  • logging: метод warn() устарел начиная с Python 3.3, используйте warning() вместо него.

  • mailbox: использование StringIO в режиме ввода и текстовом режиме устарело, используйте BytesIO и двоичный режим.

  • os: вызов os.register_at_fork() в многопоточном процессе.

  • os.path: os.path.commonprefix() устарела, используйте os.path.commonpath() для префиксов путей. Функция os.path.commonprefix() объявлена устаревшей из-за вводящего в заблуждение названия и модуля. Эта функция небезопасна для использования в качестве префиксов путей, несмотря на то что находится в модуле для работы с путями, что означает, что легко случайно внести уязвимости обхода путей в программы на Python, используя эту функцию.

  • pydoc.ErrorDuringImport: кортежное значение для параметра exc_info устарело, используйте экземпляр исключения.

  • re: теперь применяются более строгие правила для числовых ссылок на группы и имён групп в регулярных выражениях. В качестве числовой ссылки теперь принимается только последовательность цифр ASCII. Имя группы в байтовых шаблонах и строках замены теперь может содержать только буквы ASCII, цифры и знак подчёркивания. (Автор: Сергей Сторчака в gh-91760.)

  • shutil: параметр onerror метода rmtree() устарел в Python 3.12; используйте параметр onexc вместо него.

  • ssl: опции и протоколы:

    • ssl.SSLContext без аргумента протокол устарело.

    • ssl.SSLContext: set_npn_protocols() и selected_npn_protocol() устарели: используйте ALPN вместо них.

    • ssl.OP_NO_SSL*: опции

    • ssl.OP_NO_TLS*: опции

    • ssl.PROTOCOL_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

  • threading: методы

  • typing.Text (gh-92332).

  • Внутренний класс typing._UnionGenericAlias больше не используется для реализации typing.Union. Для сохранения совместимости с пользователями, использующими этот закрытый класс, будет предоставлена прослойка совместимости как минимум до Python 3.17. (Автор: Jelle Zijlstra, gh-105499.)

  • unittest.IsolatedAsyncioTestCase: возврат значения, не являющегося None, из тестового примера устарел.

  • urllib.parse устаревшие функции: используйте urlparse() вместо них.

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • wsgiref: SimpleHandler.stdout.write() не должна выполнять частичную запись.

  • xml.etree.ElementTree: проверка истинностного значения Element устарела. В будущем выпуске она всегда будет возвращать True. Вместо этого используйте явные проверки len(elem) или elem is not None.

  • sys._clear_type_cache() устарело: используйте sys._clear_internal_caches() вместо него.

Перенос на Python 3.16Porting to Python 3.16

В этом разделе перечислены ранее описанные изменения и другие исправления ошибок, которые могут потребовать изменений в вашем коде.

  • В tkinter параметр name методов wait_variable(), setvar() и getvar(), а также параметр value метода setvar() теперь обязательны. Вызов этих методов без них, которые ранее по умолчанию равнялись 'PY_VAR' и '1', теперь вызывает TypeError. (Автор: Serhiy Storchaka в gh-152587.)

Изменения в сборкеBuild changes

  • Удалить встроенную копию десятичной библиотеки libmpdec из дерева исходного кода CPython для упрощения сопровождения и обновлений. Модуль decimal теперь будет безусловно использовать системную десятичную библиотеку libmpdec. Также удаляется теперь неиспользуемый флаг --with-system-libmpdec configure. Это изменение не влияет на бинарные релизы Python, которые в последних нескольких выпусках собирались с отдельной копией libmpdec.

    (Автор: Sergey B Kirpichev в gh-115119.)

  • Добавить флаг конфигурации --with-build-details-suffix, чтобы позволить дистрибутивам Linux, которые устанавливают несколько версий Python вместе в одном дереве, избежать конфликтов build-details.json.

    (Автор: Stefano Rivera в gh-131372.)

Изменения C APIC API changes

Новые возможностиNew features

  • TODO

Перенос на Python 3.16Porting to Python 3.16

  • TODO

Устаревшие C APIDeprecated C APIs

Запланировано удаление в Python 3.18Pending removal in Python 3.18

Запланировано к удалению в Python 3.19Pending removal in Python 3.19

  • PEP 456 поддержка встраивающих систем для определения схемы хеширования строк.

Ожидается удаление в Python 3.20Pending removal in Python 3.20

Будет удалено в будущих версияхPending removal in future versions

Следующие API устарели и будут удалены, хотя на данный момент дата их удаления не назначена.

Удалённые C APIRemoved C APIs