Относительный импорт в Python
Эй, все - я вытаскиваю свои волосы с относительным импортом в Python. Я читал документацию 30 раз, и многочисленные сообщения здесь, на SO и других форумах, по-прежнему не работают.
В настоящее время моя структура каталогов выглядит как
src/
__init__.py
main.py
components/
__init__.py
expander.py
language_id.py
utilities/
__init__.py
functions.py
Я хочу, чтобы extander.py и language_id.py имели доступ к модулю функций. Я запускаю python main.py, который очень хорошо обращается к модулям с помощью импорта компонентов export.expander * и components.language_id *.
Однако код внутри расширителя и language_id для доступа к функциональному модулю:
from ..utilities.functions import *
Я получаю эту ошибку:
ValueError: Attempted relative import beyond toplevel package
Я пережил это несколько раз, и, похоже, я следую документации. У кого-нибудь есть идеи о том, что здесь происходит не так?
Ответы
Ответ 1
Nevermind, я решил это:
src/
main.py
mod/
__init__.py
components/
__init__.py
expander.py
language_id.py
utilities/
__init__.py
functions.py
main.py затем ссылается на подпакеты как:
from mod.components.expander import *
from mod.utilities.functions import *
expander.py и language_id.py имеют доступ к функциям .py с помощью:
from ..utilities.functions import *
Но интересно то, что у меня был текстовый файл внутри каталога компонентов, который использует программа expand.py. Однако во время выполнения он не смог найти файл, даже если он был в том же каталоге. Я переместил текстовый файл в тот же каталог, что и main.py, и он сработал. Кажется противоречивым.