Python Glossary English

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Сообщить о неточности