Подтвердить что ты не робот

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

У меня возникли проблемы с настройкой 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? Как это должно работать?

Благодарю.

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

$ export PYTHONPATH=$PYTHONPATH:$PWD

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

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

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

Ответ 3

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

.bashrc

alias cool='source /path_to_ve/bin/activate; export DJANGO_SETTINGS_MODULE=django_settings_folder.settings; cd path_to_django_project; export PYTHONPATH=$PYTHONPATH:$PWD'

Ответ 4

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

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

Ответ 5

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

python manage.py runserver --settings folder.filename

подробнее django docs

Ответ 6

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

from dotenv import load_dotenv
load_dotenv()