我有一个Django项目,它似乎与settings.py工作得很好,它也导入了local_settings.py而没有问题。
我现在在设置文件的末尾添加了以下行:
try:
from extras import *
except ImportError, e:
print "import extras failed :: " + `e`
extras.py是一个额外配置信息的文件,与settings.py和local_settings.py位于同一目录中,但是,我现在得到:
import extras failed :: ImportError('Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.',)
这似乎是由于我试图
from django.contrib.auth.models import User,UserManager
from django.db import models
在extras.py文件中。
有人有什么想法吗?
欢呼声
答案 0 :(得分:17)
通常,有一个像
这样的行from django.db import models
settings.py
中的将
导致循环依赖。这会导致导入错误,在不同版本的Django中报告的情况略有不同。例如,如果我将该行添加到正在运行的Django设置并调用“manage.py shell”,我得到:错误:找不到该文件 目录中的'settings.py' 包含'./manage.py'。它出现 你定制的东西。你会的 运行django-admin.py,传递它 你的设置模块。 (如果是文件 settings.py确实存在,它是 以某种方式导致ImportError。)
如果我删除该行,一切都很好。
原因是Django的模型加载机制(位于django.db.models
包中)导入settings.py
,读取其INSTALLED_APPS
以查看应安装哪些应用程序,然后加载这些应用程序。 (您可以通过向已安装的某个应用程序的__init__.py
添加打印语句来确认这一点。)
如果您尝试在django.db
中导入settings.py
内容,则会导致循环导入依赖项和ImportError
相关的错误消息。
一种解决方法是将需要有问题的导入(以及导入本身)的功能移动到应用程序。
答案 1 :(得分:3)
那么如何在您的环境中设置DJANGO_SETTINGS_MODULE
?它可能是,或者是导入设置时其他嵌套导入导致的设置隐式导入的结果,可能有几个令人讨厌的效果的“循环依赖”(尽管我不相信它会有你正在观察的特定的一个,所以我倾向于第一个假设。)