Fehler "Django DB-Einstellungen" nicht ordnungsgemäß konfiguriert "

170

Django (1.5) funktioniert gut für mich, aber wenn ich den Python-Interpreter (Python 3) starte, um einige Dinge zu überprüfen, erhalte ich den seltsamsten Fehler, wenn ich versuche zu importieren - from django.contrib.auth.models import User-

Traceback (most recent call last):
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 36, in _setup
    settings_module = os.environ[ENVIRONMENT_VARIABLE]
  File "/usr/lib/python3.2/os.py", line 450, in __getitem__
    value = self._data[self.encodekey(key)]
KeyError: b'DJANGO_SETTINGS_MODULE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.2/dist-packages/django/contrib/auth/models.py", line 8, in <module>
    from django.db import models
  File "/usr/local/lib/python3.2/dist-packages/django/db/__init__.py", line 11, in <module>
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 52, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 45, in _setup
    % (desc, ENVIRONMENT_VARIABLE))

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

Wie kann es falsch konfiguriert werden, wenn es außerhalb des Python-Interpreters einwandfrei funktioniert? In meinen Django-Einstellungen sind die DATABASESEinstellungen:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'django_db', # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'zamphatta',
        'PASSWORD': 'mypassword91',
        'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '', # Set to empty string for default.
    }
}

... wie ist das falsch konfiguriert?

Zamphatta
quelle
Ist beim Einrichten eines neuen Projekts darauf gestoßen. Ich fand es hilfreich zu tun unset DJANGO_SETTINGS_MODULE. Ich stieß auf ein Problem, bei dem ich die env var in meiner .bashrc
fncomp

Antworten:

264

Sie können Python nicht einfach starten und Dinge überprüfen, Django weiß nicht, an welchem ​​Projekt Sie arbeiten möchten. Sie müssen eines dieser Dinge tun:

  • Verwenden python manage.py shell
  • Verwenden Sie django-admin.py shell --settings=mysite.settings(oder welches Einstellungsmodul Sie auch verwenden)
  • Setzen Sie die DJANGO_SETTINGS_MODULEUmgebungsvariable in Ihrem Betriebssystem aufmysite.settings
  • (Dies wird in Django 1.6 entfernt.) Verwendung setup_environim Python-Interpreter:

    from django.core.management import setup_environ
    from mysite import settings
    
    setup_environ(settings)
    

Natürlich ist der erste Weg der einfachste.

Pavel Anossov
quelle
Vielen Dank! Das war mir in der Dokumentation nicht ganz klar, oder vielleicht habe ich es gelesen und vergessen, als ich es tun musste.
Zamphatta
6
Seltsamerweise scheint es die Datei 'mysite.settings' nicht zu finden, aber ich kann sie genau dort als mysite / settings.py sehen. Pfui! Ich fange an, Django zu hassen.
Zamphatta
3
Ja, setup_environwird in 1.6 entfernt, --settingssollte aber funktionieren. Sind Sie sicher, dass Ihre Einstellungen weiter FirstBlog.settingsund nicht nur im settingsaktuellen Verzeichnis gespeichert sind ?
Pavel Anossov
21
Keiner der oben genannten hat für mich funktioniert, aber dieser hat:$ export DJANGO_SETTINGS_MODULE="my_project.settings"
Thumbz
22
In PyCharm ist dies der Ausführungsort | Konfigurationen bearbeiten | (zB Unittests im Projekt) | Konfiguration | Umwelt | Umgebungsvariablen: DJANGO_SETTINGS_MODULE=(project directory name).settings
Bob Stein
41

Führen Sie in Ihrer Python-Shell / Ipython Folgendes aus:

from django.conf import settings

settings.configure()
Montaro
quelle
11
Apps aren't loaded yet.
Daniil Mashkin
26

2017 mit Django 1.11.5 und Python 3.6 ( aus dem Kommentar geht hervor, dass dies auch mit Python 2.7 funktioniert ):

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

Das, .pyin das Sie diesen Code einfügen, sollte sein mysite(das übergeordnete)

MagTun
quelle
Vielen Dank, keine der anderen Lösungen hat in meinem Fall
funktioniert
Arbeit mit Python 2.7 zu
Александр
Dies .pysollte an der Wurzel platziert werden , was bedeutet, dass es zusammen mit manage.py ist. Wie lege ich es in zufällige Ordner?
anonym
1
Es sollte beachtet werden, dass dies nur funktioniert, wenn Sie es oben in Ihre Datei einfügen, wenn Sie es in etwas einfügen if __name__ == "__main__":, das nicht richtig funktioniert :)
Josh Correia
11

Auf Django 1.9 habe ich versucht, django-admin runserverden gleichen Fehler zu erhalten, aber als ich ihn verwendet habe, habe python manage.py runserverich das beabsichtigte Ergebnis erhalten. Dies kann diesen Fehler für viele Menschen lösen!

Jacob Young
quelle
Gleiches gilt für Django 1.10, aber beim Versuch, den Befehl loaddata
amchugh89 vom
4

In meinem Fall habe ich dies erhalten, als ich versucht habe, Django-Tests über PyCharm auszuführen. Ich denke, das liegt daran, dass PyCharm die anfänglichen Django-Projekteinstellungen nicht lädt, dh die, manage.py shelldie anfänglich ausgeführt werden. Sie können sie zum Start des Testskripts hinzufügen oder die Tests einfach mit ausführen manage.py test.

Versionen:

  • Python 3.5 (in virtualenv)
  • PyCharm 2016.3.2 Professional
  • Django 1.10
Deleet
quelle
3

In meinem eigenen Fall in Django 1.10.1, das unter Python2.7.11 ausgeführt wird, habe ich versucht, den Server mit django-admin runserveranstatt manage.py runserverin meinem Projektverzeichnis zu starten .

Dev
quelle
0

Für Benutzer von IntelliJ konnte ich mit diesen Einstellungen über die Shell (unter Windows) abfragen.

Geben Sie hier die Bildbeschreibung ein

Stef Van Looveren
quelle