46

我在为我的 Django 项目设置 DJANGO_SETTINGS_MODULE 时遇到了一些麻烦。

我有一个目录~/dev/django-project。在这个目录中,我有一个使用 virtualenv 设置的虚拟环境,还有一个名为“blossom”的 django 项目,其中有一个名为“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 导入搜索路径上。

遵循在 virtualenv 下设置 DJANGO_SETTINGS_MODULE 的建议?我附加了这些行

export DJANGO_SETTINGS_MODULE="blossom.settings"
echo $DJANGO_SETTINGS_MODULE

到 virtual_environment/bin/activate。现在,当我运行 activate 命令以激活虚拟环境时,我得到输出读数:

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?这应该如何工作?

谢谢。

4

7 回答 7

63

除了初始项目创建之外,不要运行django-admin.py任何其他内容。对于之后的所有内容,请使用manage.py,它负责查找设置。

于 2012-01-11T21:07:52.967 回答
27

我刚刚遇到了同样的错误,并最终设法弄清楚发生了什么(大线索(Is it on sys.path?)在 中ImportError)。

您需要将项目目录添加到PYTHONPATH- 这就是文档的含义

请注意,设置模块应位于 Python 导入搜索路径上。

为此,请运行

$ export PYTHONPATH=$PYTHONPATH:$PWD

~/dev/django-project目录中运行之前django-admin.py

您可以将此命令(替换$PWD为项目的实际路径, ~/dev/django-project)添加到您的 virtualenvsource脚本中。如果您选择在某个时候升级到virtualenvwrapper(专为这种情况而设计),您可以将该export PY...行添加到自动生成的postactivate钩子脚本中。

mkdjangovirtualenv进一步自动化了这一点,为您将适当的条目添加到 Python 路径中,但我自己还没有测试过。

于 2013-01-23T21:53:59.017 回答
18

在类 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'

于 2014-03-17T10:45:49.507 回答
6

我最喜欢的替代方法是将设置文件作为运行时参数传递manage.py给 python 包语法,例如:

python manage.py runserver --settings folder.filename

更多信息Django 文档

于 2017-03-04T14:50:58.353 回答
1

我知道有很多答案,但这一个对我有用,只是为了记录。

  1. 导航到.virtual_env所有虚拟环境所在的文件夹。
  2. 转到特定于您的项目的环境文件夹
  3. 附加export DJANGO_SETTINGS_MODULE=<django_project>.settings ,或者export DJANGO_SETTINGS_MODULE=<django_project>.settings.local如果您使用存储在设置文件夹中的单独设置文件。
于 2016-01-09T03:38:05.730 回答
0

处理此问题的另一种方法是使用 python dotenv 包,并在 .env 文件中包含 PYTHONPATH 和 DJANGO_SETTINGS_MODULE 以及其他环境变量。然后修改您的 manage.py 和 wsgi.py 以按照说明中的说明加载它们。

from dotenv import load_dotenv
load_dotenv()
于 2019-01-23T17:14:23.027 回答
0

我在 Windows 机器上工作时遇到了类似的错误。我的问题是使用了错误的调试配置。使用Python:django作为调试配置选项。首先确保您已在此处正确导出/设置 django_settings_module。

在此处输入图像描述

于 2019-12-13T09:24:11.413 回答