Ответ вслух Middle Модули, пакеты и окружения обновлено

Что происходит при import в Python

Вопрос

Расскажите по шагам, что происходит при import package.module.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Сначала Python смотрит в sys.modules: если модуль уже загружен, он сразу возвращается. Для package.module сначала импортируется сам package: находится его каталог, выполняется init.py, пакет попадает в sys.modules.

Что должно прозвучать в ответе

  • Проверка `sys.modules`

  • Поиск через finders по `sys.path`: каталог скрипта, PYTHONPATH, stdlib, site-packages

  • Сначала импортируется пакет, выполняется его `__init__.py`

  • Создание объекта модуля, регистрация в `sys.modules`, выполнение кода

  • Привязка имени в текущем пространстве имён

  • Кеш байткода в `__pycache__`

Что могут спросить следом

  • Почему возникают циклические импорты и как их чинить?
  • Как перезагрузить модуль без перезапуска?

Разбор

Образцовый ответ: «Сначала Python смотрит в sys.modules: если модуль уже загружен, он сразу возвращается. Для package.module сначала импортируется сам package: находится его каталог, выполняется __init__.py, пакет попадает в sys.modules. Затем ищется module: искатели из sys.meta_path проходят встроенные модули и пути, для подмодуля это package.__path__, а для верхнего уровня sys.path, где первым идёт каталог запускаемого скрипта, потом PYTHONPATH, стандартная библиотека и site-packages. Найдя файл, Python создаёт объект модуля, сначала регистрирует его в sys.modules, а потом выполняет код; поэтому циклический импорт не уходит в бесконечность, но может увидеть недоделанный модуль. Байткод кешируется в __pycache__, чтобы не компилировать заново. В конце имя package привязывается в текущем пространстве имён. Для перезагрузки есть importlib.reload, но старые ссылки на объекты модуля он не обновит, поэтому в проде так не делают».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме