在python中使用exec vs import

时间:2012-12-04 18:11:08

标签: python django settings

在django中,使用local_settings.py文件来补充settings.py非常常见,这样每台机器都可以有不同的设置。通常人们会这样做。

try:
    from local_settings import *
except ImportError:
    print "No local settings found!"

但是设置文件通常包含大型列表,例如INSTALLED_APPS。如果我想添加一个应用程序,我宁愿不将整个列表复制到local_settings.py并修改它(使代码不太可读,更新settings.py不再影响任何重写的机器{ {1}})。所以我想我可以这样做:

INSTALLED_APPS

现在try: f = open('local_settings.py','r') exec f.read() except IOError: print "No local settings found!" 不再需要重写整个local_settings.py变量:

INSTALLED_APPS

我的印象是,只要您使用INSTALLED_APPS.append('debug_toolbar') exec,您可能会做错事。所以我的问题是,这有什么不对,有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

有一种更好的方法:在INSTALLED_APPS中导入local_settings.py,复制它,然后添加到副本中:

import settings

INSTALLED_APPS = settings.INSTALLED_APPS[:] + ['debug_toolbar']

答案 1 :(得分:1)

这是我的技巧:

<强> settings.py

try:
    from local_settings import *
except ImportError:
    sys.exit("FATAL: No local settings file found.")

<强> local_settings.py

import settings

settings.INSTALLED_APPS += ('django_extensions',)