Показаны сообщения с ярлыком __init__.py. Показать все сообщения
Показаны сообщения с ярлыком __init__.py. Показать все сообщения

22 марта 2016 г.

Python - Пример импортирования пакета


Рассмотрим практический пример программного кода, который демонстрирует, как используются файлы инициализации и пути к каталогам. Следующие три файла располагаются в каталоге dir1 и в подкаталоге dir2 – комментарии описывают пути к этим файлам:
# Файл: dir1\__init__.py
Print(‘dir1 init’)
x = 1

# Файл: dir1\dir2\__init__.py
Print(‘dir2 init’)
y = 2

# Файл: dir1\dir2\mod.py
Print(‘in mod.py’)
z = 3
В данном случае каталог dir1 может быть подкаталогом нашего рабочего каталога (то есть домашнего каталога программы) или подкаталогом одного из каталогов, перечисленных в пути поиска модулей (технически, входящего в список sys.path). В любом из этих случаев для каталога, вмещающего подкаталог dir1, не требуется наличие файла __init__.py.
Инструкции  import  выполняют  файлы  инициализации  в  каждом  каталоге, которые присутствуют в пути к модулю, – инструкции print, присутствующие в этих файлах, позволят отследить их выполнение. Кроме того, как и файлы модулей, уже импортированные каталоги могут передаваться функции reload для  принудительного  повторного  исполнения  этого  единственного  элемента.
Как показано ниже, для повторной загрузки каталогов и файлов функция reload также может принимать цепочку имен, разделенных точками:

10 марта 2016 г.

Файлы __init__.py пакетов

Если вы решили использовать импортирование пакетов, существует еще одно условие, которое необходимо будет соблюдать: каждый каталог в пути, указанном в инструкции импортирования пакета, должен содержать файл с именем __init__.py, в противном случае операция импорта пакета будет терпеть неудачу. То есть в примере выше каталоги dir1 и dir2 должны содержать файл с именем __init__.py каталог-контейнер dir0 может не содержать такой файл, потому что сам он не указан в инструкции импортирования пакета. Точнее говоря, для такой структуры каталогов:
dir0\dir1\dir2\mod.py
и инструкции импортирования, имеющей следующий вид:
import dir1.dir2.mod
применяются следующие правила:
•  dir1 и dir2 должны содержать файл __init__.py.
•  dir0, каталог-контейнер, может не содержать файл __init__.py – этот файл
будет проигнорирован, если он присутствует.
•  dir0, но не dir0\dir1, должен присутствовать в пути поиска модулей (то есть он  должен  быть  домашним  каталогом  или  присутствовать  в  переменной окружения PYTHONPATH и так далее).

Таким образом, структура каталогов в этом примере должна иметь следующий вид (здесь отступы указывают на вложенность каталогов):