Python工程配置管理_env环境变量解析【教程】

_env 是项目自定义的环境标识符,用于区分开发、测试、生产等运行环境,通过 .env 文件或命令行设置,由代码解析后动态加载对应配置。

Python 工程中,_env 通常不是 Python 自带的概念,而是项目自定义的环境变量管理方式,常见于通过 .env 文件加载配置,并用下划线前缀(如 _ENV)标识运行环境类型(如 _ENV=dev)。它本身不参与 Python 解释器启动流程,但能显著影响配置加载逻辑。

什么是 _env 环境变量?

它是一个人为约定的标识符,用于告诉项目当前处于哪种环境(开发、测试、生产等)。比如:

  • _ENV=dev → 加载 config/dev.py 或读取 .env.dev
  • _ENV=prod → 加载 config/prod.py 或启用严格安全策略

注意:_ENV 不是系统级环境变量(如 PYTHONPATH),也不被 pip 或 venv 直接识别,完全由项目代码解析和使用。

如何设置和读取 _env

设置方式灵活,优先级一般为:命令行 > .env 文件 > 默认值。常用做法:

  • 在终端中临时设置:_ENV=prod python app.py
  • 写入 .env 文件:_ENV=staging,再用 python-dotenv 加载
  • 在代码中安全读取:os.getenv('_ENV', 'dev'),避免直接用 os.environ['_ENV'] 报错

典型配置加载流程示例

一个常见结构如下:

# config/__init__.py
import os
from dotenv import load_dotenv

先加载通用 .env,再按 _ENV 加载对应文件

load_dotenv() env = os.getenv('_ENV', 'dev') load_dotenv(f'.env.{env}', override=True)

class Config: DEBUG = env == 'dev' DATABASE_URL = os.getenv('DATABASE_URL')

这样就能实现“一套代码、多套配置”,且不硬编码环境判断逻辑。

注意事项与避坑点

实际使用中容易忽略的关键细节:

  • _ENV 的值建议全小写、无特殊字符,便于字符串比较(如 if _env == 'prod'
  • 不要在 .env 中覆盖系统关键变量(如 PATH),可能导致命令找不到
  • 生产环境慎用 python-dotenv,应改用操作系统级环境变量注入,更安全可控
  • Git 中记得把 .env.* 加入 .gitignore,防止密钥泄露

不复杂但容易忽略。