Может кто-нибудь помочь прояснить мою путаницу с циклами syncdb и import: «Нужно ли явно указывать на импорт?» - PullRequest
2 голосов
/ 23 января 2010

Мне было трудно собирать базу данных с помощью syncdb на Python2.5. Я думаю, что часть этой проблемы из-за использования подстановочного знака * для импорта forum.models, кажется, что это создает цикл.

>>> import settings  
>>> from forum.managers import QuestionManager, TagManager, AnswerManager, VoteManager, FlaggedItemManager, ReputeManager, AwardManager  
Traceback (most recent call last):  
  File "<console>", line 1, in <module>  
  File "/home/username/webapps/username/sousvide_app/forum/managers.py", line 6, in <module>  
    from forum.models import *  
  File "/home/username/webapps/username/sousvide_app/forum/models.py", line 18, in <module>  
    from forum.managers import QuestionManager, TagManager, AnswerManager, VoteManager, FlaggedItemManager, ReputeManager, AwardManager  
ImportError: cannot import name QuestionManager  
>>> from forum.models import Question, Tag  
>>> from forum.managers import QuestionManager, TagManager, AnswerManager, VoteManager, FlaggedItemManager, ReputeManager, AwardManager  
>>> import sys, pprint  
>>> pprint.pprint(sys.path)  
['/home/username/webapps/username/sousvide_app',  
 '/home/username/webapps/username/lib/python2.5',  
 '/home/username/lib/python2.5/markdown2-1.0.1.16-py2.5.egg',  
 '/home/username/lib/python2.5/html5lib-0.11.1-py2.5.egg',  
 '/home/username/lib/python2.5',  
 '/usr/local/lib/python25.zip',  
 '/usr/local/lib/python2.5',  
 '/usr/local/lib/python2.5/plat-linux2',  
 '/usr/local/lib/python2.5/lib-tk',  
 '/usr/local/lib/python2.5/lib-dynload',  
 '/usr/local/lib/python2.5/site-packages',  
 '/usr/local/lib/python2.5/site-packages/PIL']  
>>> from settings import INSTALLED_APPS  
>>> pprint.pprint(INSTALLED_APPS)  
('sousvide_app.forum',  
 'django.contrib.auth',  
 'django.contrib.contenttypes',  
 'django.contrib.sessions',  
 'django.contrib.sites',  
 'django.contrib.admin',  
 'django.contrib.humanize',  
 'django_authopenid')  

У меня была такая же проблема в другой установке, которую я смог исправить, явно импортировав менеджеров из forum.managers.
Как видите, если я загружаю модели вопросов и тегов в пространство имен, я могу импортировать менеджеры в оболочке.

Я сделал импорт с forum.models * явный:
с forum.models import вопрос, тег

Однако я все еще не могу синхронизировать. Когда я пытаюсь вывести SQL, приложение не может быть найдено.
$ python2.5 manage.py sql forum
Ошибка: приложение с форумом ярлыков не найдено. Вы уверены, что ваша установка INSTALLED_APPS верна?

Кто-нибудь может дать мне представление о том, что происходит не так?
Есть ли что-то в Python2.5, что может способствовать этой ошибке?

1 Ответ

0 голосов
/ 23 января 2010

Возможно, вы используете global_settings.py или local_settings.py в дополнение к settings.py?

Правильный способ импортировать настройки Django - использовать разъединенный объект from django.conf import settings, а НЕ import settings. См. Страницу документа об этом здесь: Использование настроек в коде Python

Я не могу с уверенностью сказать, является ли это решением вашей проблемы, но это шаг в правильном направлении, чтобы убедиться, что ваши настройки загружаются правильно, если вы говорите, что проблема в приложениях, которые не отображаются в INSTALLED_APPS.

...