为开发和生产修改 manage.py

Modifying manage.py for development and production

我的项目有一个 base.py、一个 dev.py 和一个 production.py(不言自明)。

在我的电脑上我只保留 dev.pybase.py 而在服务器上我只保留 production.pybase.py.

虽然 WSGI 不是问题,但我确实发现自己总是在每次部署后进入 manage.py 以更改 os.environ.setdefault() 设置。

我想改变这个:

from __future__ import absolute_import, unicode_literals

import os
import sys

if __name__ == "__main__":
    try:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev") #or project.settings.production

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

对此:

from __future__ import absolute_import, unicode_literals

import os
import sys

if __name__ == "__main__":
    try:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")
    except:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.production")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

然而,这仍然引发了 ImportError。任何想法为什么?或者您知道更好的方法吗?

控制它的一个好方法是在要使用 manage.py 的 shell 中使用 DJANGO_SETTINGS_MODULE 环境变量。 默认 manage.py 不必更改:

#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

至于ImportError, 我不确定我们是否有足够的信息来调试它。 但基本上你需要确保该文件可以从当前工作目录访问, 或来自 PYTHONPATH 上的目录。 例如,如果您从项目的根目录 运行 manage.py, 并且 project/settings/dev.py 存在,那么值 "project.settings.dev" 应该有效。