Python 3.15+Модули и импортконструкция
lazy import
импорт
Ленивый импорт: lazy import x и lazy from m import y откладывают загрузку модуля до первого обращения к имени. Ускоряет запуск программы.
Синтаксис
lazy import module
lazy from module import name
lazy — мягкое ключевое слово: вне строки импорта это обычное имя. Вместо модуля имя сразу получает лёгкий заместитель, а настоящая загрузка происходит при первом обращении — поэтому импорты можно держать вверху файла и не платить за неиспользованные. Цена — ошибки переезжают: опечатка в имени модуля даёт ModuleNotFoundError не на строке импорта, а там, где имя впервые использовано (трассировка показывает обе строки), а цикл импортов — ImportCycleError. lazy разрешён только на уровне модуля: внутри функции, класса или try/except это SyntaxError; lazy from m import * и lazy from __future__ тоже запрещены. Для кода, который должен работать и на старых версиях, есть __lazy_modules__ = ['json'] — тогда обычный import json становится ленивым.
Примеры
import sys
lazy import json
print('json' in sys.modules) # → False — модуль ещё не загружен
print(json.dumps([1, 2])) # → [1, 2]
print('json' in sys.modules) # → True — загрузка случилась при обращении
lazy import no_such_module_here # ошибки нет: модуль ещё не ищется
print('импорт объявлен') # → импорт объявлен
try:
no_such_module_here.x
except ModuleNotFoundError as e:
print(type(e).__name__) # → ModuleNotFoundError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности