Задать вопрос
prostranstvovremya
@prostranstvovremya

Почему импорт класса из модуля через «.» иногда работает, а иногда нет?

Здравствуйте!
При прохождении видеокурса по Django я видел как импортируются классы из других файлов через точку. И сам, повторяя действия из курса, так же могу импортировать классы из другого файла через конструкцию
from .models import Tag
Но решил создать маленький проект, проверить одну функцию, и в нем у меня система ругается на такой импорт.
from .A import A
Я получаю ошибку. А без точки - работает.
Traceback (most recent call last):
  File "B.py", line 1, in <module>
    from .A import A
SystemError: Parent module '' not loaded, cannot perform relative import


По ошибке гуглил, предлагают разые варианты решения, самый банальный - убрать точку.
Но меня все таки интересуют причины такого поведения. Из-за чего? Чем модуль в джанго отличается от обычного модуля питона?

Структура каталога
├── A.py
└── B.py

Не уверен насколько важно содержание файлов, но приведу ниже
Коротенький пример
A.py
class A():
    a = 1
    b = 2
    def plus(self):
        c = self.a + self.b
        print(c)

B.py
from .A import A
a = A()
a.plus()

Соответственно ошибка, когда использую импорт с точкой

user@userpc ~/ImportTrouble $ python3 B.py 
Traceback (most recent call last):
  File "B.py", line 1, in <module>
    from .A import A
SystemError: Parent module '' not loaded, cannot perform relative import

  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
alternativshik
@alternativshik
небось нет файла __init__.py в каталоге "модуля", потому, это не модуль.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы