Django循环导入错误

xul*_*vez 6 django

我是一个django新手.我刚刚在windows vista上安装了v 1.3.1(使用setup.py install)来安装python 2.5

当我启动python shell并尝试导入django.db时,我得到以下循环导入错误

>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
>>> import django.db
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python25\lib\site-packages\django\db\__init__.py", line 78, in <module>
connection = connections[DEFAULT_DB_ALIAS]
  File "C:\Python25\lib\site-packages\django\db\utils.py", line 93, in __getitem__
backend = load_backend(db['ENGINE'])
  File "C:\Python25\lib\site-packages\django\db\utils.py", line 33, in load_backend
return import_module('.base', backend_name)
  File "C:\Python25\lib\site-packages\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "C:\Python25\Lib\site-packages\django\db\backends\sqlite3\base.py", line 14, in <module>
    from django.db import utils
ImportError: cannot import name utils
>>>
Run Code Online (Sandbox Code Playgroud)

看一下代码,我可以看到django\db\backends\sqlite3\base.py导入django\db\utils.py,但是这个文件也导入了base.py(使用import_module).由于循环导入,这不一定会崩溃吗?

另一方面,如果我使用shell从python manage.py shell一切工作正常,所以必须有一些东西,我可以在我的普通shell上运行,使其工作

谢谢你的任何提示!

编辑:

Delyan提出了两种可能的解决方案:

C:\Users\xulo>cd c:\django_example
c:\django_example>cd mysite
c:\django_example\mysite>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
>>> import sys
>>> sys.path.append('c:\\django_example\\mysite')
>>> sys.path.append('c:\\django_example')
>>> from django import db
>>>
Run Code Online (Sandbox Code Playgroud)

要么

c:\django_example\mysite>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import settings
>>> import django.core.management
>>> django.core.management.setup_environ(settings)
'c:\\django_example\\mysite'
>>> from django import db
>>>
Run Code Online (Sandbox Code Playgroud)

两者都运行良好,但我现在要打开这个问题,看看是否有人对原因有一个简单的解释,以及为什么对utils.py和base.py之间的明显循环导入进行排序

Del*_*yan 7

这很烦人但是Django希望你拥有项目的文件夹其父文件夹sys.path.你可以看到这种情况出现在setup_environdjango.core.management.__init__

最近出现了一个问题,这可能会在不久的将来重构,但现在只需将这两个文件夹添加到任何自定义脚本中(尽管您应该将它们添加为manage.py命令).

编辑:这已在Django 1.4中进行了部分重构.