Когда весь код живёт в одном монорепозитории и модули доступны отовсюду, количество импортов быстро превращается в тысячи.
Что начинает происходить со временем:
— скрипты стартуют по 30–40 секунд
— Jupyter-ноутбуки грузятся 10–15 минут
— распределённые jobs тратят больше времени на
import, чем на сами вычисления💡 Решение → Lazy imports
Модуль не загружается при import’е, а подменяется объектом
LazyImport.Настоящий импорт происходит только тогда, когда имя реально используется в коде:
from foo import bar
# globals() now contains {"bar": LazyImport("foo", "bar")}.
# the foo module has not yet been resolved or evaluated
qux = bar()
# in the evaluation of the above statement, bar is retrieved
# from the globals() dict, causing foo to be imported and bar
# to be reassigned to foo.bar
Что это даёт:
👌 мгновенный старт CLI-утилит
👌 быстрый запуск Jupyter даже с «тяжёлыми» внутренними библиотеками
👌 распределённые задачи не тратят время на лишние зависимости
→ Это не библиотека — это патч интерпретатора (форк CPython), но эффект огромный.
🔗 Полная статья (советуем сохранить)
🐸 Библиотека питониста
#буст
