__init__.pyФайл __init__.py отмечает директорию как пакет Python, делая её импортируемой как модуль. Без него (в старых версиях Python) директория рассматривается как обычная папка и не может быть импортирована.
Файл может быть:
Например, вместо того чтобы писать:
from mypackage.utils.helpers import my_function
Ты можешь упростить импорты, добавив в __init__.py:
from .utils.helpers import my_function
Это позволяет пользователям писать:
from mypackage import my_function
mypackage/
__init__.py
module_a.py
module_b.py
В Python 3.3 и позже __init__.py больше не является строго обязательным. Директории без него рассматриваются как namespace-пакеты, которые позволяют одному пакету охватывать несколько директорий или установок.
Ключевые отличия:
__init__.py, поддерживают инициализационный код__init__.py не нужен, используются для распределённых или разделённых пакетовИспользуй __init__.py, когда тебе нужна явная инициализация пакета или ты хочешь контролировать публичный API. Опускай его только если ты намеренно создаёшь namespace-пакет.
В Python 3.3 и позже файл __init__.py полностью опционален, потому что namespace packages могут охватывать несколько директорий без необходимости в инициализационном коде.
Новый — ещё не проверен сообществом
Вы