Вышел Python 3.15: ленивые импорты, frozendict, UTF-8 по умолчанию и ускоренный JIT

Python 3.15.0 стал стабильным 9 октября 2026 года. Главное в релизе — ключевое слово lazy для отложенной загрузки модулей, встроенные типы frozendict и sentinel, UTF-8 как кодировка по умолчанию на всех платформах и JIT-компилятор, который наконец даёт заметный прирост. Перед переходом стоит проверить работу с файлами на Windows и профилирование.
Выпуск планировали на 1 октября, но за несколько дней до даты в ленивых импортах нашлись ошибки, и команде пришлось выпустить третий релиз-кандидат. В итоговую версию вошли 5 643 коммита от 1 012 участников. Для команд, у которых на Python держится backend-разработка и сервисы данных, это первый за несколько лет релиз, который меняет поведение по умолчанию, а не только добавляет возможности.
Ниже — что изменилось, что может сломаться и в каком порядке обновляться. Если вы выбираете стек для нового проекта, пригодится наш обзор, в котором собраны лучшие фреймворки для веб-разработки на Python.
Что нового в Python 3.15
- Явные ленивые импорты (PEP 810). Строка
lazy import jsonне загружает модуль, пока к имени не обратятся. По замеру, который приводит heise, скрипт с 13 модулями стандартной библиотеки на Apple M4 стартовал за 11 мс вместо 44 мс. Включить поведение для всего процесса можно переменнойPYTHON_LAZY_IMPORTS=all. frozendict(PEP 814). Неизменяемый словарь: записи нельзя добавить, удалить или заменить. Если значения хешируемые, такой словарь можно использовать как ключ.sentinel(PEP 661). Встроенный тип для именованных маркеров. Помогает отличить «аргумент не передан» от явногоNone.- UTF-8 по умолчанию (PEP 686). Текстовые операции больше не зависят от локали системы.
- Распаковка в генераторах списков, множеств и словарей (PEP 798) через
*и**. - Пакет
profiling(PEP 799) со статистическим профилировщиком Tachyon.cProfileобъявлен устаревшим, удалить его планируют в 3.17. - Типизация:
TypedDictс типизированными дополнительными ключами (PEP 728),TypeForm(PEP 747), непересекающиеся базовые классы (PEP 800). - Сборка: указатели фреймов включены по умолчанию (PEP 831), это упрощает профилирование в продакшене.
Насколько быстрее стал JIT
Экспериментальный JIT-компилятор впервые даёт выигрыш, который видно на общих бенчмарках. По данным Python Software Foundation, в среднем (по геометрическому среднему) он на 7–8% быстрее стандартного интерпретатора на x86-64 Linux и на 11–12% быстрее интерпретатора с хвостовыми вызовами на AArch64 macOS. JIT по-прежнему экспериментальный, поэтому включать его в продакшене стоит только после нагрузочного теста на вашем коде.
Ещё одна деталь: официальные установщики для macOS теперь по умолчанию ставят и сборку без GIL (free-threading). Сборки для 64-битной Windows используют интерпретатор с хвостовыми вызовами.
Что может сломаться при переходе
- Чтение и запись файлов без явной кодировки. Сильнее всего смена затронет Windows, где раньше бралась кодировка локали. Найти такие места поможет флаг
-X warn_default_encoding. Временно вернуть старое поведение можно черезPYTHONUTF8=0или-X utf8=0. - Код, который полагается на побочные эффекты импорта. Если модуль при импорте регистрирует плагины или меняет глобальное состояние, отложенная загрузка изменит порядок событий. Глобальный режим
PYTHON_LAZY_IMPORTS=allвключайте только после тестов. - Скрипты и CI на
cProfile. Пока он работает, но его стоит заменить на новый пакетprofilingдо выхода 3.17. - GUI на Tkinter под macOS 27. В примечаниях к релизу сказано, что из-за изменений в ОС программы на Tkinter и IDLE могут зависать, если открыть диалог из меню.
Как обновляться
- Добавьте 3.15 в матрицу CI и прогоните тесты с флагом
-X warn_default_encoding. - Проверьте, что ключевые зависимости с C-расширениями собраны под 3.15. В релиз вошли изменения C API (PEP 782, 788, 793, 803, 820), поэтому старые колёса могут не подойти.
- Переводите на
lazy importсначала тяжёлые импорты в CLI-утилитах и serverless-функциях. Там важнее всего время холодного старта. - JIT и сборку без GIL проверяйте на отдельном стенде с нагрузочным тестом, а не на всём продакшене сразу.
Сроки поддержки: исправления ошибок будут выходить примерно раз в месяц в течение двух лет, патчи безопасности — до октября 2031 года.
Часто задаваемые вопросы
Нужно ли переписывать код под Python 3.15? В большинстве случаев нет. Новые возможности включаются явно. Главный риск — код, который полагался на кодировку локали при работе с файлами.
Ленивые импорты включены по умолчанию? Нет. Нужно либо писать lazy import, либо включить глобальный режим переменной окружения.
Стоит ли включать JIT в продакшене? JIT остаётся экспериментальным. Прирост в 7–12% — это среднее по бенчмаркам, на вашем коде он может отличаться.
Сколько будет поддерживаться 3.15? Исправления ошибок — около двух лет, обновления безопасности — до октября 2031 года.
Источники
- Python.org — Python Release Python 3.15.0, 9 октября 2026 (первоисточник).
- Python Insider — Python 3.15.0 (final) is here!
- heise online — Python 3.15 released: Lazy imports, UTF-8 and new data types.
- Phoronix — Python 3.15 Released With Experimental JIT Compiler Running Faster.
- Документация Python — What’s new in Python 3.15.
Переведём ваш backend на Python 3.15
Найдём места, которые сломает UTF-8 по умолчанию, обновим зависимости с C-расширениями, подключим ленивые импорты там, где важен холодный старт, и проверим JIT под нагрузкой до выката в продакшен.