在现代软件开发中,环境变量扮演着至关重要的角色。然而,手动设置环境变量往往繁琐且容易出错。Python-dotenv 应运而生,它提供了一种简洁且高效的方式来管理环境变量,为你的开发之旅增添一抹优雅。
简介
Python-dotenv 是一个轻量级 Python 库,它允许你在 .env
文件中定义环境变量,并将其加载到你的 Python 应用程序中。使用 Python-dotenv 可以简化开发过程,避免直接修改系统环境变量,并轻松实现不同环境下的配置管理。
入门
1. 安装
使用 pip 安装 Python-dotenv:
pip install python-dotenv
2. 创建 .env
文件
在你的项目根目录下创建一个名为 .env
的文件,并在其中以键值对的形式定义环境变量。示例:
# 开发环境设置
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app
3. 加载环境变量
在你的 Python 代码中导入 load_dotenv
函数并调用它来加载 .env
文件中的环境变量:
from dotenv import load_dotenv
load_dotenv() # 加载 .env 文件中的环境变量
# 你的代码可以访问环境变量
print(os.environ.get("DOMAIN")) # 输出:example.org
print(os.environ.get("ADMIN_EMAIL")) # 输出:admin@example.org
其他用例
1. 无需修改环境变量加载配置
使用 dotenv_values
函数,可以获取 .env
文件中的所有环境变量,而不会修改系统环境变量:
from dotenv import dotenv_values
config = dotenv_values(".env") # 获取 .env 文件中的环境变量
print(config) # 输出:{'DOMAIN': 'example.org', 'ADMIN_EMAIL': 'admin@example.org', 'ROOT_URL': 'example.org/app'}
2. 解析配置流
load_dotenv
和 dotenv_values
函数都接受 stream
参数,允许从其他来源(例如网络)加载配置信息:
from io import StringIO
from dotenv import load_dotenv
config = StringIO("USER=foo\
EMAIL=foo@example.org")
load_dotenv(stream=config)
3. 在 IPython 中加载 .env
文件
在 IPython 中,可以使用 %load_ext dotenv
和 %dotenv
命令加载 .env
文件:
%load_ext dotenv
%dotenv
命令行界面
Python-dotenv 提供了一个命令行界面,方便你管理 .env
文件:
$ pip install "python-dotenv[cli]"
# 设置环境变量
$ dotenv set USER foo
$ dotenv set EMAIL foo@example.org
# 列出环境变量
$ dotenv list
USER=foo
EMAIL=foo@example.org
# 以 JSON 格式输出环境变量
$ dotenv list --format=json
{
"USER":"foo",
"EMAIL":"foo@example.org"
}
# 运行带有环境变量的脚本
$ dotenv run -- python foo.py
文件格式
.env
文件的格式类似于 Bash 文件,支持以下特性:
• 键可以不加引号或单引号,值可以不加引号、单引号或双引号。
• 键、等号和值前后的空格会被忽略。
• 值可以包含注释。
• 行可以以
export
指令开头,但这不会影响解析。
多行值
可以使用单引号或双引号将值跨多行:
FOO="first line
second line"
变量扩展
Python-dotenv 支持使用 POSIX 变量扩展进行变量插值:
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
总结
Python-dotenv 简化了环境变量管理,让你的开发过程更加轻松和高效。它遵循12要素应用原则,并提供灵活的配置方式,是 Python 开发者必备的工具之一。
项目地址:https://github.com/theskumar/python-dotenv