#python
#python
Вопрос:
У меня возникли проблемы с циклическими зависимостями, но я нашел в Интернете несколько советов о том, что мне лучше импортировать весь модуль, а не отдельные элементы в модуле. До проблемы с циклической зависимостью у меня не было проблем с импортом.
Итак, следуя совету блога, я настраиваю __init__.py
в папке, содержащей несколько моделей, импортировал каждую из них туда, и теперь, когда я пытаюсь импортировать из этого модуля, мне говорят, что у модуля нет атрибута, который я ищу.
Итак, у меня есть эта файловая структура:
└── root
├── models
│ ├── __init__.py
│ ├── a.py
│ └── b.py
└── c.py
В __init__.py
у меня есть
from models.a import A
from models.b import B
И в c.py
import models
# code
models.A.func()
Но я получаю сообщение об ошибке module 'models' has no attribute 'A'
. Поскольку A и B ссылаются друг на друга, сначала я получал циклический импорт, но теперь, когда они разрешены, я не могу заставить модели отображаться вообще.
Комментарии:
1. Как вы запускаете свой код? IDE или командная строка? Установлена ли у вас переменная среды PYTHONPATH? Если да, то какова его ценность?
2. Используйте
print(models)
, чтобы убедиться, что он импортирует правильный.3. @Code-Apprentice Это в экземпляре docker под управлением gunicorn. Корень находится в
PYTHONPATH
, и пока я не столкнулся с этой проблемой циклического импорта, у меня не было никаких проблем с импортом чего-либо.4. Это проект Django?
models
Действительно ли он находится в корне проекта? Или у вас естьproject/app/models
?5. @Code-Apprentice На самом деле это приложение flask, но я использую движок модели Django. Итак, да, это в структуре, которую вы упомянули. Я не думал, что это имеет значение, поэтому я упростил код ради вопроса.
Ответ №1:
Вам либо нужно добавить каталог вашего проекта в PYTHONPATH
, либо вам нужно сделать
from . import models
Комментарии:
1. Итак, я должен добавить каждый подкаталог в
PYTHONPATH
? У меня уже есть корень вPYTHONPATH
.2. @Rohit Нет, только корневой каталог проекта.
Ответ №2:
ваш __init__.py
файл не требует никаких изменений. Я думаю, что в c.py файл, введите следующим образом :
modele_name.function_name()
Я полагаю, что если вы импортировали эту функцию в свой __init__.py
файл, это вам поможет.
Для получения более подробной информации, пожалуйста, отредактируйте свой вопрос и добавьте ссылку на git вашего репозитория