我在为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
?这应该如何运作?
感谢。
答案 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)
我知道有很多答案,但是这个答案对我来说只是为了记录。
.virtual_env
文件夹。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.