Ответ
Модуль — это одиночный файл с расширением .py, содержащий исполняемый код Python (функции, классы, переменные).
Пакет — это директория, которая содержит один или несколько модулей (или вложенных пакетов) и специальный файл __init__.py.
Простая аналогия: модуль — это файл, пакет — это папка с файлами.
Пример структуры:
my_project/
├── main.py
├── utils.py # <-- Это модуль
└── my_package/ # <-- Это пакет
├── __init__.py # <-- Инициализирует пакет (может быть пустым)
├── core.py # <-- Модуль внутри пакета
└── helpers/ # <-- Вложенный пакет
├── __init__.py
└── validator.py
Ключевые отличия:
- Организация: Пакет позволяет структурировать код в иерархии, модуль — это плоская единица.
- Файл
__init__.py: Его наличие (даже пустого) делает директорию пакетом, который Python может импортировать. В Python 3.3+ для пространства имён (namespace package) он может не требоваться, но для обычных пакетов — это стандарт. -
Импорт:
# Импорт модуля import utils from utils import some_function # Импорт из пакета import my_package.core from my_package.helpers import validator - Относительный импорт: Внутри пакета можно использовать относительные импорты (например,
from .core import something), что невозможно в одиночном модуле.