Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
РелизAPI / Продукт · В работуSimon Willison→ оригинал

Python 3.15 вышел: ленивые импорты, профайлер Tachyon и JIT на 1,2x быстрее

Вышел Python 3.15. Главное в релизе: явные ленивые импорты (PEP 810), распаковка в comprehensions (PEP 798) и встроенный sampling-профайлер Tachyon в модуле profiling.sampling. По скорости версия почти не отличается от 3.14, но экспериментальный JIT дал 1,2x на тесте с числами Фибоначчи (замер Мигеля Гринберга на 3.15.0rc3). С выходом 3.15 Python 3.10 официально снят с поддержки. Для авторов библиотек это значит, что минимальной версией можно делать 3.11.

AI-обработка оригинала Simon Willison; редакция Hamidun News
Python 3.15 вышел: ленивые импорты, профайлер Tachyon и JIT на 1,2x быстрее
Источник: Simon Willison. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникSimon Willison ↗
Главный редактор
Ключевой факт #1Ленивые импорты сокращают время старта CLI-утилит.
Ключевой факт #2Tachyon заменяет внешние профайлеры вроде py-spy.
Ключевой факт #3Python 3.10 больше не поддерживается.

Python 3.15 вышел в релиз. Для большинства разработчиков главное в нём — три вещи: явные ленивые импорты, профайлер Tachyon в стандартной библиотеке и новый синтаксис распаковки в списковых включениях. Скорость интерпретатора почти не изменилась по сравнению с 3.14, зато экспериментальный JIT впервые показал заметный прирост — 1,2x. Попутно Python 3.10 (2021 год) официально лишился поддержки. Для мейнтейнеров библиотек это важнее любого нового синтаксиса: нижняя планка совместимости сдвигается на 3.11. Обзор изменений для «What's new» в этом году подготовил релиз-менеджер версий 3.14 и 3.15 Хьюго ван Кемена́де.

Ленивые импорты, распаковка и Tachyon

Самое практичное нововведение — PEP 810. Модуль теперь можно объявить так: lazy import json или lazy from pathlib import Path. Реальный импорт произойдёт при первом обращении к символу. Разработчик Simon Willison, автор CLI-утилиты LLM с системой плагинов, давно упирался в эту проблему. Плагины с тяжёлыми зависимостями вроде sentence_transformers добавляли к каждому вызову команды llm несколько секунд. В документации для авторов плагинов ему приходилось советовать ручные ленивые импорты. Теперь это решается языком.

Второе изменение — PEP 798 (авторы Adam Hartz и Erik Demaine). Он добавляет распаковку внутрь comprehensions: [L for L in lists] разворачивает список списков в плоский, {s for s in sets} объединяет множества, {**d for d in dicts} сливает словари. Это продолжение PEP 448, который появился ещё в Python 3.5 в 2015 году.

Третье — профайлеры. Привычный трассирующий cProfile переименован в profiling.tracing. Рядом появился семплирующий profiling.sampling, он же Tachyon. Он периодически снимает стеки работающего процесса и считает, где тратится время. Накладные расходы низкие, а инструментировать код заранее не нужно. До сих пор для этого ставили внешние инструменты вроде py-spy. Теперь функция встроена в стандартную библиотеку.

На примере из обзора профайлер за 2,65 секунды собрал 2 651 сэмпл при частоте около 1000 в секунду. Нагляднее всего видно, что процесс почти всё время простаивал в ожидании цикла событий asyncio. Результат можно вывести в виде flame graph и heat map, а также в формате для интерфейса Firefox Profiler. На macOS для подключения к процессу по PID понадобился sudo.

Скорость: JIT наконец заметен

На ускорение «бесплатно» рассчитывать не стоит. Мигель Гринберг сравнил 3.15.0rc3 с 3.14 и нашёл, что производительность в основном осталась прежней. Исключение — экспериментальный JIT.

  • JIT против стандартного интерпретатора 3.15: 1,2x на тесте Фибоначчи.
  • Это первый случай, когда Гринберг увидел осмысленный прирост от JIT.
  • Для сравнения: в прошлом году 3.14 заметно обошёл 3.13 по значительно большему числу категорий.
  • Профайлер Tachyon: частота около 1000 сэмплов в секунду, без предварительной инструментации.

Как обновиться и что даёт отказ от 3.10

Если вы работаете с uv, переход занимает несколько команд. Сначала нужно обновить сам инструмент, чтобы он знал о новом релизе: uv self update. Затем ставим интерпретатор: uv python install 3.15. Чтобы сделать его версией по умолчанию для любых uv run, где проект не закрепил другую, выполняем uv python pin --global 3.15. Проверка: uv run python --version. Уже установленные утилиты переустанавливаются с нужной версией, например uv tool upgrade datasette --python 3.15.

Для мейнтейнеров интереснее обратная сторона. Политика Willison — поддерживать все живые версии Python. Раз 3.10 больше не поддерживается, можно опираться на возможности 3.11:

  • tomllib в стандартной библиотеке;
  • asyncio.TaskGroup и asyncio.timeout();
  • datetime.UTC как алиас для datetime.timezone.utc;
  • в sqlite3 — setlimit()/getlimit(), create_window_function(), blobopen() для частичного чтения больших BLOB и set_authorizer(None) для снятия авторизатора;
  • заметно расширенную систему типов.

В Datasette первый PR (№2998) уже убирает обходной путь для set_authorizer(None). Шаблоны cookiecutter для click-app, datasette-plugin, python-lib и llm-plugin теперь тестируются на версиях с 3.11 по 3.15. Практический вывод для вашего проекта такой: проверьте матрицу CI, уберите 3.10 и добавьте 3.15. Ленивые импорты стоит сначала опробовать в CLI-инструментах с тяжёлыми зависимостями. Там выигрыш во времени старта виден сразу.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: ленивые импорты, распаковка и Tachyon?

Самое практичное нововведение — PEP 810. Модуль теперь можно объявить так: lazy import json или lazy from pathlib import Path. Реальный импорт произойдёт при первом обращении к символу. Разработчик Simon Willison, автор CLI-утилиты LLM с системой плагинов, давно упирался в эту проблему. Плагины с тяжёлыми зависимостями вроде sentence_transformers добавляли к каждому вызову команды llm несколько секунд. В документации для авторов плагинов ему приходилось советовать ручные ленивые импорты.

Что известно по теме: скорость: JIT наконец заметен?

На ускорение «бесплатно» рассчитывать не стоит. Мигель Гринберг сравнил 3.15.0rc3 с 3.14 и нашёл, что производительность в основном осталась прежней. Исключение — экспериментальный JIT. JIT против стандартного интерпретатора 3.15: 1,2x на тесте Фибоначчи. Это первый случай, когда Гринберг увидел осмысленный прирост от JIT. Для сравнения: в прошлом году 3.14 заметно обошёл 3.13 по значительно большему числу категорий. Профайлер Tachyon: частота около 1000 сэмплов в секунду, без предварительной инструментации.

Что известно по теме: как обновиться и что даёт отказ от 3.10?

Если вы работаете с uv, переход занимает несколько команд. Сначала нужно обновить сам инструмент, чтобы он знал о новом релизе: uv self update. Затем ставим интерпретатор: uv python install 3.15. Чтобы сделать его версией по умолчанию для любых uv run, где проект не закрепил другую, выполняем uv python pin --global 3.15. Проверка: uv run python --version. Уже установленные утилиты переустанавливаются с нужной версией, например uv tool upgrade datasette --python 3.15. Для мейнтейнеров интереснее обратная сторона.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…