Грэм Дамплтон: Ленивый импорт ... Заметка
RSS Планета Python

Грэм Дамплтон: Ленивый импорт с использованием wrapt

PEP 810 вводит явный синтаксис для ленивых импортов модулей в Python. Ранее пакеты предлагали аналогичную функциональность, но не имели специальной поддержки языка. Новая функция ленивого прокси-объекта библиотеки wrapt позволяет легко реализовать ленивые импорты. Основное назначение wrapt — monkey patching, который включает в себя прозрачные прокси-объекты. Эти прокси перехватывают доступ к целевым объектам, позволяя выполнять определенные действия. Ленивый прокси-объект принимает функцию, которая создает целевой объект при первом доступе, а не сам объект. Это позволяет осуществлять ленивый импорт модулей, как показано в примере с использованием wrapt.LazyObjectProxy и __import__. В отличие от некоторых методов, которые заранее изменяют sys.modules с помощью поддельного модуля, этот подход избегает глобальных изменений. Влияние примера wrapt ограничено областью видимости, где был сделан ленивый импорт, что соответствует цели PEP 810 по локализации эффектов. Однако это требует другого синтаксиса, чем стандартные операторы импорта. PEP 810 направлен на то, чтобы избежать поддельных объектов модулей в области видимости, гарантируя, что ссылка станет фактическим модулем при первом использовании. Пример wrapt сохраняет прокси-объект, с возможными будущими улучшениями для замены его фактическим модулем.