Относительный импорт в Python
Привет всем - я вытаскиваю свои волосы с относительным импортом в Python. Я прочитал документацию 30 раз и многочисленные посты здесь на SO и других форумах - все еще, кажется, не работает.
Моя структура каталогов в настоящее время выглядит следующим образом
src/
__init__.py
main.py
components/
__init__.py
expander.py
language_id.py
utilities/
__init__.py
functions.py
Я хочу, чтобы expander.py и language_id.py имели доступ к модулю функций. Я запускаю python main.py, который прекрасно обращается к модулям из компонентов component.expander import * и component.language_id import *.
Тем не менее, код внутри expander и language_id для доступа к модулю функций:
from ..utilities.functions import *
Я получаю эту ошибку:
ValueError: Attempted relative import beyond toplevel package
Я прошел через это несколько раз, и, похоже, я следую документации. У кого-нибудь есть идеи, что здесь происходит не так?
1 ответ
Неважно, я решил это:
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 имеют доступ к functions.py с помощью:
from ..utilities.functions import *
Но интересно то, что у меня был текстовый файл в каталоге компонентов, который использует expander.py. Однако во время выполнения он не мог найти файл, даже если он находился в том же каталоге. Я переместил текстовый файл в тот же каталог, что и main.py, и это сработало. Кажется нелогичным.