Как правильно установить DJANGO_SETTINGS_MODULE для моего проекта Django (я использую virtualenv)? - PullRequest
34 голосов
/ 12 января 2012

У меня возникли проблемы с настройкой DJANGO_SETTINGS_MODULE для моего проекта Django.

У меня есть каталог на ~/dev/django-project. В этом каталоге у меня есть виртуальная среда, которую я настроил с помощью virtualenv, а также проект django под названием "blossom" с приложением внутри него под названием "onora". Запуск tree -L 3 из ~/dev/django-project/ показывает мне следующее:

.
├── Procfile
├── blossom
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── fixtures
│   │   └── initial_data_test.yaml
│   ├── manage.py
│   ├── onora
│   │   ├── __init__.py
│   │   ├── __init__.pyc
│   │   ├── admin.py
│   │   ├── admin.pyc
│   │   ├── models.py
│   │   ├── models.pyc
│   │   ├── tests.py
│   │   └── views.py
│   ├── settings.py
│   ├── settings.pyc
│   ├── sqlite3-database
│   ├── urls.py
│   └── urls.pyc
├── blossom-sqlite3-db2
├── requirements.txt
└── virtual_environment
    ├── bin
    │   ├── activate
    │   ├── activate.csh
    │   ├── activate.fish
    │   ├── activate_this.py
    │   ├── django-admin.py
    │   ├── easy_install
    │   ├── easy_install-2.7
    │   ├── gunicorn
    │   ├── gunicorn_django
    │   ├── gunicorn_paster
    │   ├── pip
    │   ├── pip-2.7
    │   ├── python
    │   └── python2.7 -> python
    ├── include
    │   └── python2.7 -> /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7
    └── lib
        └── python2.7

Я пытаюсь вывести свои данные из базы данных с помощью команды

django-admin.py dumpdata

Мой подход - запустить cd ~/dev/django-project, затем запустить source virtual_environment/bin/activate, а затем запустить django-admin.py dumpdata

Однако я получаю следующую ошибку:

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

Я немного погуглил и нашел эту страницу: https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings

которые говорят мне, что

Когда вы используете Django, вы должны указать ему, какие настройки вы используете. Сделайте это с помощью переменной среды DJANGO_SETTINGS_MODULE. значение DJANGO_SETTINGS_MODULE должно быть в синтаксисе пути Python, например mysite.settings. Обратите внимание, что модуль настроек должен быть на Python импортировать путь поиска.

Следуя предложению на Настройка DJANGO_SETTINGS_MODULE в virtualenv? Я добавил строки

export DJANGO_SETTINGS_MODULE="blossom.settings"
echo $DJANGO_SETTINGS_MODULE

Виртуальная среда / bin / активировать. Теперь, когда я запускаю команду активации, чтобы активировать виртуальную среду, я получаю вывод:

DJANGO_SETTINGS_MODULE set to blossom.settings

Это выглядит хорошо для меня, но теперь у меня проблема в том, что работает

django-admin.py dumpdata

возвращает следующую ошибку:

ImportError: Could not import settings 'blossom.settings' (Is it on sys.path?): No module named blossom.settings

Что я делаю не так? Как я могу проверить sys.path? Как это должно работать?

Спасибо.

Ответы [ 6 ]

49 голосов
/ 12 января 2012

Не запускайте django-admin.py для чего-либо, кроме первоначального создания проекта.Для всего после этого используйте manage.py, который позаботится о поиске настроек.

22 голосов
/ 24 января 2013

Я только что столкнулся с той же ошибкой, и в конце концов мне удалось выяснить, что происходит (большая подсказка была (Is it on sys.path?) в ImportError).

Вам необходимо добавить каталог проекта в PYTHONPATH - это то, что документация подразумевает под

Обратите внимание, что модуль настроек должен находиться в пути поиска импорта Python.

Для этого запустите

$ export PYTHONPATH=$PYTHONPATH:$PWD

из каталога ~/dev/django-project перед запуском django-admin.py.

Вы можете добавить эту команду (заменив $PWD фактическим путем к вашему проекту, , т.е. ~/dev/django-project) к вашему сценарию source вашего virtualenv.Если в какой-то момент вы решите перейти к virtualenvwrapper (который предназначен для такого рода ситуаций), вы можете добавить строку export PY... к автоматически сгенерированному скрипту подключения postactivate.

mkdjangovirtualenv еще более автоматизирует это, добавив соответствующую запись в путь Python для вас, но я сам не проверял ее.

12 голосов
/ 17 марта 2014

На unix-подобных машинах вы можете просто использовать псевдоним virtualenv, подобный этому, и использовать псевдоним вместо того, чтобы каждый раз печатать:

0 голосов
/ 23 января 2019

Еще один способ решить эту проблему - использовать пакет python dotenv и включить PYTHONPATH и DJANGO_SETTINGS_MODULE в файл .env вместе с другими переменными среды. Затем измените файл manage.py и wsgi.py, чтобы загрузить их, как указано в инструкциях.

from dotenv import load_dotenv
load_dotenv()
0 голосов
/ 04 марта 2017

Моя любимая альтернатива - передача файла настроек в качестве параметра времени выполнения на manage.py в синтаксисе пакета python, например:

python manage.py runserver --settings folder.filename

больше информации django docs

0 голосов
/ 09 января 2016

Я знаю, что ответов много, но этот сработал для меня только для записи.

  1. Перейдите в папку .virtual_env, где находятся все виртуальные среды.
  2. Перейдите в папку среды, относящуюся к вашему проекту
  3. Добавить export DJANGO_SETTINGS_MODULE=<django_project>.settings или export DJANGO_SETTINGS_MODULE=<django_project>.settings.local, если вы используете отдельный файл настроек, хранящийся в папке настроек.
...