Django DB設定「不適切に設定された」エラー


170

Django(1.5)は私にとってはうまく機能していますが、Pythonインタープリター(Python 3)を起動していくつかのことをチェックすると、インポートしようとすると奇妙なエラーが発生します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インタープリターの外部で正常に動作する場合、不適切に構成されている可能性がありますか?私のDjango設定では、DATABASES設定は次のとおりです。

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

...これはどのように不適切に構成されていますか?


新しいプロジェクトを設定するときにこれに出くわしました。参考になったunset DJANGO_SETTINGS_MODULE。私の.bashrcにenv varを設定したという問題が発生していました
fncomp

回答:


264

Pythonを起動して確認するだけでなく、Djangoはどのプロジェクトに取り組みたいのかわかりません。次のいずれかを行う必要があります。

  • 使用する python manage.py shell
  • 使用django-admin.py shell --settings=mysite.settings(または使用する設定モジュール)
  • 設定DJANGO_SETTINGS_MODULEに使用しているOSで環境変数mysite.settings
  • (これはDjango 1.6で削除されました)setup_environPythonインタプリタで使用します:

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

当然、最初の方法が最も簡単です。


ありがとう!ドキュメントではそれがはっきりしていませんでした。あるいは、私がそれを読んで、必要なときに忘れていたのかもしれません。
ザンパッタ2013年

6
奇妙なことに、「mysite.settings」ファイルが見つからないようですが、mysite / settings.pyとしてそこにあることがわかります。うわっ!Djangoが嫌いになり始めています。
ザンパッタ2013年

3
はい、setup_environ1.6で削除されましたが、動作する--settingsはずです。設定が現在のディレクトリFirstBlog.settingsだけでなく、さらににありsettingsますか?
Pavel Anossov 2014

21
上記のどれも私にはうまく$ export DJANGO_SETTINGS_MODULE="my_project.settings"
いき

22
PyCharmこれを行うための場所が実行されます| 構成の編集| (例:プロジェクトのユニットテスト)| 構成| 環境| 環境変数:DJANGO_SETTINGS_MODULE=(project directory name).settings
ボブスタイン


26

2017年のdjango 1.11.5とpython 3.6(コメントから、これはPython 2.7でも機能します):

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

.pyあなたは、このコードを配置するには、でなければなりませんmysite(親1)


おかげで、他の解決策はどれも私の場合
うまくいき

あまりにものpython 2.7での作業
Александр

これ.pyrootに配置する必要があります。つまり、manage.pyと一緒に配置する必要があります。ランダムなフォルダ内に配置するにはどうすればよいですか?
匿名

1
これは、ファイルの先頭に配置した場合にのみ機能することに注意してください。if __name__ == "__main__":正しく機能しないような場所に配置した場合にのみ機能します:)
Josh Correia

11

Django 1.9ではdjango-admin runserver同じエラーが発生しましたが、使用python manage.py runserverすると意図した結果が得られました。これは多くの人にとってこのエラーを解決するかもしれません!


django 1.10でも同じですが、loaddataコマンドを実行しようとしています
amchugh89

4

私の場合、PyCharmを介してDjangoテストを実行しようとしたときにこれを取得しました。これは、PyCharmがDjangoプロジェクトの初期設定、つまりmanage.py shell最初に実行される設定を読み込まないためだと思います。テストスクリプトの先頭に追加するか、を使用してテストを実行できmanage.py testます。

バージョン:

  • Python 3.5(virtualenv内)
  • PyCharm 2016.3.2プロフェッショナル
  • Django 1.10

3

私自身の場合、python2.7.11で動作するdjango 1.10.1 で、プロジェクトディレクトリdjango-admin runservermanage.py runserverはなくを使用してサーバーを起動しようとしました。


0

IntelliJを使用している人のために、これらの設定を使用して、シェル(Windows)からクエリを実行できました。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.