Module not found. Again?
Всем привет. У меня повторилась проблема описанная тут, только уже не в тестах. Module not found
Ситуация следующая есть папка D:\repositories\ED. Переменная PYTHONPATH имеет значение D:\repositories\ED. В ней есть папка elements в которой три файла: element.py, node.py и init.py Создано виртуальное окружение в папке .venv В итоге структура такая:\
ED:
.venv
elements:
__init__.py
element.py
node.py
В файле elements.py определен класс Element В файле node.py определен класс Node, который наследуется от класса Element. При попытке импорта класса Element в node.py возникает ошибка module not found.
from elements.element import Element
class Node(Element):
def __init__(
self,
is_base: bool = False,
elements: Union[list, tuple, tensor] = None
) -> None:
self.is_base = is_base
self.elements = elements
Т.е. если попытаться создать объект класса Node, вот таким образом:
from elements.element import Element
class Node(Element):
def __init__(
self,
is_base: bool = False,
elements: Union[list, tuple, tensor] = None
) -> None:
self.is_base = is_base
self.elements = elements
node = Node(name='node', u_nom=220.0)
то получаем ошибку
(.venv) PS D:\repositories\ED> & d:/repositories/ED/.venv/Scripts/python.exe d:/repositories/ED/elements/node.py
Traceback (most recent call last):
File "d:\repositories\ED\elements\node.py", line 7, in <module>
from elements.element import Element
ModuleNotFoundError: No module named 'elements'
Складывается ощущение, что у меня есть какое то фундаментальное не понимание сути происходящего. Отчего возникает подобная ошибка? Отдельное спасибо если кинете ссылку на место где можно получить знания на эту тему. Спасибо.
Ответы (1 шт):
Все, я кажется разобрался сам. Если мы работаем в разных модулях, но внутри одного пакета (т.е. внутри папки с init.py файлом) elements, то доступ к отдельным модулям пакета должен происходить напрямую без указания самого пакета. Т.е. импортируем класс из другого модуля так:
from module import class
Если же мы работаем внутри другой папки, то доступ к модулям пакета elements уже происходит так:
from package.module import class