Компоновка модуля python

Я только начинаю понимать в моих проектах python, что мне нужно начать использовать несколько пакетов, и я немного запутался в том, как все должно работать вместе. Что именно должно пойти в __init__.py пакета? Некоторые проекты, которые я вижу, имеют только пустые и все их коды находятся в модулях этого пакета. Другие проекты реализуют то, что кажется большинством классов пакетов и функций внутри init.

Есть ли документ или руководство по стилю или что-то, что описывает то, что авторы python имели в виду для использования пакетов и файла __init__ и т.д.

Edit:
Я знаю смысл наличия файла __init__.py в самом простом смысле, что он делает папку пакетом. Но зачем мне помещать там функцию вместо модуля в ту же папку (пакет)?

Ответы

Ответ 1

__init__.py может быть пустым, но то, что он действительно делает, - убедиться, что Python правильно относится к вашим каталогам, предоставить любую инициализацию, которая вам понадобится для импорта вашего пакета (настройка среды или что-то в этом направлении) или определение __all__, чтобы Python знал, что делать, когда кто-то использует from package import *.

Большинство всего, что вам нужно знать, описано в docs на Пакетах. Dive Into Python также имеет кусок на упаковке.

Ответ 2

Вы уже знаете, я думаю, что файлы __init__.py необходимы, чтобы Python рассматривал каталоги как содержащие пакеты.

  • В приведенной выше модели __init__.py может оставаться пустым.

  • Вы также можете выполнить код инициализации для пакета.

  • Вы также можете установить переменную __all__.

[Edit: learnings] Когда вы делаете "из пункта импорта пакета" или "из импорта пакета", то переменную __all__ можно использовать для импорта выбранных пакетов.

Смотрите: http://docs.python.org/tutorial/modules.html