Как только имя модуля известно (если не указано иное, термин «модуль» будет относиться как к пакетам, так и к модулям), можно начинать поиск модуля или пакета. Первое проверенное место - sys.modules
, кэш всех модулей, которые были импортированы ранее . Если модуль найден там, он используется на шаге (2) импорта.
Если модуль не найден в кеше, , тогда sys.meta_path
ищется (спецификацию sys.meta_path
можно найти в PEP 302). Объект представляет собой список объектов поиска, которые запрашиваются, чтобы узнать, знают ли они, как загрузить модуль, вызвав их метод find_module()
с именем модуля. Если модуль находится внутри пакета (что обозначается наличием точки в имени), то второй аргумент для find_module () задается как значение атрибута path от родительского элемента пакет (все до последней точки в имени импортируемого модуля). Если искатель может найти модуль, он возвращает загрузчик (обсуждается позже) или возвращает None.
Если ни один из искателей на sys.meta_path
не может найти модуль, то запрашиваются некоторые неявно определенные искатели. Реализации Python варьируются в зависимости от того, какие неявные мета пути найдены. Однако все они определяют, что обрабатывает sys.path_hooks
, sys.path_importer_cache
и sys.path
.