Проблема с импортом других файлов
У меня есть проект, в котором есть 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
Что в прямом смысле означает ошибку "попытки относительного импорта за пределами пакета верхнего уровня", где под пакетом верхнего уровня имеется в виду пакет, в котором находится текущий модуль.
Это означает, что дело не в неправильном выборе синтаксиса импорта, а именно в запрете импорта модуля уровнем выше.
Тщательнее структурируйте свои проекты, и вам не придётся прибегать к таким импортам (рекурсивный импорт, кстати, тоже очень плохая вещь)