django.core.exceptions.ImproperlyConfigured:请求设置 CACHES,但未配置设置。您必须定义环境变量

Posted

技术标签:

【中文标题】django.core.exceptions.ImproperlyConfigured:请求设置 CACHES,但未配置设置。您必须定义环境变量【英文标题】:django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment varia 【发布时间】:2014-07-23 13:38:11 【问题描述】:

我已经尝试了所有能找到的方法来解决这个问题,但现在我的头发开始掉了一点。 我收到此错误:

django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

当我这样做时,我的脚本运行良好:

python3 ./manage.py runserver

但是,每当我尝试运行测试时,都会收到上述错误... 我使用了一个 VirtualEnv,它不会在全局范围内继承任何东西,所有东西都已安装(使用正确的版本),并且在我的 manage.py 中我已经设置了:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<appname>.settings")

我正在使用 PyCharm Proffesional 进行开发,并尝试在 IDE 和 shell 中运行测试。 在我使用的外壳中:

python3 manage.py test     

shell 没有找到任何测试。测试是基本的,我目前并不关心它的内容,因为这是我正在努力解决的环境。 更新:我已经解决了 shell 的问题。测试必须由以下人员定义:

def test_<name>():

但这并没有解决我的 PyCharm 问题。 我也打过电话:

settings.configure()

告诉我它已经配置好了。 请注意,我在 Django 中使用任何数据库,并且我已经在设置中注释了适当的内容。

完整的错误是:

  Traceback (most recent call last):
  File "/root/kiloenv/lib/python3.4/site-packages/django/conf/__init__.py", line 38, in _setup
    settings_module = os.environ[ENVIRONMENT_VARIABLE]
  File "/usr/lib/python3.4/os.py", line 631, in __getitem__
    raise KeyError(key) from None
KeyError: 'DJANGO_SETTINGS_MODULE'

During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "/home/<username>/Documents/<dirname>/<appname>/tests.py", line 1, in <module>
        from django.test.utils import setup_test_environment
      File "/root/virtualenv/lib/python3.4/site-packages/django/test/__init__.py", line 5, in <module>
        from django.test.client import Client, RequestFactory
      File "/root/virtualenv/lib/python3.4/site-packages/django/test/client.py", line 11, in <module>
        from django.contrib.auth import authenticate, login, logout, get_user_model
      File "/root/virtualenv/lib/python3.4/site-packages/django/contrib/auth/__init__.py", line 6, in <module>
        from django.middleware.csrf import rotate_token
      File "/root/virtualenv/lib/python3.4/site-packages/django/middleware/csrf.py", line 14, in <module>
        from django.utils.cache import patch_vary_headers
      File "/root/virtualenv/lib/python3.4/site-packages/django/utils/cache.py", line 26, in <module>
        from django.core.cache import get_cache
      File "/root/virtualenv/lib/python3.4/site-packages/django/core/cache/__init__.py", line 69, in <module>
        if DEFAULT_CACHE_ALIAS not in settings.CACHES:
      File "/root/virtualenv/lib/python3.4/site-packages/django/conf/__init__.py", line 54, in __getattr__
        self._setup(name)
      File "/root/virtualenv/lib/python3.4/site-packages/django/conf/__init__.py", line 47, in _setup
        % (desc, ENVIRONMENT_VARIABLE))
    django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

我已在 sudo 下运行 PyCharm,以确保问题不是权限,因为我将 env 存储在 root 下。

编辑:我刚刚发现我的不使用 Django 的测试运行良好,但 Pycharm 仍然出现了几次失败。这些失败不是单独的测试,它们只是我在这里提到的错误(有 341 个测试与 Django 无关)。我只有一个使用 Django 的测试,它不会通过初始化并抛出上述错误。

希望我一直在解释

【问题讨论】:

sudo 的身份运行是答案 - 当问题是“我怎样才能弄乱我的主文件夹的权限”时。 【参考方案1】:

使用这个

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

而不是

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<appname>.settings")

【讨论】:

【参考方案2】:

在您的 python 脚本中,您尝试在设置环境之前访问 Django 模型,请按以下顺序尝试:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "<appname>.`settings`")
from <appname>.models import Class1, Class2,...

【讨论】:

【参考方案3】:

如果您使用的是 PyCharm Pro,您可以通过操作“运行 Django 控制台...”来测试您的应用程序。单击“测试”后,它会提示您输入要测试的应用程序。

在运行/调试配置中创建一个 Django 测试。

【讨论】:

【参考方案4】:

因为我不想在每个文件中都添加这个,所以我创建了 一个名为 usercustomize.py 的文件并添加了以下内容:

import os
os.environ['DJANGO_SETTINGS_MODULE']='foosite.settings'

我的文件路径:

src/foosite/usercustomize.py

我使用“pip install -e”安装了 foosite。我不确定这是否适用于正常安装。

【讨论】:

哇哇哇哇哇哇哇哇哇哇哇哇哇???请制作和示例,所以,你把它放在一个文件下,每次需要时都导入它?你把那个文件放在哪里了?什么目录?你是怎么安装的? 我更新了我的答案。我们现在使用usercustomize.py,因为一些Linux 发行版有自己的sitecustomize.py。您可以将此文件放在 sys.path 上的任何位置。你问我是如何安装它的:我安装它是可编辑的。这意味着在 ~/src/.【参考方案5】:

就我而言,我需要使用

python3 manage.py check --deploy

而不是

django-admin check --deploy

【讨论】:

【参考方案6】:

用您的工作路径正确填写“工作目录” 然后在原处写下副本

【讨论】:

【参考方案7】:

从 unittest2 导入 TestCase 时出现此错误。我通过以下方式导入 TestCase 来修复它:

from django.test import TestCase

当测试被标记为“Unittest”而不是“Test”时,我产生了怀疑。在 Pycharm 意识到我做了这个改变之前,我必须运行整个套件......

【讨论】:

【参考方案8】:

如果您使用的是 PyCharm,您可能忘记在此处选择您的调试配置:

【讨论】:

以上是关于django.core.exceptions.ImproperlyConfigured:请求设置 CACHES,但未配置设置。您必须定义环境变量的主要内容,如果未能解决你的问题,请参考以下文章