У меня есть структура проекта что-то вроде этого...
/some_app
build/
README
out.py
some_app/
__init__.py
mod1.py
mod2.py
Теперь я хочу импортировать пакет some_app
в mod2
, не входя в трюк sys.path
. Я просто сделал это...
# mod2.py
import some_app
Теперь, когда я запускаю mod2.py из командной строки
some_app $ python mod2.py
он выдает ошибку ImportError: No module named some_app
НО, внутри файла out.py
, когда я делаю
# out.py
import some_app.mod2
а затем do
some_app $ python out.py
он работает отлично.
Следовательно, это происходит. Я загружаю пакет в модуль, находящийся в одном пакете, а затем запускаю этот модуль как файл __main__
, и он не работает. Затем я загружаю тот же модуль (тот, который я запускал как __main__
) внутри другого модуля, а затем запускаю этот другой модуль как __main__
- и он работает.
Может кто-нибудь прокомментировать, что происходит здесь?
UPDATE
Я понимаю, что для этого нет прямой причины - потому что я мог напрямую импортировать любые модули внутри пакета some_app
. Причина, по которой я пытаюсь это сделать, заключается в том, что в проекте Django это то, что они делают. См. этот файл, например
В каждом модуле весь нестандартный импорт начинается с django.
. Поэтому я задавался вопросом, почему и как они это делают.
ОБНОВЛЕНИЕ 2
Соответствующие ссылки