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

bd1hkmkf  于 2023-03-31  发布在  Go
关注(0)|答案(8)|浏览(135)

我在为我的Django项目设置Django_SETTINGS_MODULE时遇到了一些问题。
我在~/dev/django-project有一个目录。在这个目录中,我有一个虚拟环境,我用virtualenv设置了它,还有一个名为“开花”的django项目,里面有一个名为“onora”的应用程序。从~/dev/django-project/运行tree -L 3显示了以下内容:

.
├── 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.

我在Google上搜索了一下,找到了这个页面: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?这应该如何工作?
谢谢。

lmyy7pcs

lmyy7pcs1#

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

qco9c6ql

qco9c6ql2#

我只是遇到了同样的错误,最终设法弄清楚了发生了什么(最大的线索是ImportError中的(Is it on sys.path?))。
您需要将项目目录添加到PYTHONPATH-这就是文档中所指的
注意,设置模块应该在Python导入搜索路径上。
为此,请运行

$ export PYTHONPATH=$PYTHONPATH:$PWD

在运行django-admin.py之前,从~/dev/django-project目录中。
您可以将此命令(将$PWD替换为项目的实际路径,* 即 * ~/dev/django-project)添加到virtualenv的source脚本中。如果您选择在某个时候升级到virtualenvwrapper(专为这种情况设计),则可以将export PY...行添加到自动生成的postactivate钩子脚本中。
mkdjangovirtualenv进一步自动化了这一点,为您添加了适当的条目到Python路径中,但我自己还没有测试过它。

1rhkuytd

1rhkuytd3#

在类unix的机器上,你可以简单地给virtualenv设置如下的别名,并使用alias而不是每次都输入:
.巴什尔c
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'

bbuxkriu

bbuxkriu4#

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

python manage.py runserver --settings folder.filename

更多信息django docs

qv7cva1a

qv7cva1a5#

我知道有很多答案,但这个对我很有效,只是为了记录在案。
1.导航到所有虚拟环境所在的.virtual_env文件夹。
1.转到特定于项目的环境文件夹
1.如果您使用的是存储在设置文件夹中的单独设置文件,请附加export DJANGO_SETTINGS_MODULE=<django_project>.settingsexport DJANGO_SETTINGS_MODULE=<django_project>.settings.local

mcdcgff0

mcdcgff06#

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

from dotenv import load_dotenv
load_dotenv()
xytpbqjk

xytpbqjk7#

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

l5tcr1uw

l5tcr1uw8#

我遇到了这个问题时,改变了我的virtualenv环境(愚蠢的想法,顺便说一句)。我试图设置DJANGO_SETTINGS_MODULE和它不工作。我的修复,而不是启动我的服务器:

django-admin runserver

我现在用这个命令运行我的服务器:

python manage.py runserver

无需其他更改!

相关问题