如何为我的Django项目正确设置DJANGO_SETTINGS_MODULE(我使用的是virtualenv)?

时间:2012-01-11 20:59:25

标签: django django-settings

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

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

根据Setting DJANGO_SETTINGS_MODULE under virtualenv?的建议,我添加了行

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

感谢。

7 个答案:

答案 0 :(得分:48)

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

答案 1 :(得分:21)

我刚遇到同样的错误,最终设法解决了发生的事情((Is it on sys.path?)中的大线索ImportError)。

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

  

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

为此,请运行

$ export PYTHONPATH=$PYTHONPATH:$PWD
在运行~/dev/django-project之前,从django-admin.py目录

您可以添加此命令(将$PWD替换为项目的实际路径, ~/dev/django-project)到virtualenv的source脚本。如果您选择在某个时间点(适用于此类情况)前进到virtualenvwrapper,则可以将export PY...行添加到自动生成的postactivate挂钩脚本中。

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

答案 2 :(得分:12)

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

答案 3 :(得分:0)

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

  1. 导航到所有虚拟环境所在的.virtual_env文件夹。
  2. 转到特定于项目的环境文件夹
  3. 追加export DJANGO_SETTINGS_MODULE=<django_project>.settings 如果您使用存储在设置文件夹中的单独设置文件,则为export DJANGO_SETTINGS_MODULE=<django_project>.settings.local

答案 4 :(得分:0)

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

python manage.py runserver --settings folder.filename

更多信息django docs

答案 5 :(得分:0)

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

from dotenv import load_dotenv
load_dotenv()

答案 6 :(得分:0)

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

enter image description here