Некоторые из созданных мною небольших проектов имеют такую структуру каталогов:
my_project/
├─ docs/
├─ code/
│ ├─ __init__.py
│ ├─ main.py
│ └─ tools.py
├─ README
└─ .gitignore
и в main.py
Я использую следующую инструкцию абсолютного импорта для импорта функции tool()
из модуля tools.py
:
from tools import tool
Когда я посмотрел исходный код некоторых известных (и, вероятно, также хорошо написанных) пакетов, я обнаружил похожую структуру, но другой стиль операторов абсолютного импорта:
( Django , /django/core/paginator.py)
from django.utils.functional import cached_property
from django.utils.inspect import method_has_no_args
Почему родительский каталог django
включен в оператор импорта? И это предпочтительный способ, как импортировать модули? Когда я применяю логику к своему проекту и изменяю импорт функции tool()
следующим образом:
from code.tests import test
и затем выполните следующую команду в терминале:
python3 main.py
это поднимает ModuleNotFoundError
конечно.
Я хотел бы понять, почему эти пакеты используют этот стиль операторов импорта (который отличается от моего и не работает для моих собственных проектов). Я все еще изучаю Python, поэтому некоторые ссылки для чтения приветствуются.