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

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

/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 

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

  • Как я могу использовать wsdl url в python
  • Как сделать итерируемый класс в Python, в котором разрешен только определенный тип?
  • Компиляция Python в статическую библиотеку lib и использование pythoncore.lib
  • Функция для получения количества животных в питоне
  • Запись цифр числа в массив
  • Точное обнаружение скрытого портала в python
  • Импортировать скрипт Python в другой?
  • Разбор уравнения с пользовательскими функциями в python
  • Почему существует разница между созданием класса в python 2.7 и производительности python 3.4
  • python принимает список и возвращает только если отрицательное значение также существует, используя set
  • Нужна помощь в разработке оценки пригодности для нейронной сети, основанной на алгоритме NEAT
  • Python - лучший язык программирования в мире.