Python-выполнение абсолютного импорта из подпапки

в основном я задаю тот же вопрос, что и этот парень:Как сделать относительный импорт в Python?

но никто не дал ему правильного ответа. Учитывая, что вы находитесь внутри подпапки, и вы хотите перейти в каталог, а затем в другую подпапку, делать то, что они предложили, не работает (как указал ОП в своих комментариях к их ответам).

Я знаю, что вы можете сделать это с помощью функции sys.путь, но я бы предпочел уборщика метод.

пример:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py

как импортировать Module_A в Module_B?

3 ответов


main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. запустить python main.py.
  2. main.py тут: import app.package_a.module_a
  3. 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 для сценария целевой системы папки.


Если я чтение правильно, в Python 2.5 или выше:

from ..Module_B import Module_B

Я думал, что хорошо разбираюсь в Python, но я понятия не имел, что это возможно в версии 2.5.


Если вы импортируете Module_B в приложение, вы бы

Module_B.py: импорт модуль

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.