【问题标题】:DJANGO_SETTINGS_MODULE is undefined?DJANGO_SETTINGS_MODULE 未定义?
【发布时间】:2012-03-30 09:43:05
【问题描述】:
import os
from os.path import abspath, dirname
import sys

# Set up django
project_dir = abspath(dirname(dirname(__file__)))
sys.path.insert(0, project_dir)
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"

我做到了,我仍然得到了

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    from django.middleware.csrf import get_token
  File "/var/lib/system-webclient/system-webenv/lib/python2.6/site-packages/django/middleware/csrf.py", line 14, in <module>
    from django.utils.cache import patch_vary_headers
  File "/var/lib/system-webclient/system-webenv/lib/python2.6/site-packages/django/utils/cache.py", line 24, in <module>
    from django.core.cache import cache
  File "/var/lib/system-webclient/system-webenv/lib/python2.6/site-packages/django/core/cache/__init__.py", line 68, in <module>
    cache = get_cache(settings.CACHE_BACKEND)
  File "/var/lib/system-webclient/system-webenv/lib/python2.6/site-packages/django/utils/functional.py", line 276, in __getattr__
    self._setup()
  File "/var/lib/system-webclient/system-webenv/lib/python2.6/site-packages/django/conf/__init__.py", line 38, in _setup
    raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE)
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined

这是一个调用 django 功能的小脚本,但它告诉我环境变量问题。

我能做什么?我花了整个下午阅读了很多帖子......

感谢您的帮助!这是我第一次打它。


回溯。它不会引发我们的手动异常。它给出了与上面相同的异常。

webclient/main.py

import os
from os.path import abspath, dirname
import sys
path = '/var/lib/graphyte-webclient/webclient'
if path not in sys.path:
    sys.path.append(path)
sys.path.insert(0, path)
os.environ["DJANGO_SETTINGS_MODULE"] = "webclient.settings"
raise Exception("DJANGO_SETTINGS_MODULE = " + str(os.environ["DJANGO_SETTINGS_MODULE"]))

    .... other things

在manage.py shell

>>> from webclient.settings import settings
Traceback (most recent call last):
  File "<console>", line 1, in <module>
ImportError: cannot import name settings

>>> import webclient
>>> webclient
<module 'webclient' from '/var/lib/system-webclient/webclient/../webclient/__init__.pyc'>

>>> import webclient.settings
>>> webclient.settings
<module 'webclient.settings' from '/var/lib/system-webclient/webclient/../webclient/settings.pyc'>

webclient/deploy/pinax.fcgi

import os
import sys

from os.path import abspath, dirname, join
from site import addsitedir

sys.path.insert(0, abspath(join(dirname(__file__), "../../")))

from django.conf import settings
os.environ["DJANGO_SETTINGS_MODULE"] = "webclient.settings"

sys.path.insert(0, join(settings.PROJECT_ROOT, "apps"))

from django.core.servers.fastcgi import runfastcgi
runfastcgi(method="threaded", daemonize="false")

webclient/deploy/pinax.wcgi

import os
import sys

from os.path import abspath, dirname, join
from site import addsitedir

sys.path.insert(0, abspath(join(dirname(__file__), "../../")))

from django.conf import settings
os.environ["DJANGO_SETTINGS_MODULE"] = "webclient.settings"
#os.environ["SCRIPT_NAME"] = "/natrium"

sys.path.insert(0, join(settings.PROJECT_ROOT, "apps"))

from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

filesystem image

【问题讨论】:

  • 您是使用django-admin.py startproject 命令还是手动设置项目?
  • @bennylope 我已经运行了大约 1 年,所以我不记得了。但我看不出为什么不通过命令。哦。顺便说一句,这是皮纳克斯。所以应该是通过命令。

标签: django pinax django-settings


【解决方案1】:

将此添加到顶部,您的设置文件的路径似乎不在您的系统路径中:

path = '/path/to/mysite'
if path not in sys.path:
   sys.path.append(path)

【讨论】:

  • 非常感谢。我也试过了。再次将那段代码添加到我的 python 脚本中,我仍然得到同样的错误。我进入python shell,发现sys.path没有我添加的新路径。它是一个 virtualenv 环境,如果它重要的话。我在运行脚本时激活了它。
  • 在你的main.py中,你能不能输入下面的Exception,看看traceback显示了什么?环境变量是否设置得当? raise Exception("DJANGO_SETTINGS_MODULE = " + str(os.environ["DJANGO_SETTINGS_MODULE"])) 如果它说:DJANGO_SETTINGS_MODULE = None 没有设置环境变量,我们必须验证 os.environ["DJANGO_SETTINGS_MODULE"] = ... 是否在正确的位置。如果它说:DJANGO_SETTINGS_MODULE = u"mysite.settings",那么我们将不得不进一步调查为什么它认为没有设置环境变量。
  • 非常感谢。它没有引发我们的手动异常。我包含了设置脚本,上面写着webclient.settings. 我还进入了shell 导入webclient.settings,它就在那里。
  • 验证:将path = '/var/lib/graphyte-webclient/webclient/'更改为path = '/var/lib/graphyte-webclient/webclient',不带斜杠。验证 /var/lib/graphyte-webclient/webclient 中是否有 __init__.py 文件,并验证 settings.py 文件是否在其中(如果存在,您可能需要删除 settings.pyc)。检查 python 执行程序可以访问的所有这些文件的权限。对于 raise Exception(...),必须在 main.py 中设置之后,将其移至 os.environ['DJANGO_SETTINGS_MODULE'] = "webclient.settings" 行下方。
  • 谢谢。我验证了它仍然没有引发我们的异常。我在上面编辑了我的代码(main.py),并上传了一张图片。我删除了settings.pyc 和__init__.pyc 并重新启动服务器,它会重新加载。所以pyc 是最新的。它没有用。
【解决方案2】:

如果您使用的是 django 1.6 + 下面的代码应该为你做这件事

import os
import sys
sys.path.append('/path/to/your/project/')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings")
from django.contrib import auth
from django.conf import settings
from django.contrib.auth.models import User

【讨论】:

    猜你喜欢
    • 2015-03-15
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2014-06-28
    • 2018-01-26
    • 2020-03-19
    • 2011-08-16
    相关资源
    最近更新 更多