В Python 3.15 импорт можно отложить до первого обращения

9 октября вышел стабильный Python 3.15.0. Среди нововведений есть явные отложенные импорты: модуль можно загрузить при первом использовании его имени. Это полезный повод посмотреть, что именно делает консольная утилита ещё до выполнения выбранной команды.

Где это может пригодиться

Учебный сценарий: у утилиты есть справка, проверка состояния и создание отчёта. Библиотека для отчётов нужна последней команде. Если она импортируется при каждом запуске, её загрузка может добавлять работу даже при открытии справки.

В Python 3.15 появился синтаксис lazy import. Например, строка lazy import report_engine объявляет отложенный импорт условного модуля report_engine. Загрузка произойдёт при первом обращении к этому имени. Обычные импорты по умолчанию сохраняют прежнее поведение.

Для такого синтаксиса есть ограничения: он разрешён на уровне модуля. Внутри функции, тела класса или блока try/except/finally запись с lazy вызовет SyntaxError. Звёздочный импорт также нельзя сделать отложенным.

Что меняется вместе со временем загрузки

Ошибка импорта может проявиться только при первом использовании имени. Поэтому успешный запуск справки ещё не подтверждает, что команда создания отчёта готова к работе.

Откладываются и действия, которые выполняются при импорте. Например, если модуль регистрирует плагин своим кодом инициализации, такая регистрация может ещё не произойти к моменту, когда приложение проверит список плагинов. Этот риск отдельно разобран в PEP 810.

Ускорение зависит от конкретного приложения. Если выбранной команде всё равно нужен этот модуль, работу по его загрузке придётся выполнить при обращении. Универсального выигрыша по времени для любой утилиты из этого не следует.

Как проверить пользу

Я бы начал с затрат на импорт и одного необязательного для короткой команды модуля. Затем сравнил бы запуск справки и первое выполнение функции, которая использует отложенный импорт. Отдельно проверил бы ошибку загрузки и ожидаемую инициализацию плагинов. Это план проверки, замеров своего проекта здесь нет.

Перед переходом на новый интерпретатор также стоит проверить совместимость зависимостей проекта. Наличие стабильного релиза само по себе её не подтверждает.

Источники: страница выпуска Python 3.15.0 от 9 октября 2026 года, справочник языка Python 3.15 и PEP 810.

#Python #Разработка #ИнструментыРазработчика

Какие зависимости в ваших утилитах загружаются при старте, хотя нужны только одной команде?

В Python 3.15 импорт можно отложить до первого обращения | Сетка — социальная сеть от hh.ru В Python 3.15 импорт можно отложить до первого обращения | Сетка — социальная сеть от hh.ru
В Python 3.15 импорт можно отложить до первого обращения | Сетка — социальная сеть от hh.ru В Python 3.15 импорт можно отложить до первого обращения | Сетка — социальная сеть от hh.ru В Python 3.15 импорт можно отложить до первого обращения | Сетка — социальная сеть от hh.ru