在Windows中永久设置DJANGO_SETTINGS_MODULE为环境变量
我该如何在WINDOWS
上永久设置环境变量DJANGO_SETTINGS_MODULE
,让它一直有效呢?
我的意思是:
- 按下
Win键
+暂停/中断键
- 这会打开
控制面板\系统和安全\系统
- 点击
高级系统设置
- 点击
环境变量
- 这里有两个框,第一个是
用户变量
,第二个是系统变量
- 在
系统变量
中点击新建按钮
- 在变量名称中输入
DJANGO_IMPORT_SETTINGS
XXX--> 我在变量值中该填什么才能一次性设置好呢?
在Django网站的这个问题中提到:
DJANGO_SETTINGS_MODULE
使用Django时,你需要告诉它你正在使用哪些设置。通过使用环境变量DJANGO_SETTINGS_MODULE来做到这一点。
DJANGO_SETTINGS_MODULE的值应该是Python路径语法,例如mysite.settings。注意,设置模块应该在Python的导入搜索路径中。
这里说的...应该是Python路径语法,例如mysite.settings...是什么意思呢?
- 我有一个目录是我的
Python
所在的地方:C:\Python27
- 我有一个目录是我的
Django
所在的地方:C:\Python27\Lib\site-packages\django
那这个mysite
是什么意思?它指的是哪个目录C:\Something......
?
这个变量能一次性设置好,还是每个项目都得改一次(希望不是!)
还有这句看起来有点可疑的话注意,设置模块应该在Python的导入搜索路径中。是什么意思呢?
我只想设置好DJANGO_SETTINGS_MODULE这个环境变量,免去这些麻烦。
编辑
为了正常工作,Django只需要指向一个有效的设置文件,默认情况下它会查找名为DJANGO_SETTINGS_MODULE的环境变量来告诉它在哪里找到设置。这个变量的值应该是设置文件的Python导入路径,比如cms.settings。
--> 这个目录cms.settings
是什么样的?在Windows中,每个目录都是以硬盘开头的,比如C:\Something.....。那在Windows中怎么能以这样的方式开始一个目录呢?
编辑_2
摘自一本书
问题
环境变量DJANGO_SETTINGS_MODULE未定义。
解决方案
运行命令python manage.py shell
而不是python
。
我的问题 --> 在哪个目录下?///这个变量能一次性设置好,还是每个项目都不一样?
我的项目结构是这样的:
C:\Python27\pysec-master(file)
|__local_settings.py
|__manage.py
|__settings.py
|__C:\Python27\pysec(file)
|__ __init__.py
|__example.py
|__models.py
|__xbrl.py
|__xbrl_fundamentals.py
我正在运行models.py
,而且在C:\Python27\pysec-master
中有一个settings.py
。你可以在这里找到一个完整的副本。
可能重要的编辑
我在我的项目中有一个名为manage.py
的文件,内容如下:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
这和设置变量有什么关系吗?我需要在这里的循环中设置吗?
编辑
在IDLE中输入命令from django.db import settings
时,我需要为PYTHON_MODULE_SETTINGS
设置一个目录,比如C:\Python27\Lib\site-packages\django\db
吗?
2 个回答
你说:
我只想设置一下 DJANGO_SETTINGS_MODULE 这个环境变量,之后就不想再为这个烦恼了。
如果你不想每次都经历繁琐的步骤,其实不需要把它设置成永久的,只要让这个过程自动化就可以了。
你可以创建一个批处理文件(bat),然后在里面写上 set DJANGO_SETTINGS_MODULE='xxx.settings'
。
如果你在使用 virtualenv,可以在 bin/activate.bat 文件里设置这个环境变量。
好的,别太沮丧。我们一步一步来看看这个问题:
Python路径语法:
在Python中,当你把代码分散到不同的模块时,你需要在导入时加上模块的名字。假设你的项目结构是这样的:
my_project |__utils | |____init__.py | |__file_utils.py |__my_module |____init__.py |__main.py
在你的
main.py
文件中,如果你想使用在file_utils.py
中定义的方法,你需要在main.py
中添加一个导入语句,像这样:import utils.file_utils.read_file
假设
read_file
是你想导入到main.py
的方法。用这种方式导入模块,每个模块之间用.
分隔,这种方式就叫做Python路径语法。PYTHONPATH:
在上面的例子中,导入语句只有在Python解释器知道去哪里找第一个模块(也就是
utils
)时才会有效。只有找到utils
,它才能找到file_utils
和read_file
。你需要在环境变量PYTHONPATH
中指定所有你希望解释器查找的路径。因此,为了让你的代码中有上面的导入语句,你必须确保项目my_project
的完整路径在PYTHONPATH
中。假设my_project
在C:\AMAZEBALLS_CODE\my_project
,你应该在PYTHONPATH
中添加C:\AMAZEBALLS_CODE
。DJANGO_SETTINGS_MODULE:
现在假设你的
my_project
实际上是一个Django应用。Django应用需要一个设置文件,在那里你可以指定一大堆东西。为了告诉Django去哪个设置文件,你需要在DJANGO_SETTINGS_MODULE
中指定它。假设这是你的项目结构:my_project |__utils/ | |____init__.py | |__file_utils.py |__my_module/ | |____init__.py | |__main.py |__site_settings/ |__dev_settings.py |__production_settings.py
myproject.site_settings
是Django需要查找的设置文件模块。而myproject.site_settings.dev_settings
是你需要在上面提到的DJANGO_SETTINGS_MODULE
中设置的值。当文档中提到cms.settings
或mysite.settings
时,它们的意思是cms
或mysite
是你的项目名称,而settings.py
是你的设置文件的名称。
现在我们来看你的问题:
你能把它永久设置在Windows的环境变量中吗?当然可以。
这样做对吗?不对。
因为如果你明天想在另一个地方创建另一个应用,你就得在Windows的环境变量中重新编辑这个设置。而且,通常在开发环境和生产环境中使用不同的设置文件是个好习惯。所以在一个地方设置一个值会让它变得不灵活。但如果你了解以上所有内容,并且确定只会使用一个设置文件,那么可以在环境变量中把 DJANGO_SETTINGS_MODULE
设置为 myproject.site_settings.dev_settings
。
希望这能帮到你!
编辑:
看起来你把 pysec-master
项目放在了 C:\Python27
中。不要把项目放在Python安装目录下。请在你的项目中创建一个 settings.py
文件,并将 DJANGO_SETTINGS_MODULE
设置为 pysec-master.settings
。