必须隔离敏感配置,硬编码 database_url 或 api_key 到 python 文件会导致密钥泄露;load_dotenv() 将 .env 键值对注入 os.environ,需配合 .gitignore 和 .env.example 使用。

直接回答:不是“推荐”,而是必须隔离敏感配置
硬编码 DATABASE_URL 或 API_KEY 到 Python 文件里,等于把钥匙贴在门上。一旦代码提交到 GitHub,密钥就不可逆泄露——真实案例中,已有数百个开源项目因漏传 .env 被自动爬虫抓取密钥,导致云账单暴增或数据被拖库。
os.environ.get() 为什么不够用?
os.environ.get() 只能读系统级环境变量,但开发时你根本不会(也不该)手动 export API_KEY=xxx 每次启动终端。它不解决“本地开发如何安全加载配置”这个核心问题。
- 终端里运行
python app.py→os.environ里压根没有DB_HOST - VS Code 点右上角“运行”按钮 → 同样不会加载
.env,因为那是 shell 进程,不是调试器 - 即使设了
python.envFile在 VS Codesettings.json中,也只影响调试和 lint,不影响终端执行
load_dotenv() 的关键行为细节
调用 load_dotenv() 不是“读文件然后赋值给变量”,而是把 .env 里的键值对**注入当前进程的 os.environ 字典**,后续所有 os.getenv() 或 os.environ["KEY"] 才能拿到值。
- 默认只找项目根目录的
.env,不递归;若要指定路径,必须显式传参:load_dotenv(".env.local") -
override=True很重要:否则已存在的同名环境变量(比如系统里设的DEBUG=true)会覆盖.env里的值 -
verbose=True在开发期建议打开,能立刻看到是否成功加载、加载了哪个路径 - 它不解析引号:
DB_PASS="my@pass!"和DB_PASS=my@pass!效果一样,引号会被原样保留,不是语法要求
最容易被忽略的陷阱:.env 文件没进 .gitignore
新建 .env 后第一件事不是写配置,而是确认它已在 .gitignore 里。否则 git add . 会把它一起提交——而很多人直到 CI 报错或收到云服务商安全告警才发现。
务必同步维护 .env.example 并提交到仓库:只留键名和注释,值全用 YOUR_XXX_HERE 占位。这是团队协作唯一安全的配置分发方式。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











