django.core.exceptions.ImproperlyConfigured: 请求设置 USE_I18N,但未配置设置

django.core.exceptions.ImproperlyConfigured: Requested setting USE_I18N, but settings are not configured

我想将 MySQL 数据库连接到我的 django 项目,但它抛出了一个错误:

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

跟踪:

 (myenv) LIBINGLADWINs-MacBook-Air:libinrenold$ django-admin dbshell
Traceback (most recent call last):
  File "/Users/libinrenold/Desktop/djangoworks/myenv/bin/django-admin", line 11, in <module>
    sys.exit(execute_from_command_line())
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/core/management/__init__.py", line 364, in execute_from_command_line
    utility.execute()
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/core/management/__init__.py", line 356, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/core/management/base.py", line 322, in execute
    saved_locale = translation.get_language()
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/utils/translation/__init__.py", line 195, in get_language
    return _trans.get_language()
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/utils/translation/__init__.py", line 59, in __getattr__
    if settings.USE_I18N:
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/conf/__init__.py", line 56, in __getattr__
    self._setup(name)
  File "/Users/libinrenold/Desktop/djangoworks/myenv/lib/python3.6/site-packages/django/conf/__init__.py", line 39, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting USE_I18N, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

settings.py

  DATABASES = {
        'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'user',
        'PASSWORD': 'root',
        'HOST':'',
        'PORT': '',
        }
     }

您必须定义相关变量以显示您的 settings.py 文件所在的位置:

export DJANGO_SETTINGS_MODULE=mysite.settings

这是相关的 docs 条目:

When you use Django, you have to tell it which settings you’re using. Do this by using an environment variable, DJANGO_SETTINGS_MODULE.

The value of DJANGO_SETTINGS_MODULE should be in Python path syntax, e.g. mysite.settings. Note that the settings module should be on the Python import search path.

如果您使用的是 virtualenv(最佳做法),您可以将相关的 export 命令粘贴到文件 <path-to-virtualenv>/bin/activate

把它放在 settings.py 的顶部 这将为您配置 django

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", __file__)
import django
django.setup()

就像 raratiru 回答的那样,您需要 DJANGO_SETTINGS_MODULE 环境变量定义为您的设置文件的相对 pythonic 路径。

或将您的 django-admin commandsettings 参数一起使用:

django-admin --settings=mysite.settings dbshell

我也遇到了,我现在才发现是无意的。

我在 PyCharm IDE 的顶部更改了 "configuration" 所以 pycharm 在尝试 运行 django 代码时感到困惑。当我尝试使用快捷方式 运行 服务器但是当我使用终端到 运行 服务器时,问题弹出窗口,我发现 django 代码没有任何问题并且 pycharm 找不到设置。

所以请检查顶部 pycharm 中的 "configuration" ide 也许你也犯了同样的错误:)

我是 django 的新手,所以如果我的回答很愚蠢,请保持冷静。

我在尝试 运行 服务器时遇到了与 Django 3.0.8(2020 年 7 月)相同的错误,在我的情况下不需要 DJANGO_SETTINGS_MODULE 环境变量。解决方案是使用另一种形式 运行 服务器:

cd <directory containing manage.py>
python3 manage.py runserver

它也适用于 运行 Django shell :

python3 manage.py shell

问题

当我 运行 单元测试时,我对 Django==3.2 和 djangorestframework==3.12.4 (2021/04) 有同样的错误。在我的例子中,python manage.py test 工作正常,但我不能直接 运行 或调试特定应用程序中的测试模块,我得到这个错误:

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

解决方案

首先我将 django 项目根添加到 sys.path。然后我在环境变量中添加了DJANGO_SETTINGS_MODULE来解决项目设置root并调用了Django的setup函数。这是我的代码:

from os import path, environ
from sys import path as sys_path
from django import setup

sys_path.append(<path to django setting.py>)    
environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_project.settings')
setup()

我遇到这个问题是因为我试图在键入后导入一个 django 脚本

python

而不是

python manage.py shell

呃!

终端中的以下代码手动通知我正在使用的设置对我有用:

set DJANGO_SETTINGS_MODULE=mysite.settings