#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 ? Чтобы сохранить структуру каталогов в том виде, в котором она находится.