Чтобы не держать весь код в одном файле, Python использует модули и пакеты.
Модуль
Модуль — это просто один .py-файл, который можно импортировать.
# файл math_utils.py
def add(a, b):
return a + b
Использование в другом файле:
import math_utils
result = math_utils.add(2, 3)
Пакет
Пакет — это каталог с модулями (и, как правило, файлом __init__.py), который образует пространство имён и может содержать подпакеты.
myapp/
__init__.py
models.py
views.py
utils/
__init__.py
helpers.py
Импорт из пакета:
from myapp import models
from myapp.utils import helpers
Как работает import
Когда интерпретатор встречает import, он:
ищет модуль по имени в определённых местах (стандартная библиотека, установленные пакеты, текущий проект);
если модуль ещё не загружен, выполняет его код один раз и создаёт объект модуля;
сохраняет объект в sys.modules, чтобы при повторных import не загружать его заново;
присваивает модуль (или объекты из него) имени в текущем пространстве имён.
Разные формы импорта:
import math # math.sin
from math import sin # sin
import myapp.utils as u # u.helpers()
Как ответить на собеседовании
Модуль — это отдельный Python‑файл, пакет — каталог с модулями, который образует пространство имён. Оператор import находит модуль по имени, при необходимости загружает его и привязывает к имени в текущем файле, чтобы можно было использовать его функции и классы.