.py配置文件与后备数据?

时间:2016-09-12 16:46:03

标签: python python-3.x settings

我的项目中有一个settings.py文件:

"Nickname of the user to check the games for"
USERNAME = "user"

不幸的是,每次升级都会被覆盖。因此,我想允许用户通过创建.py文件$XDG_CONFIG_HOME/myapp/config.py来覆盖默认设置,例如包含

USERNAME = "real-user"

是否可以修改settings.py以便以通用方式从.../config.py文件中删除任何变量,例如在config.py末尾包含此文件?

我正在使用Python 3

1 个答案:

答案 0 :(得分:1)

我假设您从settings.py文件中获取值的方式是import

import settings

print(settings.USERNAME)

然后你可以通过在最后添加这样的东西来改变它,这将做你想要的。

settings.py

"Nickname of the user to check the games for"
USERNAME = "user"

def _read_overrides(filename):
    localdict = {}  # populated by exec
    try:
        with open(filename) as file:
            exec(compile(file.read(), filename, 'exec'),
                 {'__builtins__': None}, localdict)
    except FileNotFoundError:
        pass

    return localdict

for key, value in _read_overrides('config.py').items():
    globals()[key] = value

然后在import之后,print(settings.USERNAME)将显示:

real-user

另请注意,config.py覆盖文件可以命名为任何内容(它不需要.py扩展名。)