环境变量应用

环境变量

在开发的过程中我们经常会需要设置环境变量,特别是在 Linux 的系统下的时候,更是需要在 shell 脚本中也用到相关的环境变量,开源项目中很多关于环境变量的设置使用的都是.env文件;

1. 文件介绍

.env 文件是用于存储环境变量的配置文件,通常用于在项目中管理敏感信息(如:API 秘钥、数据库密码)或不同运行环境(开发、测试、生产)的配置差异,通过配置与代码分离,.env文件能够提高安全性和灵活性。

  • 作用‌:

    • 存储项目的环境变量,避免将敏感信息硬编码到代码中。
    • 支持不同环境(开发、生产)的配置切换,无需修改代码。
    • 简化团队协作,开发者可以基于自己的 .env 文件独立配置。
  • 语法规则

    • 每行定义一个键值对,格式为KEY=value
    • 注释用#表示
    • 值可以包裹在双引号中(处理特殊字符或空格),例如 SECRET_KEY="my secret"
    • 支持多行值(使用三引号或转义字符\),支持常见的转义序列如 \n\t
    • 变量可以相互引用,如DOMAIN=example.comURL=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_DEBUGHAS_CACHEENABLE_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=localhostdocker 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)

image-20250514145000036

常见参数解释

# 常见的参数释义
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 中忽略提交;

继续努力,终成大器。

posted @ 2025-05-23 15:15  紫青宝剑  阅读(11)  评论(0)    收藏  举报