Относительные модули импорта из подпапки родительских папок

Учитывая такую ​​структуру каталогов

/main/ /main/common/foo.py /main/A/ /main/A/src/ /main/A/src/bar.py 

Как я могу использовать относительный импорт Python для импорта foo из bar ? У меня есть рабочее решение, добавив его на путь, но это уродливо. Есть ли способ просто сделать с одним import в Python 2.7?

Это более сложная версия этого вопроса:

Импорт модулей из родительской папки

One Solution collect form web for “Относительные модули импорта из подпапки родительских папок”

Правильный относительный импорт будет следующим:

 from ...common import foo 

Однако относительный импорт предназначен только для работы в рамках одного пакета. Если main – это пакет, то здесь вы можете использовать относительный импорт. Если main не является пакетом, вы не можете.

Таким образом, если вы запускаете скрипт в /main/ и делаете что-то вроде import A.src.bar , то этот относительный импорт не будет работать с «Попытка относительного импорта за пределы пакета верхнего уровня». Это связано с тем, что относительный импорт пытается импортировать что-то за пределы пакета A верхнего уровня.

Однако, если вы запускаете скрипт в / и делаете что-то вроде import main.A.src.bar , то этот относительный импорт будет успешным, потому что main теперь является пакетом. В этом случае следующие два будут эквивалентными:

 from ...common import foo from main.common import foo 

Чтобы ответить на ваш комментарий: значение . не изменяется в зависимости от того, где был запущен скрипт, он изменяется в зависимости от структуры пакета.

  • Почему ранний возврат медленнее, чем другой?
  • Как я могу сделать пирамиду for-loop более кратким в Python?
  • как создать новый метод с подписью другого
  • Как расширить список целых чисел на основе порога?
  • Как удалить словари с дублирующимися значениями из вложенного словаря
  • Как сопоставить или вставить генераторы функций Python 2.7?
  • Почему моя функция «xmap» не быстрее, чем встроенная «карта»?
  • Как сделать итерируемый класс в Python, в котором разрешен только определенный тип?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.