Ваш первый пакет: шаг 3
Так выглядит древовидная структура:
Такая структура почти является пакетом (в смысле Python). Ему не хватает мелких деталей, чтобы быть функциональным и рабочим. Сейчас мы его закончим.
Если Вы предполагаете, что extra - это имя недавно созданного пакета (его следует рассматривать как корень пакета), он наложит правило именования, которое позволит Вам понятно назвать каждый объект в дереве.
Например:
- расположение функции с именем
funT()
из пакета tau можно описать так:extra.good.best.tau.funT()
- функция помеченая как:
extra.ugly.psi.funP()
идет из модуля psi, который хранится в подпакете ugly пакета extra.
Ваш первый пакет: шаг 4
Есть два вопроса, на которые нужно ответить:
- как преобразовать такое дерево (фактически, поддерево) в реальный пакет Python (другими словами, как убедить Python, что такое дерево - это не просто набор файлов, а набор модулей)?
- куда поместить поддерево, чтобы сделать его доступным для Python?
На первый вопрос есть неожиданный ответ: пакеты, как и модули, могут требовать инициализации.
Инициализация модуля выполняется с помощью несвязанного кода (не являющегося частью какой-либо функции), расположенного внутри файла модуля. Поскольку пакет не является файлом, этот метод бесполезен для инициализации пакетов.
Вместо этого Вам нужно использовать другой прием - Python ожидает, что в папке пакета есть файл с очень уникальным именем: __init__.py.
Содержимое файла выполняется при импорте любого из модулей пакета. Если Вы не хотите никаких особых инициализаций, Вы можете оставить файл пустым, но Вы не должны его пропускать.