Cyber News

Python 3.15 RC1: ленивые импорты, UTF-8 по умолчанию и новый профайлер Tachyon

M
Markabus
·5 августа 2026 г.
Крупный план монитора на рабочем столе разработчика: экран с редактором кода и цветной подсветкой синтаксиса, тёплый свет настольной лампы, механическая клавиатура и кружка кофе в мягком расфокусе.

4 августа 2026 года вышел первый релиз-кандидат Python 3.15 (3.15.0rc1). Это значит, что новых функций в ветку больше не добавляют — команда фиксирует набор возможностей и правит только явные ошибки. Финальный релиз 3.15.0 ожидается в начале октября, а перед ним запланирован ещё один кандидат, rc2 (1 сентября). По словам менеджера релиза Хьюго ван Кемёнаде (Hugo van Kemenade), с этого момента «разрешены только проверенные изменения кода, которые являются явными исправлениями багов». Разберём, что нового и почему этот выпуск важен для разработчиков.

Ленивые импорты (PEP 810) — главная фича релиза

Самое заметное нововведение — явные ленивые импорты (lazy imports, отложенная загрузка модулей). Появилось «мягкое» ключевое слово lazy: модуль подгружается не в момент строки import, а при первом реальном обращении к нему.

lazy import json
lazy from pathlib import Path

print("Запуск...")          # json и pathlib ещё не загружены
data = json.loads("{}")     # вот здесь json наконец импортируется

Зачем это нужно? Тяжёлые библиотеки часто импортируются «на всякий случай», а реально используются лишь в части сценариев. Для утилит командной строки и serverless-функций (бессерверных функций, запускаемых по требованию) это выливается в сотни миллисекунд лишнего старта на каждый вызов. С lazy импорт «оплачивается» только тогда, когда выполнение действительно доходит до модуля. Поведение можно включить и глобально — флагом запуска -X lazy_imports или переменной окружения PYTHON_LAZY_IMPORTS, не переписывая исходники.

UTF-8 по умолчанию (PEP 686)

Python 3.15 наконец делает UTF-8 кодировкой по умолчанию независимо от локали операционной системы. Раньше open() без явного аргумента encoding= брал системную кодировку — и один и тот же скрипт мог читать файл по-разному на Linux и на Windows, где нередко всплывал cp1251 или cp1252. Теперь операции ввода-вывода без явно указанной кодировки везде работают в UTF-8.

Это устраняет целый класс «неуловимых» ошибок с кракозябрами, но у медали есть обратная сторона: код, который молча полагался на системную кодировку, может начать читать старые файлы иначе. Прежнее поведение возвращается переменной PYTHONUTF8=0. Перед обновлением стоит проверить места, где файлы открываются без явного encoding=.

Новые типы и синтаксис

В язык добавили сразу несколько давно ожидаемых вещей.

frozendict (PEP 814)

Неизменяемый (immutable) словарь, который к тому же хешируется и сохраняет порядок вставки. Его можно использовать как ключ другого словаря или элемент множества — то, чего не хватало для «замороженных» конфигов и кэшей:

a = frozendict(x=1, y=2)
hash(a)        # работает, если ключи и значения хешируемы
a["z"] = 3     # TypeError: изменять нельзя

sentinel (PEP 661)

Штатный способ создавать уникальные «сигнальные» значения-маркеры (sentinel) с понятным строковым представлением и поддержкой pickle (сериализации). Раньше почти каждый писал свой _MISSING = object(); теперь это часть стандартной библиотеки.

Распаковка в comprehensions (PEP 798)

В списковых, множественных и словарных включениях (comprehensions), а также в генераторах, заработали операторы распаковки * и **:

lists = [[1, 2], [3, 4], [5]]
[*L for L in lists]        # [1, 2, 3, 4, 5]

dicts = [{"a": 1}, {"b": 2}]
{**d for d in dicts}       # {"a": 1, "b": 2}

Скорость и профилирование

JIT-компилятор (Just-In-Time, компиляция «на лету») подрос: команда сообщает о приросте на 8–9% (среднее геометрическое) на x86-64 Linux и на 12–13% на AArch64 macOS. Отдельного внимания заслуживает новый пакет профилирования profiling (PEP 799). Он объединяет два инструмента: profiling.tracing — детерминированную трассировку вызовов (переехала из старого cProfile) и profiling.sampling — новый статистический сэмплинг-профайлер Tachyon с частотой опроса до 1 000 000 Гц. Он умеет мерить не только «настенное» время выполнения, но и время CPU, удержания GIL и обработки исключений, а результат выгружать во flamegraph, collapsed stacks, формат Gecko Profiler и «тепловые карты».

Дополняют картину указатели кадров (frame pointers), включённые по умолчанию (PEP 831): это делает профилирование системными инструментами и разбор нативных стеков надёжнее. А для свободнопоточной сборки (free-threading — вариант интерпретатора без глобальной блокировки GIL) появился стабильный ABI abi3t — расширениям на C стало проще собираться под неё, а на macOS такая поддержка теперь ставится по умолчанию.

Понятнее ошибки и больше цвета

Сообщения об ошибках продолжают умнеть. Теперь при опечатке в атрибуте Python подсказывает вложенный путь: 'Container' object has no attribute 'area'. Did you mean '.inner.area'?. Добавились и подсказки для тех, кто пришёл из других языков — интерпретатор узнаёт типичные имена методов из JavaScript, Java, Ruby и C#. Цветной вывод в терминале распространили на новые модули: argparse, calendar, difflib, http.server, sqlite3, timeit и другие, а в интерактивной оболочке появилось цветное автодополнение.

Что убрали и о чём помнить при обновлении

Как всегда в крупных выпусках, Python 3.15 вычищает давно устаревшее — удалены помеченные к удалению элементы из десятков модулей, среди которых ast, collections.abc, ctypes, datetime, pathlib, threading и typing. Старый модуль profile объявлен устаревшим (удаление в 3.17) в пользу нового пакета profiling. Также «тихо» устаревают строки-импорты в .pth-файлах: им на смену пришли безопасные конфигурационные файлы запуска .start (PEP 829). Всё это стоит учесть заранее — именно для проверки таких вещей release candidate и существует.

Почему это важно

Python 3.15 — не косметический выпуск. Ленивые импорты и UTF-8 по умолчанию бьют по двум вечным болям: медленному старту и путанице с кодировками. Новый профайлер Tachyon и указатели кадров подтягивают Python там, где он традиционно отставал, — в наблюдаемости и диагностике производительности. А стабильный ABI для free-threading — ещё один шаг к жизни без GIL, которую сообщество строит уже несколько релизов подряд. Выход rc1 означает, что публичный API заморожен: самое время прогнать свои проекты и зависимости на кандидате, чтобы к октябрьскому релизу подойти без сюрпризов.

Частые вопросы

Q.Когда выйдет финальная версия Python 3.15?

Первый релиз-кандидат (3.15.0rc1) вышел 4 августа 2026 года, второй (rc2) запланирован на 1 сентября, а финальный релиз 3.15.0 ожидается в начале октября 2026 года. С момента rc1 в ветку вносят только исправления явных ошибок, без новых функций.

Q.Что такое ленивые импорты в Python 3.15?

Это возможность отложить загрузку модуля до первого реального обращения к нему с помощью ключевого слова lazy (PEP 810). Модуль не грузится в момент строки import, что ускоряет запуск программ, особенно CLI-утилит и serverless-функций. Ленивость можно включить и глобально флагом -X lazy_imports или переменной PYTHON_LAZY_IMPORTS.

Q.Что изменилось с кодировкой по умолчанию?

По PEP 686 Python 3.15 использует UTF-8 как кодировку по умолчанию независимо от локали ОС. Это убирает расхождения между Linux и Windows при чтении файлов без явного encoding=. Вернуть прежнее поведение можно переменной PYTHONUTF8=0.

Q.Стоит ли уже переходить на 3.15?

В продакшене — пока нет: rc1 предназначен для тестирования. Но именно сейчас стоит прогнать свои проекты и зависимости на релиз-кандидате, чтобы найти проблемы с удалёнными API и изменившейся кодировкой до финального релиза в октябре.

Источники

Предыдущая
Qwen3.8-Max: Alibaba выпустила первую open-weight модель Max-класса на 2,4 трлн параметров
Следующая
WooCommerce 11.0: кеширование товаров ускоряет магазин, а гостевые заказы привязываются к аккаунту

Читайте также

Крупный план реального монитора на столе разработчика: на экране — детальная админка интернет-магазина с сеткой товаров и графиками аналитики, рядом клавиатура и второй экран с кодом в мягком боке. Фотореалистичный редакционный кадр, тёмная графитовая среда с тёплым светом; насыщенный синий — внутри свечения интерфейса.Cyber News
6 августа 2026 г.

WooCommerce 11.0: кеширование товаров ускоряет магазин, а гостевые заказы привязываются к аккаунту

WooCommerce 11.0 вышла 4 августа: 551 pull request, кеширование объектов товаров ускоряет карточки на 9–12%, гостевые заказы теперь привязываются к аккаунту по email, а Action Scheduler обновлён до 4.0. Разбираем, что это даёт владельцам магазинов и на что смотреть разработчикам.

Читать →
Крупный редакционный фотореалистичный кадр: монитор разработчика на тёмном графитовом столе, на экране терминал с кодом и дашборды с бенчмарками — синие столбчатые графики и подсветка синтаксиса; вокруг в мягком расфокусе механическая клавиатура, плата накопителя и кабели. Метафора мощной новой ИИ-модели, доступной через API.Cyber News
4 августа 2026 г.

Qwen3.8-Max: Alibaba выпустила первую open-weight модель Max-класса на 2,4 трлн параметров

Alibaba представила Qwen3.8-Max — MoE-модель на 2,4 трлн параметров с миллионным контекстом и обещанием открытых весов. Разбираем, где она обгоняет GPT-5.6 Sol и Claude Fable 5, а где отстаёт, и сколько стоит доступ.

Читать →
Крупный кинематографичный фотореалистичный кадр рабочего стола разработчика: широкий монитор с размытым кодом и яркой синей подсветкой синтаксиса, тёплый свет из окна, механическая клавиатура и кружка в мягком расфокусе — иллюстрация к выходу превью веб‑фреймворка SvelteKit 3.Cyber News
3 августа 2026 г.

SvelteKit 3 вышел в превью: shallow routing внутри goto, новые модули и список ломающих изменений

В конце июля вышли превью‑сборки SvelteKit 3, а 1 августа команда собрала все изменения в одном обзоре. Рассказываем, что меняется в маршрутизации, модулях и API — и к каким ломающим изменениям готовиться.

Читать →