Python 为开发和生产修改manage.py

Python 为开发和生产修改manage.py,python,django,deployment,django-manage.py,Python,Django,Deployment,Django Manage.py,我的项目有一个base.py、一个dev.py和一个production.py(非常简单) 在我的PC上,我只保留dev.py和base.py,在服务器上,我只保留production.py和base.py 虽然WSGI不是一个问题,但我发现自己在每次部署后都必须进入manage.py,以更改os.environ.setdefault()设置 我想改变这一点: from __future__ import absolute_import, unicode_literals import os

我的项目有一个
base.py
、一个
dev.py
和一个
production.py
(非常简单)

在我的PC上,我只保留
dev.py
base.py
,在服务器上,我只保留
production.py
base.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\u SETTINGS\u模块
环境变量。 默认的
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)
至于
导入程序
, 我不确定我们是否有足够的信息来调试它。 但基本上,您需要确保文件可以从当前工作目录访问, 或者从
PYTHONPATH
上的目录。 例如,如果从项目的根目录运行
manage.py
, 并且
project/settings/dev.py
存在,那么值“project.settings.dev”应该起作用