用Dynaconf进行Python项目的配置管理

2021-07-01 18:27:24

使用Dynaconf进行Python 项目的配置管理

一、介绍

dyanconf是OSM(Object Settings Mapper), 能够从不同的配置数据存储方式中读取配置,例如python配置文件、系统环境变量、redis、ini文件、json文件等等。

使用参考链接:

  1. https://pypi.org/project/dynaconf/

  2. https://www.dynaconf.com/

特点

  1. 受12 要素应用指南的启发
  2. 设置管理(默认值、验证、解析、模板)
  3. 保护敏感信息(密码/令牌)
  4. 多种文件格式 toml|yaml|json|ini|py和可定制的加载程序。
  5. 完全支持环境变量以覆盖现有设置(包括 dotenv 支持)。
  6. 用于多环境的 可选分层系统[default, development, testing, production] (也称为多配置文件)
  7. 内置支持Hashicorp Vault和Redis作为设置和机密存储。
  8. Django和Flask Web 框架的内置扩展。
  9. 用于常见操作的CLI,例如init, list, write, validate, export.

二、快速使用

1、安装

  1. pip install dynaconf

2、初始化 Dynaconf

在您项目的根目录中运行dynaconf init命令。

  1. cd path/to/your/project/
  2. dynaconf init -f toml

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图1

初始化后会生成4个文件:

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图2

2、书写配置文件

在settings.toml 或 .secrets.toml 里书写项目配置。

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图3

3. 使用项目配置

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图4
可以看到项目配置被正确的加载了,dynaconf简单使用就到这里了。

三、 进阶使用 — 动态加载不同的配置

1、根据项目需要,定义自己的 toml文件

可以在项目中定义自己想要的toml文件,并且定义文件位置

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图5

配置文件内容示例:

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图6 用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图7 用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图8

2、更新 config.py

添加environments=True ,表示可以根据环境变量来加载项目配置。
用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图9

3、设置环境变量加载项目配置

  • 第一种方式: 直接在程序里配置
  1. import os
  2. # 加载dev环境
  3. os.environ['ENV_FOR_DYNACONF'] = 'development'
  1. import os
  2. # 加载prod环境
  3. os.environ['ENV_FOR_DYNACONF'] = 'production'
  1. import os
  2. # 加载test环境
  3. os.environ['ENV_FOR_DYNACONF'] = 'test'

效果如下:
用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图10

  • 第二种方式:在pycharm里配置
    1.点击 Edit Configurations
    用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图11

用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图12

  1. 用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图13

保存好就配置完成了。

效果如下:
用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图14

  • 第三种方式:在Dockerfile里配置
    如果使用docker部署,可以在Dockerfile里配置环境变量
    用Dynaconf进行Python项目的配置管理_dynaconf 使用 - 图15

现在我们就可以根据不同的环境变量动态加载项目配置了。