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

34 投票
8 回答
50378 浏览
提问于 2025-04-18 08:23

我尝试了所有能找到的方法来解决这个问题,快要抓狂了。现在我遇到了这个错误:

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

但是每当我尝试运行测试时,就会出现上面的错误……我使用的是一个虚拟环境,它没有继承任何全局设置,所有东西都安装好了(版本也对),在我的 manage.py 文件里我设置了:

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

我在用 PyCharm 专业版开发,尝试过在 IDE 和命令行中运行测试。在命令行中我使用的是:

python3 manage.py test     

但是命令行找不到任何测试。这个测试很简单,目前我并不太关心它的内容,主要是环境的问题让我头疼。更新:我已经解决了命令行的问题。测试必须这样定义:

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,以确保问题不是权限问题,因为我把环境存放在了 root 下。

编辑:我刚发现我的不使用 Django 的测试运行得很好,但 PyCharm 还是报了好几个错误。这些错误不是单个测试的问题,而是我在这里提到的错误(有 341 个测试与 Django 无关)。我只有一个使用 Django 的测试,但它在初始化时就出错了,无法继续。

希望我解释得够清楚。

8 个回答

1

在我的情况下,我需要使用

python3 manage.py check --deploy

而不是

django-admin check --deploy
2

因为我不想在每个文件里都加这个,所以我创建了一个叫做 usercustomize.py 的文件,并在里面添加了这些内容:

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

在我的情况下,文件的路径是:

src/foosite/usercustomize.py

我用 "pip install -e" 安装了 foosite。我不太确定这个方法是否适用于普通安装。

10

在你的Python脚本中,你试图在设置环境之前访问Django模型。你可以按照这个顺序来试试:

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

使用这个

import os

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

而不是

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

如果你在使用 PyCharm Pro,可以通过点击“运行 Django 控制台...”来测试你的应用。点击“测试”后,它会让你选择想要测试的应用。

enter image description here

或者

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

enter image description here

撰写回答