"Как работает import? Что такое модуль и пакет?"

Краткий ответ (для собеседования): import — это механизм, который находит модуль по его имени, загружает его (если он ещё не загружен) и привязывает к имени в текущем модуле, чтобы можно было использовать его объекты в коде текущего модуля. Модуль — это один Python‑файл (.py), который можно импортировать; пакет — это каталог с модулями (и, как правило, файлом __init__.py), который служит пространством имён и может содержать подпакеты.

Подробный ответ

Развернутое объяснение

Когда интерпретатор встречает строку вида:

import math

он делает несколько шагов: 

  1. Проверяет кеш загруженных модулей sys.modules: если модуль уже импортирован ранее, повторно он не загружается, используется уже существующий объект модуля. 

  2. Ищет модуль по имени в путях из sys.meta_path / sys.path: стандартная библиотека, установленные пакеты, текущий проект и т.д. 

  3. Создаёт объект модуля и выполняет его код один раз при первом импорте.

  4. Привязывает модуль к имени в текущем пространстве имён: после 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‑проект из модулей и пакетов, работать с абсолютными и относительными импортами и избегать типичных проблем с путями, чтобы на собеседовании вы могли уверенно объяснять и демонстрировать структуру кода.

Читать полную статью в блоге