Развернутое объяснение
Когда интерпретатор встречает строку вида:
import mathон делает несколько шагов:
Проверяет кеш загруженных модулей
sys.modules: если модуль уже импортирован ранее, повторно он не загружается, используется уже существующий объект модуля.Ищет модуль по имени в путях из
sys.meta_path / sys.path: стандартная библиотека, установленные пакеты, текущий проект и т.д.Создаёт объект модуля и выполняет его код один раз при первом импорте.
Привязывает модуль к имени в текущем пространстве имён: после
import mathимя math становится доступно, и можно писатьmath.sqrt(4).
Комбинации импорта:
import module # module.name
import module as m # m.name
from module import name # name напрямую
from pkg import submod # импорт из пакетаНа собеседовании важно показать, что вы понимаете: импорт — это не «подтянуть текст файла», а именно однократное выполнение модуля и дальнейшее использование его объектов.
Что такое модуль?
Модуль — это отдельный файл с расширением .py, содержащий функции, классы, константы и т.д. Примеры: math.py, utils.py, models.py — ваши файлы, которые можно импортировать; стандартные модули вроде os, sys, json и т.п.
Каждый модуль — это отдельное пространство имён: всё, что объявлено внутри файла, живёт под его именем при импорте (utils.parse(), models.User). Код модуля выполняется один раз при первом импорте, дальше используется из кеша sys.modules.
Что такое пакет?
Пакет — это каталог (папка с файлами), который Python может импортировать как модуль и в котором лежат другие модули и подпакеты.
Классическая структура:
myapp/ # пакет
__init__.py
models.py # модуль
utils.py # модуль
api/ # вложенный пакет
__init__.py
v1.pyИмпорт верхнего уровня:
import myapp
from myapp import models
from myapp.api import v1Пакет является пространством имён для своих подмодулей: myapp.models.User, myapp.api.v1.router. Для backend‑разработки пакеты — основа структурирования проекта: вы группируете код по доменным областям (users, billing, auth), а модули внутри содержат конкретные реализации.
Как грамотно сформулировать на собеседовании?
Оператор import находит модуль по имени, один раз загружает и выполняет его код, а затем привязывает объект модуля к имени в текущем пространстве имён. Модуль — это отдельный .py‑файл с кодом, который можно импортировать. Пакет — это каталог, который играет роль пространства имён и содержит модули и подпакеты, обычно с файлом __init__.py.
В курсах TeoBrain мы уделяем этому отдельный блок: учим собирать backend‑проект из модулей и пакетов, работать с абсолютными и относительными импортами и избегать типичных проблем с путями, чтобы на собеседовании вы могли уверенно объяснять и демонстрировать структуру кода.