基于ongolang的spf13/viper的简单python3配置库

gila的Python项目详细描述


吉拉

Gila是一个python3分层配置库,主要基于Go的viper配置库。它的设计是为了方便使用python3使12 factor应用程序尽可能简单。在

动机

在Go中使用了Viper配置库之后,我非常习惯它提供的易用性和灵活性。在寻找了一个在python项目中使用的库之后,我找不到一个结合了Viper支持的所有非常有用的特性的库。在

特点

  • 允许为每个配置键设置默认值
  • 在多个路径上自动查找配置文件
  • 自动加载具有特定前缀的环境变量
  • 支持最流行的配置语言:yaml, toml, json, properties files, hcl, dotenv
  • 单例模式可在大多数应用程序中易于使用
  • 非歧义结果的分层加载。在

安装

需要python 3.6+

pip install gila

简单的例子

更多示例可以在examples目录中找到

importgilafromosimportenviron# Setting default values for keysgila.set_default('host','localhost:8080')gila.set_default('allow_insecure',False)# This will tell Gila to automatically load in ENV vars that start with GILAgila.set_env_prefix('GILA')gila.automatic_env()# This would normally be done outside of program# eg. in docker compose or k8s manifestenviron['GILA_HOST']='localhost:9999'# This is the preferred method of grabbing# the configurations. Other methods exist (all_config, debug)# but this method is the most performant for single# value calls.host=gila.get('host')allow_insecure=gila.get('allow_insecure')"""Output:Host: localhost:9999Insecure allowed: false"""print(f'Host: {host}')print(f'Insecure allowed: {allow_insecure}')

支持的配置文件类型

  • yaml(.yaml, .yml
  • json(.json
  • toml(.toml
  • 盐酸(.hcl
  • 环境变量
    • 值将转换为字符串
    • 键被转换为小写:ENV\u VAR->;gila.get('env_var')
  • 属性文件(.properties, .prop, .props
    • 值将转换为字符串
  • dotenv(.env
    • 值将转换为字符串
    • 不支持嵌套值

其他帮助

请查看我们在ReadTheDocs上的文档,或者如果您喜欢最小的工作示例,请查看目录<;/examples/>;,该目录包含了从简单配置到更复杂配置的大量用例。在

学分

史蒂夫·弗朗西娅spf13创建毒蛇库

pyyamlpyhcl和{a7}包的作者,如果没有这些包,Gila将很难创建和维护

与毒蛇的主要区别

  • 区分大小写-Gila中的所有键都区分大小写,这允许适当的json、yaml和toml支持。除非手动绑定,否则ENV键不区分大小写。在
  • 不支持远程配置-虽然我认为支持conver和etcd是一个非常好的特性,但我认为此时此刻它是一个属于单独库的特性。在
  • 不支持命令标志-Viper非常依赖命令标志的Cobra伙伴关系。您应该选择自己风格的CLI解析器(docopts、argparse等)并将其与这个库配对(查看我们的示例)。在
  • 观察配置文件中的变化-我非常想添加这个特性,但是我觉得在v1.0.0上没有必要添加这个特性。如果您想要这个特性,您可以竖起拇指the issue,或者打开一个带有实现的PR。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用安卓中不同Java类中声明的变量   java Paypal重新授权失败DCC\u不允许重新授权\u   java删除Nattable中的行号   Java扫描器在循环时数据类型验证中输入错误后未读取换行符   java如何使用jsoup计算div的数量?   java嵌套这样的try/finally子句安全吗?   Java中的安卓格式浮点数(#.#.#.#.#)   java为什么maven总是指向JRE的较低版本   Java中的对象GUI网格   具有中心值和基于值的背景的java单元格   在java中,如何检查布尔值是否存在介于两个数字之间的数字?   等于Java 1.7对hashCode()的重写,其行为不符合我的预期   java使用来自Netbeans的JDBC资源和servlet