Как импортировать модуль из вложеной директории, импортирующий модуль из вложеной директории

Проблема:

Не выходит запустить функцию импортируемую из вложенной директории, которая использует переменную импортируемую из на уровень глубже вложенной директории.

Дерево проекта:

дерево проекта:

Содержание файлов:

содержание файлов

При запуске my_func() из main.py появляется ошибка:

Traceback (most recent call last):
  File "c:\Users\user\Desktop\My project\main.py", line 1, in <module>
    from functions.func import my_func
  File "c:\Users\user\Desktop\My project\functions\func.py", line 1, in <module>
    from variables.vars import my_var
ModuleNotFoundError: No module named 'variables'

Проблема не наблюдается если все три файла находятся на одном уровне вложенности.

Уважаемые знатоки! Как правильно настроить импорты, чтобы my_func() можно было запускать из main.py?


Ответы (2 шт):

Автор решения: S. Nick

Попробуйте так:

func.py

# -> vvvvvvvvvv <----------------------------------------------------
from functions.variables.vars import my_var


def my_func():
    print(my_var)
→ Ссылка
Автор решения: vadim vaduxa

Импорт бывает абсолютный и относительный.

Абсолютный импорт включает полный путь к вашему скрипту, начиная с корневой папки программы.

При относительном импорте указывается, где находятся ваши ресурсы относительно текущего файла кода. Используется точечная нотация - относительный путь (начиная с пути текущего модуля) к желаемому модулю. Формат from .<модуль/пакет> import X, где символы точки . показывают, на сколько директорий «вверх» нужно подняться. Одна точка . показывает текущую директорию, две точки .. — на одну директорию выше и т. д.

from .variables.vars import my_var
→ Ссылка