TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.3K subscribers
Post #7556 3.61K
🛠 PEP 810: эволюция импортов в Python

История внедрения lazy import — это не просто рассказ о новой фиче, а настоящий мастер-класс по тому, как сообщество Python умеет работать над ошибками и находить баланс между производительностью и стабильностью.

📉 Почему PEP 690 (первая попытка) провалился

В 2022 году Meta предложила радикальный подход: флаг -L, делающий все импорты ленивыми по умолчанию. Управляющий совет (Steering Council) наложил вето по веским причинам:

— Фрагментация: Это создало бы «два разных Python», где библиотеки вели бы себя по-разному.
— Скрытые сайд-эффекты: Огромное количество legacy-кода завязано на логике, которая выполняется строго в момент импорта.
— Сложность отладки: Ошибки инициализации могли «всплывать» в самых неожиданных местах рантайма.

🚀 Почему PEP 810 (текущий) — это победа

Дизайн был полностью переосмыслен. Вместо неявного глобального флага мы получили явный синтаксический сахар:

1. Явность (Opt-in): Вводится новое «мягкое» ключевое слово lazy. Вы сами помечаете тяжелые зависимости, которые не нужны при старте.

# Python 3.15+
lazy import torch
lazy from matplotlib import pyplot as plt




2. Прокси-объекты вместо магии диктов: В PEP 690 предлагалось менять внутреннее устройство dict. PEP 810 изящнее — он создает легкий прокси-объект. Реальный импорт триггерится только в момент первого обращения к атрибуту объекта.
3. Производительность: Результаты Meta (Cinder) и Hudson River Trading подтверждают: время старта CLI-инструментов сокращается до 70%, а потребление памяти — до 40%.

⚠️ Технические нюансы и ограничения

Как и у любого мощного инструмента, у lazy import есть свои «но»:

— Wildcard запрещены: Конструкция lazy from module import * вызовет SyntaxError, так как интерпретатору нужно знать список имен заранее.
— Deferred Errors: ModuleNotFoundError теперь вылетит не в начале скрипта, а в строке, где вы впервые вызвали torch.save(). Это нужно учитывать при написании долгоживущих сервисов.
— Thread Safety: Python сохраняет глобальную блокировку импорта (`import lock`), но теперь импорт может произойти в любом потоке, который первым коснулся «ленивой» переменной.

🔗 Ссылка на статью

📍 Навигация: Вакансии • Задачи • Собесы

🐸 Библиотека питониста

#буст
  • 👍 13
  • ❤ 2
  • 🤩 1
More from @pyproglib
  1. Sep 25, 2026🔥 Курс «ИИ для разработчиков» уже стартовал И мы решили открыть первое занятие всем — мож…
  2. Sep 20, 2026👻 94% токенов уходят не на код Анализ запусков показал: основная часть токенов уходит на…
  3. Sep 19, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  4. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  5. Sep 15, 2026⏱️ Справочник по Big-O в Python Для тех, кто хочет писать не просто работающий, а эффектив…
  6. Sep 14, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →