将您的配置设置提交到源代码管理通常是个坏主意,尤其是当这些设置包含密码或其他机密时。我更喜欢使用环境变量将这些值传递给程序。我发现最灵活的方法是使用argparse 模块,并使用环境变量作为默认值。这样,您可以在命令行上覆盖环境变量。不过,在命令行中输入密码时要小心,因为其他用户可能会在进程列表中看到您的命令行参数。
这是使用argparse 和环境变量的an example:
def parse_args(argv=None):
parser = ArgumentParser(description='Watch the raw data folder for new runs.',
formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument(
'--kive_server',
default=os.environ.get('MICALL_KIVE_SERVER', 'http://localhost:8000'),
help='server to send runs to')
parser.add_argument(
'--kive_user',
default=os.environ.get('MICALL_KIVE_USER', 'kive'),
help='user name for Kive server')
parser.add_argument(
'--kive_password',
default=SUPPRESS,
help='password for Kive server (default not shown)')
args = parser.parse_args(argv)
if not hasattr(args, 'kive_password'):
args.kive_password = os.environ.get('MICALL_KIVE_PASSWORD', 'kive')
return args
设置这些环境变量可能有点混乱,尤其是对于系统服务。如果您使用的是 systemd,请查看 service unit,并小心使用 EnvironmentFile 而不是 Environment 来获取任何秘密。任何使用systemctl show 的用户都可以查看Environment 值。
我通常使默认值对在他们的工作站上运行的开发人员有用,这样他们就可以在不更改任何配置的情况下开始开发。
另一种选择是将配置设置放在settings.py 文件中,并注意不要将该文件提交到源代码管理。我经常提交用户可以复制的settings_template.py 文件。