在Windows中永久设置DJANGO_SETTINGS_MODULE为环境变量

9 投票
2 回答
26348 浏览
提问于 2025-04-18 03:17

我该如何在WINDOWS上永久设置环境变量DJANGO_SETTINGS_MODULE,让它一直有效呢?

我的意思是:

  1. 按下Win键 + 暂停/中断键
  2. 这会打开控制面板\系统和安全\系统
  3. 点击高级系统设置
  4. 点击环境变量
  5. 这里有两个框,第一个是用户变量,第二个是系统变量
  6. 系统变量中点击新建按钮
  7. 在变量名称中输入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 个回答

3

你说:

我只想设置一下 DJANGO_SETTINGS_MODULE 这个环境变量,之后就不想再为这个烦恼了。

如果你不想每次都经历繁琐的步骤,其实不需要把它设置成永久的,只要让这个过程自动化就可以了。

你可以创建一个批处理文件(bat),然后在里面写上 set DJANGO_SETTINGS_MODULE='xxx.settings'

如果你在使用 virtualenv,可以在 bin/activate.bat 文件里设置这个环境变量。

21

好的,别太沮丧。我们一步一步来看看这个问题:

  • 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_utilsread_file。你需要在环境变量 PYTHONPATH 中指定所有你希望解释器查找的路径。因此,为了让你的代码中有上面的导入语句,你必须确保项目 my_project 的完整路径在 PYTHONPATH 中。假设 my_projectC:\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.settingsmysite.settings 时,它们的意思是 cmsmysite 是你的项目名称,而 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

撰写回答