Компоновка модуля 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