环境变量应用
环境变量
在开发的过程中我们经常会需要设置环境变量,特别是在 Linux 的系统下的时候,更是需要在 shell 脚本中也用到相关的环境变量,开源项目中很多关于环境变量的设置使用的都是.env文件;
1. 文件介绍
.env 文件是用于存储环境变量的配置文件,通常用于在项目中管理敏感信息(如:API 秘钥、数据库密码)或不同运行环境(开发、测试、生产)的配置差异,通过配置与代码分离,.env文件能够提高安全性和灵活性。
-
作用:
- 存储项目的环境变量,避免将敏感信息硬编码到代码中。
- 支持不同环境(开发、生产)的配置切换,无需修改代码。
- 简化团队协作,开发者可以基于自己的
.env文件独立配置。
-
语法规则
- 每行定义一个键值对,格式为
KEY=value - 注释用
#表示 - 值可以包裹在双引号中(处理特殊字符或空格),例如
SECRET_KEY="my secret" - 支持多行值(使用三引号或转义字符
\),支持常见的转义序列如\n、\t等 - 变量可以相互引用,如
DOMAIN=example.com和URL=https://${DOMAIN}
- 每行定义一个键值对,格式为
-
环境变量命名约定
-
全部使用大写字母:
DATABASE_NAME -
使用下划线分割:
MYSQL_USERNAME -
使用前缀区分应用:
MYAPP_DATABASE_URL -
使用前缀或者文件区分环境:
前缀:DEV_API_URL、PROD_API_URL、TEST_API_URL
文件:env.dev 、.env.prod、.env.test
目录区分:test/.env 、dev/.env 、prod/.env
-
布尔值命名标准:
IS_DEBUG、HAS_CACHE、ENABLE_FEATURE
-
-
示例
# 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_USER=admin DB_PASSWORD=secret123 DEBUG=True
2. 环境变量设置方式
| 设置方式 | 语法示例 | 生效范围 | 持久性 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|---|
| .env 文件 | DB_HOST=localhost | 项目级 | 项目运行的时候 | 易于版本控制 支持注释和文档 支持复杂值格式 方便环境切换 |
需要额外库支持 仅对特定应用有效 需注意文件安全 |
开发环境 团队协作项目 |
| Windows SET | SET DB_HOST=localhost | 当前命令行 | 会话期间 | 简单直接 无需依赖 立即生效 |
窗口关闭不生效 不支持复杂格式 难以批量管理 |
临时测试 快速验证 |
| Windows SETX | SETX DB_HOST "localhost" | 系统级 | 永久 | 永久保存 立即生效 无需依赖 |
需要重启生效 长度限制1024字符 可能需要管理员权限 |
系统级配置 全局设置 |
| Linux export | export DB_HOST=localhost | 当前 shell | 会话期间 | 简单直接 立即生效 可用于脚本 |
会话结束失效 不支持复杂格式 无注释功能 |
临时测试 shell脚本 |
| linux environment | DB_HOST=localhost | 系统级 | 永久 | 系统级永久 全局有效 所有用户可用 |
需重新登录 需root权限 格式简单 |
系统级配置 多用户环境 |
| Docker env | ENV DB_HOST=localhost或docker run -e DB_HOST=localhost |
容器级 | 容器生命周期 | 容器级隔离 支持运行时覆盖 适合容器部署 |
仅用于Docker 注意镜像安全 批量管理繁琐 |
容器化部署 微服务架构 |
场景选择建议
| 使用场景 | 推荐方式 | 原因 |
|---|---|---|
| 开发环境 | .env 文件 | 便于团队协作,环境一致性管理 |
| 生产环境 | Docker环境变量 (容器化) 系统环境变量 (传统部署) 云平台环境变量 |
根据部署方式选择最适合的方案 |
| 临时测试 | SET/export 命令 | 简单快速,即用即弃 |
| CI/CD环境 | CI/CD平台环境变量 | 安全性好,便于管理 |
3. Python 环境变量加载
# 依赖第三方库
pip install python-dotenv
简单测试
import os
from dotenv import load_dotenv
# 加载当前路径下的 .env 文件中的内容到系统中去
load_dotenv()
# 指定路径的时候
# load_dotenv("/path/to/custom/.env")
db_host = os.getenv("DB_HOST")
print(db_host)

常见参数解释
# 常见的参数释义
load_dotenv(override=True) # 默认情况下,load_dotenv() 不会覆盖已存在的系统环境变量。若需强制覆盖
# 可以为不同环境创建多个文件(如 .env.prod, .env.dev),按需加载:
load_dotenv(".env.prod") # 加载生产环境配置
# 带默认值的读取, 如果不存在则以默认值补充
debug_mode = os.getenv('DEBUG', 'False')
常见的配置类加载
load_dotenv()
class Config:
# 根据自己的需要进行取出
DB_CONFIG = {
"host": os.getenv("DB_HOST"),
"port": os.getenv("DB_PORT"),
"user": os.getenv("DB_USER"),
"password": os.getenv("DB_PASSWORD"),
}
4. 安全说明
.env文件中通常保存着除环境变量外的的一些敏感信息,如密码、秘钥、盐等信息,且不同机器之间的环境变量不一致,通常不会上传到 git 上面,会在 .gitignore 中忽略提交;
继续努力,终成大器。

浙公网安备 33010602011771号