Относительный импорт в 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, и он сработал. Кажется противоречивым.