• Как работает __init__.py?

    1. Питон может искать модули в нескольких папких в порядке очередности (в том числе по путям в PYTHON_PATH).
    2. Представьте что по одному из путей у вас вот так:
    5b068f8fd81f8672868800.png
    а по другому вот так:
    5b068fd63bfa3737841777.png
    3. Вы импортируете модуль string, но первой по приоритету обрабатывается директория с папкой string. А у вас там например вообще не питоновский код, а документация какая-нибудь. Вы на самом деле хотите заимпортить string.py из второй папки, но интерпретатор будет думать что нужно взять директорию, и выдаст ошибку (скажет что мол не является это валидным пакетом или что-то в таком духе).
    4. Чтобы такого не было, разработчики решили что вы должны явно помечать, что хотите чтобы папка считалась пакетом. Это тоже самое что помечать файлы с кодом на питоне расширением .py - вы же не ждёте что интерпретатор будет воспринимать .txt-шники как модули на питоне? То же самое и с папкой.

    Ну и да, как уже упомянул Вячеслав , __init__.py вовсе не обязательно должен быть пустым, например там могут быть реэкспорты.
    Ответ написан
    Комментировать
  • Как работает __init__.py?

    Nirail
    @Nirail
    Дайте мне повод и я во все решу
    Кроме того, что он позволяет питону интерпретировать директория как пакет, в __init__.py может быть включен различный код инициализации, например:
    • переменная __all__
    • проверка ограничений при использовании пакета
    • сообщение о deprecated
    Ответ написан
    Комментировать