Cài đặt Django DB 'Cấu hình không đúng cách'


170

Django (1.5) hoạt động tốt với tôi, nhưng khi tôi kích hoạt trình thông dịch Python (Python 3) để kiểm tra một số thứ, tôi gặp lỗi kỳ lạ nhất khi thử nhập - 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.

Làm thế nào nó có thể được cấu hình không đúng, khi nó hoạt động tốt bên ngoài trình thông dịch Python? Trong cài đặt Django của tôi, các DATABASEScài đặt là:

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

... Làm thế nào là cấu hình không đúng?


Đã qua điều này khi thiết lập một dự án mới. Tôi thấy nó hữu ích để làm unset DJANGO_SETTINGS_MODULE. Tôi đã gặp phải một vấn đề trong đó tôi đã đặt var env trong .bashrc
fncomp

Câu trả lời:


264

Bạn không thể kích hoạt Python và kiểm tra mọi thứ, Django không biết bạn muốn làm việc với dự án nào. Bạn phải làm một trong những điều sau:

  • Sử dụng python manage.py shell
  • Sử dụng django-admin.py shell --settings=mysite.settings(hoặc bất kỳ mô-đun cài đặt nào bạn sử dụng)
  • Đặt DJANGO_SETTINGS_MODULEbiến môi trường trong HĐH của bạn thànhmysite.settings
  • (Điều này bị xóa trong Django 1.6) Sử dụng setup_environtrong trình thông dịch python:

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

Đương nhiên, cách đầu tiên là dễ nhất.


Cảm ơn! Điều đó không rõ ràng đối với tôi trong tài liệu, hoặc có thể tôi đã đọc nó và quên mất thời gian tôi cần để làm điều đó.
Zamphatta

6
Điều kỳ lạ là dường như không thể tìm thấy tệp 'mysite.sinstall', nhưng tôi có thể thấy nó nằm ngay tại đó dưới dạng mysite / settings.py. Ừ! Tôi bắt đầu ghét Django.
Zamphatta

3
Có, setup_environđược gỡ bỏ trong 1.6, nhưng --settingssẽ hoạt động. Bạn có chắc chắn cài đặt của bạn ở xa hơn FirstBlog.settings, và không chỉ trong settingsthư mục hiện tại?
Pavel Anossov

21
Không có cái nào ở trên làm việc cho tôi, nhưng cái này đã làm:$ export DJANGO_SETTINGS_MODULE="my_project.settings"
Thumbz

22
Trong PyCharm , nơi để làm điều này là Run | Chỉnh sửa cấu hình | (ví dụ Unittests trong dự án) | Cấu hình | Môi trường | Biến môi trường: DJANGO_SETTINGS_MODULE=(project directory name).settings
Bob Stein

41

Trong shell python của bạn / ipython làm:

from django.conf import settings

settings.configure()

11
Apps aren't loaded yet.
Daniil Mashkin

26

Trong năm 2017 với django 1.11.5 và python 3.6 ( từ nhận xét này cũng hoạt động với Python 2.7 ):

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

Trong .pyđó bạn đặt mã này phải ở trong mysite(cha mẹ)


Cảm ơn rất nhiều, không có giải pháp nào khác hoạt động trong trường hợp của tôi
evnica

Làm việc với python 2.7 quá
Александр

Điều này .pynên được đặt ở thư mục gốc , có nghĩa là nó cùng với Manage.py. Làm thế nào để tôi đặt nó trong các thư mục ngẫu nhiên?
ẩn danh

1
Cần lưu ý rằng điều này sẽ chỉ hoạt động nếu bạn đặt nó ở đầu tệp của bạn, nếu bạn đặt nó vào bên trong một cái gì đó giống như if __name__ == "__main__":nó sẽ không hoạt động chính xác :)
Josh Correia

11

Trên Django 1.9, tôi đã thử django-admin runservervà gặp lỗi tương tự, nhưng khi tôi sử dụng python manage.py runservertôi đã nhận được kết quả như mong muốn. Điều này có thể giải quyết lỗi này cho rất nhiều người!


tương tự, trên django 1.10, nhưng trong khi cố gắng chạy lệnh loaddata
amchugh89

4

Trong trường hợp của tôi, tôi đã nhận được điều này khi cố gắng chạy thử nghiệm Django thông qua PyCharm. Tôi nghĩ rằng đó là vì PyCharm không tải các cài đặt dự án Django ban đầu, tức là các cài đặt manage.py shellban đầu chạy. Người ta có thể thêm chúng vào đầu tập lệnh thử nghiệm hoặc chỉ chạy các thử nghiệm bằng cách sử dụng manage.py test.

Phiên bản:

  • Python 3.5 (trong virtualenv)
  • PyCharm 2016.3.2 Chuyên nghiệp
  • Django 1.10

3

trong trường hợp của riêng tôi trong django 1.10.1 chạy trên python2.7.11, tôi đã cố gắng khởi động máy chủ bằng cách sử dụng django-admin runserverthay vì manage.py runservertrong thư mục dự án của tôi.


0

Đối với những người sử dụng IntelliJ, với các cài đặt này, tôi có thể truy vấn từ trình bao (trên windows).

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.