Форум сайта python.su
Всем привет.
Столкнулся с проблемой, подозреваю что у меня происходит цикличный импорт. Имеется следующее древо:
Содержимое файлов:
Пакет auth:
auth/__init__.py
auth_blpr = True from . import views as auth_views
from models.user import User
from index import database class User: pass
shop_blpr = True from . import views as shop_views
from models.user import User
database = 'spam' from auth import auth_blpr # если закомментировать эту строку ... from shop import shop_blpr # ... или эту то все в порядке!!!
Отредактировано moskitos80 (Фев. 11, 2016 13:02:08)
Прикреплённый файлы:
problem.zip (1,9 KБ)
Офлайн
24
from index import database
Офлайн
aybЭто импорт переменной. Переменную назвал “database” просто, без всякого умысла
Офлайн
24
Так определи эту пременную там где она нужна.
Офлайн
aybУважаемые, я наверно не так выразился в самом начале. Мне нужна информация не о том как сделать, что бы заработал именно этот код, а мне нужна информация о том что происходит, и почему возникает ошибка. Представленный код является искусственной моделью проблемы. Я знаю как сделать что бы он заработал. Я хочу поиметь опыт, который мне позволит в дальнейшем, при проектировании, учитывать и избегать этой, и подобных этой ситуаций.
Так определи эту пременную там где она нужна.
Офлайн
24
Так проблема как раз из-за этой пременной и возникает т.к. блюпринты импортируют друг друга. Или выноси ее в конфиг или определяй ее там где она будет использоваться.
Офлайн
aybБлагодарю. Разобрался используя трассировку при помощи print в начале и в конце файлов. В итоге поимел полную картину происходящего. На самом деле проблема не из за того что блюпринты импортируют друг друга, а из за того что модуль shop пытается получить доступ к пока ещё не заполненному пространству имен модуля models.user.
Так проблема как раз из-за этой пременной и возникает т.к. блюпринты импортируют друг друга. Или выноси ее в конфиг или определяй ее там где она будет использоваться.
Офлайн