В октябре 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. Теперь можно писать:

python
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], который раскрывает списки прямо в списковых включениях. Например:

python
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], но короче и понятнее. Аналогично для множеств и словарей:

python
{*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 мс делает снимок стека вызовов. Это низкая нагрузка, подходит для продакшена, и не требует изменения кода.

Пример:

bash
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 importsPython 3.15+Только `lazy import X`, `lazy from ... import ...`
TachyonPython 3.15+`profiling.sampling`, `attach <PID>`
Unpacking in comprehensionsPython 3.15+`[*x for x in list]`, `{**d for d in dicts}`
JIT-ускорениеExperimental+1.2x на тесте с Fibonacci (в 3.14 был слабый рост)
Поддержка Python3.11–3.153.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 — просто и надёжно:

bash
# 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

Для уже установленных инструментов:

bash
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` — пока эксперимент.

Источники