Python - импортировать пакет в модуль, который находится внутри того же пакета

У меня есть структура проекта примерно так...

/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

а затем сделать

some_app $ python out.py

работает отлично.

Следовательно, то, что происходит, - это. Я загружаю пакет в модуль, который находится в том же пакете, а затем запускаю этот модуль как __main__ файл - и это не работает. Далее я загружаю тот же модуль (тот, который я запускал как __main__) внутри другого модуля, а затем запустите этот другой модуль как __main__ - и это работает.

Может кто-нибудь рассказать, что здесь происходит?

ОБНОВИТЬ

Я понимаю, что нет прямой причины для этого - потому что я мог бы напрямую импортировать любые модули внутри some_app пакет. Я пытаюсь это сделать потому, что в проекте Django это то, что они делают. Смотрите этот файл для примера

В каждом модуле все нестандартные операции импорта начинаются с django., Поэтому я удивился, почему и как они это делают.

ОБНОВЛЕНИЕ 2

Соответствующие ссылки

3 ответа

Решение

mod2.py это часть some_app, Таким образом, нет смысла импортировать модуль, поскольку вы уже внутри него.

Вы все еще можете import mod1, Я предполагаю, что вам нужно some_app/__init__.py бежать. Не уверен, что это возможно.


РЕДАКТИРОВАТЬ:

Похоже from . import some_module будет делать то, что вы после.

Ты можешь сделать import some_app.mod2 от out.py потому что он находится в том же каталоге, что у вас есть some_app пакет, и интерпретатор Python начинает искать модули с этого пути.

Ошибка импорта в mod2.py это нормально, потому что нет some_app пакет в mod2.py папка.

Кажется, "from . Import some_module" работает только в Python3.

Универсальный способ - выполнить весь импорт в init.py.

Другие вопросы по тегам