Skip to main content
 首页 » 编程设计

python之有人可以帮助澄清我对 syncdb 和导入循环的困惑, 'Do you have to be explicit on imports'

2025年05月04日6kenshinobiy

我在 Python2.5 上使用 syncdb 构建数据库时遇到了困难。 我认为这个问题的部分原因是因为使用通配符* 导入 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 显式导入管理器来解决这个问题。
如您所见,如果我将 Question 和 Tag 模型加载到命名空间中,我就能够在 shell 中导入管理器。

我把 from forum.models import * 显式化了:
从 forum.models 导入问题,标签

但是,我仍然无法同步数据库。当我尝试输出SQL时找不到APP。
$ python2.5 manage.py sql论坛
错误:找不到带有论坛标签的应用程序。您确定您的 INSTALLED_APPS 设置正确吗?

谁能告诉我哪里出了问题?
Python2.5 是否有什么可能导致此错误?

请您参考如下方法:

除了 settings.py 之外,您还会碰巧使用 global_settings.py 或 local_settings.py 吗?

导入 Django 设置的正确方法是使用解耦对象 from django.conf import settings,而不是 import settings。请在此处查看有关它的文档页面:Using settings in Python code

我不能肯定地说这是否能解决您的问题,但如果您说您的问题是应用程序未显示在 INSTALLED_APPS 中,那么确保您的设置正确加载是朝着正确方向迈出的一步。