Python packages



Предположим, вы разрабатываете большое приложение, которое включает в себя множество модулей. Очевидно, что складывать всё в одну папку не просто неудобно, а в некоторых случаях даже нерационально. Создадим для примера модуль main.py и рядом с ним пакет с модулями (папку с файлами) примерно в таком виде:



├── main.py

└── package

  ├── __init__.py

  ├── module1.py

  └── module2.py



Модуль __init__.py нужен для инициализации пакета, а также он вызывается при импорте пакета или модулей из него. Тем не менее, __init__.py может был пустым, достаточно его присутствия. Простыми словами, такой модуль нужен для того, работать с папкой как с Python-пакетом.



В main.py мы уже можем импортировать пакет и модули примерно такими способами:



import package

from package import module1

import package.module2 as m2



Предположим, что у нас есть уже какие-то функции в module1.py и module2.py. Теперь давайте напишем кое-что в __init__.py для примера:



from .module1 import function1

from . import module2 as m2



variable = 'hello from __init__.py'



Точка указывает на то, что мы импортируем модули из этого же пакета, а не откуда-то еще. Если указать без точки или просто import module2, то возникнет исключение.



Теперь в main.py мы можем выполнить следующие команды:



from package import function1

from package import m2

from package import variable



Возможности пакетов и модулей в Python этим не ограничиваются, но для вступления и ознакомления этой информации должно хватить.