配置文件文档(尤其是python)是否有最佳实践?
我发现不完整的配置文件文档很常见。根本的问题似乎是,如果将文档与代码分开维护,则它们会不同步。 (由于标准做法涉及并置docstring和从函数签名/ argspec自动生成,因此API文档似乎没有什么问题。)例如,如果标准python configparser一次用于解析配置文件,则用于访问各个属性的代码(并隐式确定配置方案)仍可以散布在整个代码库中(并且可能仅在运行时可用,而不是在构建文档时可用)。
答案 0 :(得分:0)
我个人喜欢使用argparse
模块进行配置,并从环境变量中读取每个设置的默认值。这样就可以将设置和文档集中在一个地方,并且允许用户在命令行上调整设置,或者在环境变量中设置并忘记它们。不过,请谨慎在命令行上输入密码,因为其他用户可能会在进程列表中看到您的命令行参数。
这里的an example使用argparse
和环境变量:
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
来获取所有机密信息。任何用户都可以使用Environment
查看systemctl show
值。
我通常将默认值用于在其工作站上运行的开发人员,因此他们可以在不更改任何配置的情况下开始开发。
另一种选择是将配置设置放入settings.py
文件中,请注意不要将该文件提交给源代码管理。我经常提交一个settings_template.py
文件,用户可以复制。
如果您的设置非常复杂/灵活,以至于环境变量或设置文件变得混乱,那么我将使用API将项目转换为库。用户然后不用编写设置,而是编写一个调用您的API的脚本。您也不必费力在PyPI上托管您的库。例如,pip
可以从GitHub repository安装。