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

时间:2014-06-03 09:20:18

标签: python django python-3.x pycharm

我已经尝试了一切我能找到的解决这个问题的方法,而且我开始把头发撕掉一点。 我收到此错误:

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中运行测试。 我在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仍然输了几次失败。这些失败不是个别测试,它们只是我在这里提到的错误(那里没有与Django相关的341次测试)。我只有一个使用Django的测试,它不会超过初始化并抛出上述错误。

希望我已经解释了

8 个答案:

答案 0 :(得分:30)

使用此

import os

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

而不是

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:7)

如果您使用的是PyCharm Pro,您可以通过操作测试您的应用程序&#39;运行Django控制台...&#39;。点击&#39; test&#39;后,它会提示您输入要测试的应用。

enter image description here

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

enter image description here

答案 3 :(得分:2)

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

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

我的案例中的文件路径:

src/foosite/usercustomize.py

我使用&#34; pip install -e&#34;安装了foosite。我不确定这是否适用于正常安装。

答案 4 :(得分:1)

enter image description here

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

答案 5 :(得分:0)

从unittest2导入TestCase时出现此错误。我通过导入TestCase修复它:

from django.test import TestCase

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

答案 6 :(得分:0)

如果你正在使用PyCharm,你可能忘了在这里选择调试配置:

PyCharm Screenshot

答案 7 :(得分:0)

我需要使用

python3 manage.py check --deploy

代替

django-admin check --deploy