在我编写的一些 Django 应用程序中,我使用了一个 settings_local.py
文件来覆盖在不同环境(例如开发、测试和生产)中不同的设置。我最初使用了以下代码将其内容包含在 settings.py
中:
try:
from settings_local import *
except ImportError:
sys.stderr.write("The settings_local.py file is missing.\n")
DEBUG=False
最近我发现了execfile
函数,并转而使用以下代码:
try:
execfile(path.join(PROJECT_ROOT, "settings_local.py"))
except IOError:
sys.stderr.write("The settings_local.py file is missing.\n"
DEBUG=False
两种方法都能正常工作,但我想知道是否有什么需要注意的点,以及一般来说哪种方法更推荐,为什么。
__file__
可以通过参数轻松提供。主要区别在于,无论执行多少次import module
,模块只被导入一次(每次调用exec
时都会执行文件),而import
不需要显式指定文件路径(因此它也可以在 zip 归档文件中工作)。 - jfssys.modules
缓存以避免重新导入已经被导入的模块。 - asmeurer