跳转到主要内容

类型安全的环境变量解析。

项目描述

MyENV:使用类型注解进行环境变量解析

MyENV使用类型注解解析您的环境变量。这允许您根据12factor.net/config配置您的应用程序/服务,同时保持代码类型安全。

项目/仓库

MIT License Supported Python Versions PyCalVer v201902.0007 PyPI Version PyPI Downloads

代码质量/CI

Build Status Type Checked with mypy Code Coverage Code Style: sjfmt

名称 角色 开始时间 结束时间
Manuel Barkhau (mbarkhau@gmail.com) 作者/维护者 2018-09 -

环境变量和配置

按照优先级顺序,配置从以下内容解析:

  1. 环境变量
  2. 配置文件
  3. 在源代码中定义的默认值

声明

myenv模块提供了一种方便的解析方法。就您的应用程序代码而言,只需要声明一个myenv.BaseEnv的子类。此类子类的实例从配置文件和环境填充。

import myenv


class Database(myenv.BaseEnv):

    _environ_prefix = "DATABASE_"

    vendor    : str  = "postgres"
    host      : str  = "127.0.0.1"
    port      : int  = 5432
    user      : str  = "myuser"
    password  : str
    name      : str  = "app_db_v1"

    @property
    def url(self) -> str:
        db = self
        return f"{db.vendor}://{db.user}:{db.password}@{db.host}:{db.port}/{db.name}"

对于DBEnv的每个注解成员,声明1.名称,2.类型和3.一个可选的默认变量。没有默认值的成员必须由环境变量或配置文件设置,否则将引发KeyError

解析

要使用上述配置类,只需实例化它。

# my_service/cfg.py
import sqlalchemay as sqla

db_cfg = Database()     # populated from os.environ
db_cfg.port             # 12345          (parsed from DATABASE_PORT)
db_cfg.password         # "supersecret"  (parsed from DATABASE_PASSWORD)
db_cfg.url              # "mysql://myuser:supersecret@127.0.0.1:12345/mydb"

engine = sqla.create_engine(db_cfg.url)

如果您担心Database()的实例化,它会返回一个单例实例,因此os.environ和配置文件只会被解析一次。

配置文件

在解析配置时,如果存在以下路径,则会解析。默认情况下,配置从${PWD}/config/加载,但您可以通过设置环境变量ENV_CONFIG_DIR来覆盖配置文件的路径。

  • ${ENV_CONFIG_DIR}/${ENV}.env
  • ${ENV_CONFIG_DIR}/prod.env

除非这些文件中已经设置了变量,否则这些文件中定义的任何变量都会被设置。

这种方法可以满足服务托管中的典型用例。

  1. 开发机器
  2. 测试/生产环境

您可以将特定于用例的配置文件放在项目源树中,例如

  • project/config/dev.env
  • project/config/stage.env
  • project/config/prod.env

要解析适当的配置文件,您只需设置一个环境变量ENV=<envname>即可。如果未设置ENV,则默认为ENV=prod

配置文件*.env是平文本文件,每行一个KEY=value映射。只有以全部大写字母开头的行,后面跟一个=字符的行才会被解析

# config/prod.env
DATABASE_PORT=12345
DATABASE_USER=prod_user
DATABASE_NAME=prod_db
DATABASE_PASSWORD=supersecret

对于敏感的配置参数,例如密码和身份验证令牌,您可能更喜欢将配置文件写在源树之外,或者始终且仅通过环境变量提供它们。

https://gitlab.com/mbarkhau/myenv的变更日志

v201902.0007

  • 打包更新
  • 更好的测试和mypy覆盖率

v201812.0005-beta

v201809.0001-beta

  • 初始版本

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

myenv-201902.7.tar.gz (11.0 kB 查看哈希值)

上传时间:

构建分发

myenv-201902.7-py36.py37-none-any.whl (8.6 kB 查看哈希值)

上传时间: Python 3.6 Python 3.7

支持者