Ошибка импорта с использованием относительного синтаксиса импорта - PullRequest
0 голосов
/ 04 октября 2019

У меня есть проект, структурированный так:

/proj
    main.py
    config/
        __init__.py
        setup.py
    gui/
        __init__.py
        app.py

Программа запускается с помощью вызова python main.py.

В main.py У меня есть from gui import App.

В gui/__init__.py У меня from .app import App.

Наконец, в app.py у меня есть from ..config import configure;это бросает ValueError, который читает attempted relative import beyond top-level package. Чтобы решить эту проблему, я могу изменить структуру:

/proj
    main.py
    proj/
        config/
            __init__.py
            setup.py
        gui/
            __init__.py
            app.py

Но тогда я должен изменить импортную статистику, включив в нее proj (то есть from proj.gui import App). Можно ли использовать относительный импорт в первом случае с текущей структурой? Если нет, как я могу импортировать то, что мне нужно, из подпакета config?

1 Ответ

0 голосов
/ 04 октября 2019

Как бы странно это не звучало, вы можете сделать:

from config import configure

в app.py для вашего предыдущего случая (текущей структуры), потому что когда вы запускаете python main.py, он интерпретирует config какпакет следующего уровня, и .. не будет работать.

(Кстати, я думаю, что есть много возможностей для улучшения импорта Python. Текущий PEP 328 в лучшем случае сбивает с толку).

...