Проблема с импортом других файлов

У меня есть проект, в котором есть a.py и папка functions. В папке functions у меня два файла: __init__.py и b.py файл. В a.py я импортирую функцию из b.py. В свою очередь, эта функция использует другую функцию из a.py файла. Когда я запускаю a.py файл, у меня появляется ошибка: "NameError: name 'calc' is not defined". Что делать?

Вот пример папки с проектом:

./project
  └a.py
  └functions
    └__init__.py
    └b.py

Пример кода:
a.py:

def calc(a, b):
  print(a+b)
from functions.b import calculator
calculator(2, 5)

b.py:

def calculator(a,b):
  calc(a,b)

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

Автор решения: Евгений

К сожалению, в python невозможен импорт модуля из внешней директории во внутреннюю.
Интуитивно понятная конструкция вида

>>> from .. import a

Приведёт к ошибке

ValueError: attempted relative import beyond top-level package

Что в прямом смысле означает ошибку "попытки относительного импорта за пределами пакета верхнего уровня", где под пакетом верхнего уровня имеется в виду пакет, в котором находится текущий модуль.
Это означает, что дело не в неправильном выборе синтаксиса импорта, а именно в запрете импорта модуля уровнем выше.


Тщательнее структурируйте свои проекты, и вам не придётся прибегать к таким импортам (рекурсивный импорт, кстати, тоже очень плохая вещь)

→ Ссылка