Предположим, вы разрабатываете большое приложение, которое включает в себя множество модулей. Очевидно, что складывать всё в одну папку не просто неудобно, а в некоторых случаях даже нерационально. Создадим для примера модуль
main.py и рядом с ним пакет с модулями (папку с файлами) примерно в таком виде:├── main.py└── package ├── __init__.py ├── module1.py └── module2.pyМодуль
__init__.py нужен для инициализации пакета, а также он вызывается при импорте пакета или модулей из него. Тем не менее, __init__.py может был пустым, достаточно его присутствия. Простыми словами, такой модуль нужен для того, работать с папкой как с Python-пакетом.В
main.py мы уже можем импортировать пакет и модули примерно такими способами:import package from package import module1import package.module2 as m2Предположим, что у нас есть уже какие-то функции в
module1.py и module2.py. Теперь давайте напишем кое-что в __init__.py для примера:from .module1 import function1from . import module2 as m2variable = 'hello from __init__.py'Точка указывает на то, что мы импортируем модули из этого же пакета, а не откуда-то еще. Если указать без точки или просто
import module2, то возникнет исключение.Теперь в
main.py мы можем выполнить следующие команды:from package import function1from package import m2from package import variableВозможности пакетов и модулей в Python этим не ограничиваются, но для вступления и ознакомления этой информации должно хватить.