В октябре 2026 года Python 3.15 официально запущен — и это не просто обновление, а первый шаг к новому уровню производительности, удобству и безопасности в разработке. Его выпустил Python Software Foundation под руководством Хуго ван Кеменаде — менеджера релизов версий 3.14 и 3.15. Главное отличие от 3.14 — новые lazy imports, встроенный профилировщик Tachyon и полная поддержка asyncio, которые позволяют использовать возможности Python 3.11 без проблем. Это значит: можно официально отказаться от Python 3.10, и мой основной open-source проект — Datasette — теперь работает с 3.11 по 3.15.
Что вышло: три ключевых фичи Python 3.15
Lazy imports — экономия времени запуска
Python 3.15 впервые официально поддерживает lazy imports (ленивые импорты) через PEP 810. Теперь можно писать:
lazy import json
lazy from pathlib import PathМодуль json или pathlib загрузится только при первом использовании этих имён. Это критично для CLI-инструментов с плагинами — например, моего llm. Раньше, если плагин зависел от тяжёлых библиотек вроде sentence_transformers, запуск llm занимал до 2–3 секунд из-за импорта. Теперь — <100 мс. Lazy imports решают главную боль: медленный старт.
Unpacking в comprehensions — проще, быстрее, читабельнее
Добавлен синтаксис [*sublist for sublist in lists], который раскрывает списки прямо в списковых включениях. Например:
lists = [[1, 2], [3, 4], [5]]
[*L for L in lists] # [1, 2, 3, 4, 5]Это эквивалентно старому [x for L in lists for x in L], но короче и понятнее. Аналогично для множеств и словарей:
{*s for s in sets} # {1, 2, 3, 4}
{**d for d in dicts} # {'a': 3, 'b': 2}Фича реализована по PEP 798 (Adam Hartz и Erik Demaine) — развитие * из PEP 448 (2015). Удобно для обработки вложенных структур, особенно в ETL или парсинге JSON.
Tachyon — новый профилировщик в стандартной библиотеке
Python получил новый профилировщик — Tachyon (profiling.sampling), который работает по принципу сэмплирования: каждые 1–10 мс делает снимок стека вызовов. Это низкая нагрузка, подходит для продакшена, и не требует изменения кода.
Пример:
sudo uv run --python 3.15 python -m profiling.sampling attach 1234(на macOS — sudo, иначе ошибка доступа)
После Ctrl+C — отчёт: flame graphs, heat maps, даже интеграция с Firefox Profiler. Это прямая замена py-spy, но встроен в Python.
Цифры, лимиты и доступ
| Фича | Поддержка | Примечание |
|---|---|---|
| Lazy imports | Python 3.15+ | Только `lazy import X`, `lazy from ... import ...` |
| Tachyon | Python 3.15+ | `profiling.sampling`, `attach <PID>` |
| Unpacking in comprehensions | Python 3.15+ | `[*x for x in list]`, `{**d for d in dicts}` |
| JIT-ускорение | Experimental | +1.2x на тесте с Fibonacci (в 3.14 был слабый рост) |
| Поддержка Python | 3.11–3.15 | 3.10 не поддерживается, 3.16 — в разработке |
Кому это нужно на практике
1. Разработчикам CLI-инструментов и CLI-скриптов
Если у вас CLI (как datasette, llm, click-app), и вы не можете ждать 2 секунды при каждом запуске — обновитесь. Lazy imports снимают блокировку на старые версии Python. Особенно если плагины зависят от sentence_transformers, transformers, torch.
2. Тем, кто работает с большими данными
Unpacking в comprehensions упрощает парсинг JSON, CSV, вложенных списков. Вместо for item in data: for sub in item: — [*sub for sub in data]. Читать легче, писать быстрее.
3. Инженерам по производительности
Если вы следите за производительностью продакшен-сервисов — Tachyon не требует `py-spy`. Просто attach <PID> — и flame graph за 5 минут. Подходит для долгих процессов, где cProfile (новый profiling.tracing) слишком тяжеловесен.
4. Поддержке open-source проектов
Если вы держите совместимость со всеми поддерживаемыми версиями — вы можете отказаться от Python 3.10. Это не только легально, но и логично. 3.10 уже 5 лет не обновляется, а 3.11–3.15 — стабильны, быстрее, безопаснее.
Ограничения и чего в источнике нет
1. Lazy imports — не для всех
- Не работают с
import *иfrom ... import *. - Не работают в
__init__.py(модуль не импортируется). - Не работают с
sys.modules— всё равноimportвыполняется.
2. Tachyon — experimental, но уже работает
- Нет поддержки Windows (только Linux/macOS).
- Не работает с
asyncioиasync-функциями (пока). - Нет GUI, только текстовые отчёты и экспорт в Firefox.
3. Unpacking in comprehensions — не везде
- Не работает с
tuple-расширением (*(x, y)). - Не работает с
dict-расширением (**{"a": 1}) вdict-comprehension — только{**d}.
4. JIT — пока эксперимент
- В 3.15 — только на тесте с Fibonacci, +1.2x.
- Не работает на
async,numpy,pandas. - Не включён по умолчанию — нужно включать вручную.
Как обновить — пример с uv
Обновление Python до 3.15 через uv — просто и надёжно:
# 1. Обновить uv до последней версии
uv self update
# 2. Установить Python 3.15
uv python install 3.15
# 3. Установить 3.15 по умолчанию
uv python pin --global 3.15
# 4. Проверить
uv run python --version # Python 3.15.xДля уже установленных инструментов:
uv tool upgrade datasette --python 3.15
datasette --get /-/versions.json | jqЧто попробовать в следующий раз
- Tachyon — запустите на своём сервисе, сравните с
py-spy. - Lazy imports — добавьте в CLI с плагинами, посмотрите, как упал старт.
- Unpacking — замените
for x in lst for y in x:на[*y for y in lst]. - JIT — если работаете с числами и не используете
async— включите экспериментально.
FAQ
Как обновить Python до 3.15?
Через uv: uv python install 3.15 + uv python pin --global 3.15. Готово за 5 минут.
Lazy imports — зачем они?
Чтобы не импортировать тяжёлые модули, пока они не нужны. Снижают старт CLI на 90%.
Tachyon — это бесплатно?
Да, встроен в Python, работает без внешних зависимостей.
Можно ли использовать 3.10 после 3.15?
Нет. 3.10 больше не поддерживается — не обновляется, нет исправлений.
Unpacking в comprehensions — безопасен?
Да. Это синтаксический сахар, не меняет поведение кода.
JIT в 3.15 — работает?
Только на Fibonacci (+1.2x), не на async, не на `numpy` — пока эксперимент.


