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

#python-3.x #python-import

#python-3.x #python-импорт

Вопрос:

У меня есть структура папок для проекта с небольшим приложением и некоторыми дополнительными скриптами, которые напрямую не используются приложением (они используются для некоторой обработки данных о данных в data папке):

 project
   data
   doc    
   src
   └───scripts1
           script1_1.py
           script1_2.py
       scripts2
           script2_1.py
       application
           common
               __init__.py   
               config.py
           enrichment
               __init__.py
                module1.py
                module2.py
           __init__.py
           app.py
                
 

Скрипт app.py всегда является точкой входа и используется для запуска приложения. Я хочу иметь возможность использовать относительный импорт в этой структуре папок. Например, я хочу импортировать Configuration класс, который находится config.py внутри module1.py . Но когда я запускаю app.py и получаю этот оператор импорта в module1.py :

from ..common.config import Configuration

Я получаю следующую ошибку:

   File ".../project/src/application/enrichment/module1.py", line 6, in <module>
    from ..common.config import Configuration
ValueError: attempted relative import beyond top-level package
 

Мне также нужно было бы импортировать модули обогащения app.py , думаю, это должно работать аналогично:

 from .enrichment.module1 import <func or class>
 

Я прочитал несколько потоков при импорте модуля, но я все еще не могу восстановить поведение, при котором я могу использовать этот относительный импорт и не получать ValueError. В одном старом проекте я использовал импорт пути в __init__.py файлы, но я надеюсь, что это можно решить как-то лучше, потому что для меня это было немного волшебно. Действительно спасибо за любую помощь.

Комментарии:

1. Какой скрипт вы запускаете, когда получаете эту ошибку?

2. Я запускаю app.py . Мой плохой, я не упомянул об этом, я добавлю его к вопросу.

3. Хорошо. Я переместил app.py один слой каталога вверх (в папку src), как это предлагается в вашем руководстве, и теперь это работает. Спасибо. Но все же, есть ли какой-либо способ, как можно достичь этой функциональности без перемещения app.py ? Чтобы сохранить структуру каталогов в том виде, в котором она находится.