使用pydantic在Python中读取环境变量非常方便
当你实施应用程序时,处理环境变量有点麻烦,不是吗?
当使用Python进行实现时,可以使用名为pydantic的库来轻松实现设置默认值、将值转换为整数类型以及从.env文件中读取值等操作。本文将介绍这些操作的示例代码。
顺便说一句,pydantic这个库不仅仅是用来读取环境变量的,它是一个可以通过类型注解来定义类的库,而且还可以将JSON格式的数据转换为类并进行验证。如果您想了解更多关于其他功能的信息,请阅读下一篇文章。
Pydantic 的基礎介紹
读取环境变量
假设设置了以下环境变量。
# bash形式
export REDIS_HOST_NAME=localhost
export REDIS_PORT=6379
如果使用pydantic,可以通过以下代码进行读取。
from pydantic import BaseSettings
class Settings(BaseSettings):
redis_host_name: str
redis_port: int
settings = Settings()
print(settings.redis_host_name)
# => localhost
print(settings.redis_port)
# => 6379
print(type(settings.redis_port))
# => <class 'int'>
如果环境变量未设置或类型转换失败,则会报告验证错误。
pydantic.error_wrappers.ValidationError: 1 validation error for Settings
redis_port
value is not a valid integer (type=type_error.integer)
使用dotenv
为了简化设置环境变量的过程,可以使用名为.env的文件格式。虽然这是关于node.js的文章,但我认为这篇文章很容易理解。
使用 .env 文件代替环境变量 (dotenv)。
首先,您需要使用 pip install python-dotenv 或者 pip install pydantic[dotenv] 命令安装 python-dotenv 包。
假设有一个如下的 .env 文件,
REDIS_HOST_NAME=localhost
REDIS_PORT=6379
以下的代码可以用来读取。
from pydantic import BaseSettings
class Settings(BaseSettings):
redis_host_name: str
redis_port: int
class Config:
env_file = '.env'
settings = Settings()
更多详细功能
我认为我已经介绍了一些在日常开发中常用的环境变量相关的便利功能。如果你想进一步了解,可以阅读官方文档中相关部分。
设置管理 – pydantic