Как импорт обрабатывается в файлах пакета __init__.py? - PullRequest
0 голосов
/ 07 апреля 2020

Я столкнулся с очень конкретным c случаем, когда я не могу объяснить, почему импорт python делает то, что он делает, и я надеюсь, что вы мне поможете. Настройка выглядит следующим образом:

root/
├── main.py
└── pack/
    ├── __init__.py  
    ├── db.py  
    └── plugins/
        ├── __init__.py  
        └── plug1/
           ├── __init__.py
           └── db.py

Все файлы в дереве выше пусты, кроме root/pack/plugins/plug1/__init__.py, который имеет следующее содержимое:

from pack.plugins.plug1 import db as plugin_db
from pack import db

и main.py со следующими content:

import pack.plugins.plug1.db as plug_db
import pack.db as pack_db

print(pack_db.__file__)
print(plug_db.__file__)

При запуске main.py выходные данные операторов вывода выглядят так:

.../root/pack/db.py
.../root/pack/db.py

, что означает, что импортированный модуль точно такой же.

Мои вопросы являются:

  1. Почему импортированные модули одинаковы?
  2. Почему изменение from pack import db на from pack import db as pack_db решает проблему?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...