从文件或环境加载配置变量

goodconf的Python项目详细描述


https://img.shields.io/travis/lincolnloop/goodconf.svghttps://img.shields.io/codecov/c/github/lincolnloop/goodconf.svghttps://img.shields.io/pypi/v/goodconf.svghttps://img.shields.io/pypi/pyversions/goodconf.svg

定义配置变量并从环境或json/yaml加载它们 文件。还为您的 定义的配置。

安装

pip install goodconfpip install goodconf[yaml]如果 需要分析/生成yaml文件。

快速启动

以可配置的django设置为例。

首先,在项目目录中,在 settings.py

importbase64importosfromgoodconfimportGoodConf,ValueclassConfig(GoodConf):"Configuration for My App"DEBUG=Value(default=False,help="Toggle debugging.")DATABASE_URL=Value(default='postgres://localhost:5432/mydb',help="Database connection.")SECRET_KEY=Value(initial=lambda:base64.b64encode(os.urandom(60)).decode(),help="Used for cryptographic signing. ""https://docs.djangoproject.com/en/2.0/ref/settings/#secret-key")

接下来,使用settings.py文件中的配置:

importosimportdj_database_urlfrom.confimportConfigBASE_DIR=os.path.dirname(os.path.dirname(__file__))config=Config(default_files=["/etc/myproject/myproject.yaml",os.path.join(BASE_DIR,"myproject.yaml"),]).load()DEBUG=config.DEBUGSECRET_KEY=config.SECRET_KEYDATABASES={"default":dj_database_url.parse(config.DATABASE_URL)}

在最初的开发人员安装说明中,提供一些建议,例如:

python -c "import myproject; print(myproject.config.generate_yaml(DEBUG=True))" > myproject.yaml

用法

GoodConf

您的子类GoodConf对象可以用以下方法初始化 关键字参数:

file_env_var
可用于 要加载的配置文件的名称。
default_files
如果没有文件传递给load方法,请尝试加载 按顺序配置这些文件。
load
在实例化期间触发加载方法。默认为false。

生成配置时使用纯文本docstring作为标题 文件。

Value

通过子类化GoodConf和定义类来声明配置值 属性是Value实例。它们可以用 以下关键字参数:

default
如果未提供默认值。如果未设置,加载 未能提供此值的配置将引发接受 RequiredValueMissing异常。
initial
生成配置时要使用的初始值
cast_as
要将变量强制转换为的python类型。默认为默认类型 (如有)或街道
help
值的纯文本描述。

django用法

提供了一个助手,monkey将django的管理命令修补到 接受一个--config参数。将manage.py替换为以下内容:

# Define your GoodConf in `myproject/__init__.py`frommyprojectimportconfigif__name__=='__main__':config.django_manage()

为什么?

我从logan(使用 哨兵)和derpconf(由 拇指)。不过,两者都使用python文件进行配置。我想要一个更安全的 一种更容易从配置中序列化数据的格式 管理系统。

环境变量

我不喜欢处理环境变量。首先,有潜力 安全问题:

  1. 通过日志或错误报告服务意外泄漏。
  2. 子进程继承(请参见ImageTragick 想知道为什么会这样。

其次,在部署环境的实践中,环境变量最终会 写入许多文件(cron、bash profile、服务定义, web服务器配置等)。它不仅麻烦,而且增加了 可能通过不正确的文件权限泄漏。

我更喜欢由应用程序显式读取的单个结构化文件。 我也希望在像heroku这样的服务上运行我的应用程序很容易 其中环境变量是首选配置方法。

这个模块让我在我控制的环境中按自己喜欢的方式做事,但是 仍然在我无法控制的环境中使用环境变量运行它们 小题大做。

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

推荐PyPI第三方库


热门话题
java Hibernate会话/模板返回null   java Bluetooth无法连接到OBD2   smartGWT中的行分隔符的java等价物?   java如何删除可执行路径错误   java使用ICE Tar库对大文件进行Tar   java Spring Boot/JavaFX:添加一个仍然可以访问JPA的关机挂钩(ctrlc)   使用输入流读取java属性文件   如何在Java中迭代HashSet元素时覆盖该元素   内容类型中的javascript set charset=“utf8”   使用cassandra触发器的java   用户界面什么是适合我的GUI(JAVA)的update()方法   Java实例控制   java前置摄像头无法在不同设备上工作   java方法组织。postgresql。jdbc。连接。createClob()尚未实现