В Python есть странный зверь — namespace packages. По идее, они решают проблему разделения одного пакета на несколько директорий. На практике же это сплошная путаница и боль.
Почему так:
🚩 У нас есть два способа делать одно и то же: explicit (через __init__.py + костыли) и implicit (PEP 420, без __init__.py).
🚩 Zen of Python говорит: “There should be one– and preferably only one –obvious way to do it”, но тут явно нарушено.
🚩 Новички легко создают случайные namespace пакеты, просто забыв __init__.py.
🚩 Явные пакеты оказываются несовместимыми между собой, implicit — хрупкие и медленные.
⚡️ Сценарий:
Представьте, вы в условном Gooble и хотите, чтобы все пакеты начинались с gooble.*.
Красиво, пока кто-то не решит, что gooble/__init__.py не нужен. Или наоборот, случайно добавит его. И всё — сломалось.
Вывод (и личный совет):
✅ Всегда кладите __init__.py в каждую директорию.
✅ Избегайте осознанных namespace packages — они слишком ненадёжные.
🐸 Библиотека питониста
#буст
