Django 如何在sys.path中手动添加生产设置以运行syncdb?

Django 如何在sys.path中手动添加生产设置以运行syncdb?,django,Django,在生产服务器上,我想同步数据库 如果我这么做了 django-admin.py syncdb它将选择settings.py。但是我有一个额外的settings-production.py,它继承了settings中的cs 因此,我提出了以下建议: django-admin.py syncdb --settings=/path/to/settings_production 导入错误:无法导入设置 “/path/to/settings_production”(是否打开 sys.path?:不支持按

在生产服务器上,我想同步数据库

如果我这么做了

django-admin.py syncdb
它将选择settings.py。但是我有一个额外的settings-production.py,它继承了settings中的cs

因此,我提出了以下建议:

django-admin.py syncdb --settings=/path/to/settings_production
导入错误:无法导入设置 “/path/to/settings_production”(是否打开 sys.path?:不支持按文件名导入

我在谷歌上搜索,发现有人有类似的问题。然而,让我困惑的是,WSGI.py仅由Apache读取。如果我亲自执行命令就不会了。那里的答案对我来说真的没有意义

如何在sys.path中手动添加生产设置以运行syncdb? 非常感谢,

首先确保
settings\u production.py
settings.py
位于同一目录中

由于您是从设置继承的,因此可以在
settings.py
的底部添加:

try:
   from settings_production import *
except ImportError:
   pass
如果只想使用
settings\u production.py
请确保它具有应用程序(数据库等)的所有设置,然后:

DJANGO\u SETTINGS\u MODULE=SETTINGS\u production python manage.py syncdb

编辑

我本来打算把它作为一条评论发布,但它太长了:

我这样做是因为通常在生产环境中,one只更改可以在master
settings.py中导入的几个值;并且使用变量的最后一个值(因此,如果在
设置\u production.py
中设置生产数据库,则使用该设置)

这种方法更简单,因为django默认情况下会查找
settings.py
;避免处理环境变量和导入路径,尤其是在更改次要内容时

这种方法有一些缺点;例如,我无法想象它的可移植性,特别是如果您有多个环境(staging/testing/production/dev),那么您有多个
from\u foo\u import*
语句,并且由于导入顺序变得重要,因此可能会导致问题;如果您忘记并保留了一个零散的
settings.*.py
文件,例如,测试环境也获得了dev文件,因为一些开发人员忘记将其从测试分支中删除

对于更复杂的设置,更容易保存主
settings.py
文件的完整副本;然后将
DJANGO\u SETTINGS\u MODULE
指向这些文件的python路径。这里需要注意的是,您必须确保调整了
PYTHONPATH
,以包括设置的位置

有关更多想法,请参阅。

谢谢Burhan,根据“为生产使用不同设置”下的说明,正是设置_Production.py从设置导入
从设置导入*您似乎用另一种方式导入,不是吗?