В чём разница между пакетами и модулями?
📦 Что такое модуль в Python?
Модуль — это любой файл с расширением .py, который содержит Python-код.
Модуль может содержать:
-
функции,
-
классы,
-
переменные,
-
исполняемый код.
Пример:
\# math_utils.py — это модуль
def add(a, b):
return a + b
Ты можешь подключить этот модуль в другом файле:
import math_utils
print(math_utils.add(2, 3)) # Вывод: 5
📁 Что такое пакет в Python?
Пакет — это папка, которая содержит модули и/или другие пакеты и файл _init_.py.
📌 До Python 3.3 наличие _init_.py обязательно, чтобы Python распознал папку как пакет. Сейчас он необязателен, но часто используется.
Пример структуры пакета:
my_package/ ← это пакет
│
├── \__init_\_.py ← делает папку пакетом
├── math_utils.py ← модуль
├── string_utils.py ← модуль
└── subpackage/ ← вложенный пакет
├── \__init_\_.py
└── helper.py ← модуль
Теперь ты можешь использовать:
from my_package import math_utils
from my_package.subpackage import helper
🧠 Главные отличия между модулем и пакетом:
Характеристика | Модуль | Пакет |
---|---|---|
Что это | Один .py файл | Папка с модулями/пакетами и _init_.py |
--- | --- | --- |
Назначение | Хранит код (функции, классы) | Организует структуру проекта |
--- | --- | --- |
Подключение | import модуль | import пакет.модуль |
--- | --- | --- |
Пример | math_utils.py | my_package/ |
--- | --- | --- |
Может содержать | Только код | Модули и вложенные пакеты |
--- | --- | --- |
Обязательный файл | — | _init_.py |
--- | --- | --- |
🔍 Примеры из стандартной библиотеки
-
math — модуль
-
collections — модуль
-
email — пакет (внутри него модули: message, mime, utils и др.)
💬 Аналогия с книгами
-
Модуль — как отдельная глава книги.
-
Пакет — как раздел книги, который содержит главы (модули) и, возможно, подразделы (вложенные пакеты).
🧩 Как _init_.py помогает?
Файл _init_.py запускается при первом импорте пакета. Он может:
-
Выполнять код инициализации,
-
Определять, какие модули экспортировать,
-
Создавать алиасы,
-
Реализовывать "магические импорты".
Пример:
\# my_package/\__init_\_.py
from .math_utils import add
Теперь можно сделать:
from my_package import add
🧪 Как использовать в реальных проектах?
📁 Пример структуры проекта:
project/
├── main.py
├── utils/
│ ├── \__init_\_.py
│ ├── file_utils.py
│ └── db_utils.py
В main.py ты пишешь:
from utils import file_utils
file_utils.read_file('example.txt')