Django DB Ayarları 'Yanlış Yapılandırılmış' Hatası


170

Django (1.5) benim için iyi çalışıyor, ama bazı şeyleri kontrol etmek için Python yorumlayıcısını (Python 3) ateşlediğimde, içe aktarmayı denediğimde en garip hatayı alıyorum - 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.

Python yorumlayıcısının dışında düzgün çalıştığında nasıl düzgün yapılandırılmamış olabilir? Django ayarlarımda DATABASESayarlar şunlardır:

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.
    }
}

... bu nasıl yanlış yapılandırılmış?


Yeni bir proje kurarken bununla karşılaştım. Bunu yapmayı yararlı buldum unset DJANGO_SETTINGS_MODULE.
.Bashrc

Yanıtlar:


264

Python'u ateşleyip şeyleri kontrol edemezsiniz, Django hangi projede çalışmak istediğinizi bilmiyor. Bunlardan birini yapmanız gerekir:

  • kullanım python manage.py shell
  • Kullan django-admin.py shell --settings=mysite.settings(veya kullandığınız ayar modülünü)
  • DJANGO_SETTINGS_MODULEİşletim sisteminizdeki ortam değişkenini şu şekilde ayarlayın:mysite.settings
  • (Bu Django 1.6'da kaldırılmıştır.) setup_environPython yorumlayıcısında kullanın :

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

Doğal olarak, ilk yol en kolayıdır.


Teşekkürler! Belgelerde bu benim için çok açık değildi, ya da belki de okudum ve yapmam gereken zamana kadar unuttum.
13'te Zamphatta 0:13

6
Garip bir şekilde 'mysite.settings' dosyasını bulamıyor gibi görünse de, orada mysite / settings.py olarak oturduğunu görebiliyorum. Ihh! Django'dan nefret etmeye başlıyorum.
13'te Zamphatta

3
Evet, setup_environ1.6'da kaldırıldı, ancak --settingsçalışması gerekiyor. Ayarlarınızın FirstBlog.settingsyalnızca settingsgeçerli dizinde değil , ileride olduğundan emin misiniz ?
Pavel Anossov

21
Yukarıdakilerin hiçbiri benim için işe yaramadı, ama bu işe yaradı:$ export DJANGO_SETTINGS_MODULE="my_project.settings"
Thumbz

22
In pycharm Bunu yapmak için yer Run | Yapılandırmaları Düzenle | (örneğin projedeki Unittest'ler) | Yapılandırma | Çevre | Çevre değişkenleri: DJANGO_SETTINGS_MODULE=(project directory name).settings
Bob Stein

41

Python kabuğunuzda / ipython şunları yapar:

from django.conf import settings

settings.configure()

11
Apps aren't loaded yet.
Daniil Mashkin

26

2017'de django 1.11.5 ve python 3.6 ile ( yorumdan bu Python 2.7 ile de çalışır ):

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

.pyBu kodu koymak hangi olmalıdır mysite(ana bir)


Çok teşekkürler, benim durumumda diğer çözümlerin hiçbiri işe yaramadı
evnica

Python 2.7 ile de çalışın
Александр

Bu .py kök üzerine yerleştirilmelidir , yani manage.py ile birlikte gelir. Rasgele klasörlerin içine nasıl yerleştiririm?
anonim

1
Bunun yalnızca dosyanızın en üstüne koyarsanız, böyle bir şeyin içine koyarsanız işe yarayacağına dikkat edilmelidir. if __name__ == "__main__": düzgün çalışmaz :)
Josh Correia

11

Django 1.9'da denedim django-admin runserverve aynı hatayı aldım, ancak kullandığımda python manage.py runserveramaçlanan sonucu aldım. Bu, birçok insan için bu hatayı çözebilir!


aynı, django 1.10 üzerinde, ama loaddata komutunu çalıştırmaya çalışırken
amchugh89

4

Benim durumumda, Django testlerini PyCharm aracılığıyla yapmaya çalışırken bunu aldım. Bunun nedeni, PyCharm'ın ilk Django proje ayarlarını, yani manage.py shellbaşlangıçta çalışanları yüklememesi nedeniyle olduğunu düşünüyorum . Bunları test komut dosyasının başına ekleyebilir veya sadecemanage.py test .

sürümleri:

  • Python 3.5 (sanal ortamda)
  • PyCharm 2016.3.2 Professional
  • Django 1.10

3

kendi durumda django 1.10.1 python2.7.11 üzerinde çalışan, benim proje dizin django-admin runserveryerine kullanarak sunucuyu başlatmaya çalışıyordu manage.py runserver.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.