Python - абсолютный импорт из подпапки
В основном я задаю тот же вопрос, что и этот парень: Как сделать относительный импорт в Python?
Но никто не дал ему правильного ответа. Учитывая, что вы находитесь в подпапке, и вы хотите перейти в каталог, а затем в другую папку вложенных файлов, то выполнение того, что они предлагают, не работает (как указывал OP в своих комментариях к их ответам).
Я знаю, что вы можете сделать это, используя sys.path, но я бы предпочел более чистый метод.
Пример:
App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py
Как мне импортировать Module_A в Module_B?
Ответы
Ответ 1
main.py
setup.py
app/ ->
__init__.py
package_a/ ->
__init__.py
module_a.py
package_b/ ->
__init__.py
module_b.py
- Вы запускаете
python main.py
.
-
main.py
делает: import app.package_a.module_a
-
module_a.py
делает import app.package_b.module_b
Альтернативно 2 или 3 могут использовать: from app.package_a import module_a
Это будет работать до тех пор, пока у вас есть app
в вашем PYTHONPATH. main.py
может быть где угодно.
Итак, вы пишете setup.py
, чтобы скопировать (установить) весь пакет приложений и подпакеты в целевые папки python системы и main.py
в целевые папки script.
Ответ 2
Если я читает правильно, в Python 2.5 или выше:
from ..Module_B import Module_B
Я думал, что хорошо разбираюсь в Python, но я понятия не имел, что это возможно в версии 2.5.
Ответ 3
Если вы затем импортируете Module_B в приложение, вы бы
Module_B.py: import ModuleA
App.py(который также импортирует ModuleA, который по умолчанию используется в вашем Pythonpath)
import Module_B.Module_B
Другой альтернативой является обновление __init__.py(в папке Module_A/App) до:
import os
import sys
sys.path.extend('%s../' % os.getcwd())
import ModuleA
Другой альтернативой является добавление вашей папки в среду PYTHONPATH var.