带有后备数据的 .py 配置文件?
.py config file with fallback data?
我的项目中有一个 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
我假设您从 settings.py
文件中获取值的方式是 import
ing 它:
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
ed 之后,print(settings.USERNAME)
将显示:
real-user
另请注意,config.py
覆盖文件可以任意命名(它不需要 .py
扩展名)。
我的项目中有一个 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
我假设您从 settings.py
文件中获取值的方式是 import
ing 它:
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
ed 之后,print(settings.USERNAME)
将显示:
real-user
另请注意,config.py
覆盖文件可以任意命名(它不需要 .py
扩展名)。