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 заморожен: самое время прогнать свои проекты и зависимости на кандидате, чтобы к октябрьскому релизу подойти без сюрпризов.
Частые вопросы
Первый релиз-кандидат (3.15.0rc1) вышел 4 августа 2026 года, второй (rc2) запланирован на 1 сентября, а финальный релиз 3.15.0 ожидается в начале октября 2026 года. С момента rc1 в ветку вносят только исправления явных ошибок, без новых функций.
Это возможность отложить загрузку модуля до первого реального обращения к нему с помощью ключевого слова lazy (PEP 810). Модуль не грузится в момент строки import, что ускоряет запуск программ, особенно CLI-утилит и serverless-функций. Ленивость можно включить и глобально флагом -X lazy_imports или переменной PYTHON_LAZY_IMPORTS.
По PEP 686 Python 3.15 использует UTF-8 как кодировку по умолчанию независимо от локали ОС. Это убирает расхождения между Linux и Windows при чтении файлов без явного encoding=. Вернуть прежнее поведение можно переменной PYTHONUTF8=0.
В продакшене — пока нет: rc1 предназначен для тестирования. Но именно сейчас стоит прогнать свои проекты и зависимости на релиз-кандидате, чтобы найти проблемы с удалёнными API и изменившейся кодировкой до финального релиза в октябре.
Источники
- 1.Python.org — Python 3.15.0rc1 releasehttps://www.python.org/downloads/release/python-3150rc1/
- 2.discuss.python.org — Python 3.15.0 release candidate 1 is here!https://discuss.python.org/t/python-3-15-0-release-candidate-1-is-here/108395
- 3.Python docs — What's new in Python 3.15https://docs.python.org/3.15/whatsnew/3.15.html



