В чем различие между модулем и пакетом в Python?

Ответ

В Python модуль — это отдельный файл с расширением .py, который содержит исполняемый код: функции, классы, переменные и другие инструкции. Модули позволяют логически группировать связанный код и повторно использовать его в разных частях программы.

Пример модуля:

# my_module.py
def greet(name):
    return f"Hello, {name}!"

class MyClass:
    pass

Пакет — это директория (каталог) в файловой системе, которая содержит один или несколько модулей, а также специальный файл __init__.py. Наличие __init__.py (даже пустого) указывает Python, что данная директория должна рассматриваться как пакет. Пакеты используются для организации модулей в иерархическую структуру, что особенно полезно для крупных проектов, помогая избежать конфликтов имен и улучшая читаемость кода.

Структура пакета:

my_package/
├── __init__.py  # Обязательный файл для Python 2, опциональный для Python 3.3+ (но рекомендуется)
├── module1.py
└── subpackage/
    ├── __init__.py
    └── module2.py

Ключевые отличия:

  • Модуль: Один файл .py. Представляет собой единицу кода.
  • Пакет: Директория, содержащая модули (и, возможно, подпакеты) и файл __init__.py. Представляет собой способ организации множества модулей.
  • Назначение: Модули группируют связанный код; пакеты группируют связанные модули и подпакеты, создавая пространство имен.
  • Иерархия: Модули не имеют внутренней иерархии (кроме того, что они находятся в файловой системе); пакеты поддерживают вложенность (подпакеты).

Примеры импорта:

# Импорт модуля
import my_module
print(my_module.greet("World"))

# Импорт модуля из пакета
from my_package import module1
# Или: import my_package.module1
# Или: from my_package.subpackage.module2 import some_function