Обзор Python 3.15: UTF-8 по умолчанию, ленивые импорты и JIT

9 октября 2026 года вышел Python 3.15.0. Это ежегодный мажорный релиз: поддержка исправлениями ошибок — около двух лет, исправлениями безопасности — до октября 2031 года. Главные изменения — UTF-8 как кодировка по умолчанию, явные ленивые импорты, встроенные `frozendict` и `sentinel`, новый профилировщик и ускоренный JIT. За неделю до этого, 1 октября, закончилась поддержка Python 3.10. Обзор для тех, у кого на Python работают боты, парсеры, интеграции с 1С и CRM, бэкенды и скрипты автоматизации.
Главные изменения
UTF-8 по умолчанию (PEP 686). Файлы и консоль теперь открываются в UTF-8 независимо от системной локали. Для русскоязычных проектов это хорошая новость: меньше «кракозябр» при запуске скриптов на Windows. Но код, который рассчитывал на системную кодировку (например, cp1251 при чтении выгрузок из старых программ), может начать читать файлы неверно. Вернуть прежнее поведение можно параметром `encoding="locale"` или флагом `-X utf8=0`.
Ленивые импорты (PEP 810). Новое ключевое слово `lazy` откладывает загрузку модуля до первого использования. Это ускоряет запуск скриптов и CLI-утилит, которые импортируют много тяжёлых библиотек, а используют пару из них.
frozendict и sentinel. Неизменяемый словарь стал встроенным типом (PEP 814), а для «пустых» значений-маркеров появился встроенный `sentinel` (PEP 661).
Распаковка в генераторах (PEP 798). В списковых, словарных и других включениях можно использовать `*` и `**`.
Профилировщик Tachyon (PEP 799). Новый пакет `profiling` с семплирующим профилировщиком: низкие накладные расходы и поддержка асинхронного кода. Удобно искать, почему тормозит бот или выгрузка.
JIT. Экспериментальный JIT-компилятор заметно улучшен: по данным python.org, примерно на 7–8% быстрее стандартного интерпретатора на Linux x86-64 и на 11–12% на macOS AArch64. OpenNET отмечает, что выигрыш сильно зависит от задачи.
| Что | Python 3.14 | Python 3.15 |
|---|---|---|
| Кодировка по умолчанию | Системная локаль | UTF-8 |
| Отложенный импорт | Обходные приёмы | Ключевое слово lazy |
| Неизменяемый словарь | Сторонние пакеты | Встроенный frozendict |
| Профилирование | cProfile | Пакет profiling с Tachyon |
| Указатели кадров | По умолчанию выключены | Включены (PEP 831) |
| Безопасность до | Октября 2030 | Октября 2031 |

Для разработчиков библиотек и инфраструктуры
- Стабильный ABI для сборок без GIL (PEP 803, 820, 793): расширения на C проще собирать для «свободной многопоточности».
- Официальные установщики для macOS теперь ставят поддержку free-threading по умолчанию.
- Официальные сборки для Windows x64 используют интерпретатор с хвостовыми вызовами.
- Новые возможности типизации: дополнительные ключи в TypedDict (PEP 728), TypeForm (PEP 747), непересекающиеся базовые классы (PEP 800).
- Механизм стартовых файлов `.start` (PEP 829) как альтернатива `.pth`.
Известная проблема: на macOS 27.0 IDLE и другие приложения на tkinter могут зависать при открытии диалогов. Python.org советует отложить обновление macOS, если вы от них зависите.
Как обновить Python на сервере без сюрпризов
Python на сервере редко живёт один: от него зависят системные утилиты, cron-задачи и виртуальные окружения проектов. Поэтому системный Python дистрибутива лучше не трогать, а ставить новую версию рядом.
- Установите нужную версию отдельно (из пакетов дистрибутива, через pyenv или uv) и создайте новое виртуальное окружение для проекта.
- Переустановите зависимости по `requirements.txt` или `pyproject.toml` и запустите тесты.
- Проверьте задачи по расписанию: cron часто вызывает конкретный путь к интерпретатору, а не окружение проекта.
- Если проект в Docker — смените базовый образ и пересоберите контейнер, это самый простой путь.
- Оставьте старое окружение на неделю для быстрого отката.
Для ботов и интеграций, которые работают круглосуточно, переключение лучше делать в часы минимальной нагрузки и с мониторингом ошибок в первые сутки.
Кого касается
- серверов на Python 3.10 — с 1 октября 2026 года они без исправлений безопасности;
- скриптов, которые читают файлы без явной кодировки, особенно выгрузки из 1С и старых учётных систем;
- проектов с тяжёлыми импортами, где важна скорость запуска;
- команд, которые собирают расширения на C.
Стоит ли обновляться
- Python 3.10 и старше. Обновляться нужно в любом случае: поддержка 3.10 закончилась. Разумная цель — 3.13 или 3.14, они проверены временем и получают исправления.
- Python 3.12–3.14. Спешить не нужно. Переходите на 3.15 после выхода первых исправлений (3.15.1 уже вышел) и когда ваши ключевые библиотеки объявят поддержку.
- Новые проекты. Можно начинать на 3.15, если все зависимости уже собраны под него.
- Перед переходом найдите все `open()` без параметра `encoding` и укажите кодировку явно — это самый частый источник ошибок в новой версии.
Наше мнение
Мы считаем переход на UTF-8 по умолчанию самым полезным изменением релиза для российских проектов: многолетний источник ошибок с кодировками уходит. Но именно он может сломать старые скрипты обмена с учётными системами, которые молча полагались на cp1251. Что мы советуем клиентам: сначала закрыть Python 3.10, затем — явно прописать кодировки во всех местах чтения и записи файлов, и уже потом планировать 3.15.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
Вопросы и ответы
Когда вышел Python 3.15?
Python 3.15.0 вышел 9 октября 2026 года. Исправления безопасности для него планируются до октября 2031 года.
Что сломается из-за UTF-8 по умолчанию?
Код, который читает или пишет файлы без явной кодировки и рассчитывает на системную локаль, например cp1251 на Windows. Укажите encoding явно или используйте encoding="locale".
Что такое ленивые импорты?
Ключевое слово lazy откладывает загрузку модуля до первого обращения к нему. Это ускоряет запуск программ с множеством импортов.
Насколько Python 3.15 быстрее?
По данным python.org, экспериментальный JIT даёт около 7–8% на Linux x86-64 и 11–12% на macOS AArch64. Реальный выигрыш зависит от задачи.
Поддерживается ли ещё Python 3.10?
Нет. Поддержка Python 3.10 закончилась 1 октября 2026 года, исправления безопасности для него больше не выходят.
Стоит ли сразу переводить проект на 3.15?
Рабочие проекты на 3.12–3.14 лучше переводить после первых исправлений и когда основные библиотеки подтвердят поддержку. Проекты на 3.10 нужно обновлять сейчас.