Python库:python-dotenv读取配置文件、管理环境变量

介绍

python-dotenv 可以帮你从本地的 .env 文件中读取配置,并自动加载到系统的环境变量中,这样就不用把配置信息(如:数据库用户、密码)等敏感信息直接写在代码里,既安全又便于不同环境(开发/生产)切换。

安装

pip安装

在终端执行安装命令:

pip install python-dotenv

uv安装

uv add python-dotenv

poetry虚拟环境

poetry add python-dotenv

创建 .env 文件

在你的 Python 项目根目录下,新建一个名为 .env 的文件(注意文件名以点开头),内容格式为 键=值,示例:

# .env 文件内容(注释用#开头)
DASHSCOPE_API_KEY=你的阿里云百炼API密钥
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=123456

git

一定要把 .env 文件加入 .gitignore(如果用Git管理代码),避免敏感信息提交到代码仓库!

读取配置-方式一

加载.env文件

加载 .env 文件,并放入到环境变量中:

load_dotenv()

读取环境变量

方式1:os.getenv(键, 默认值)

方式2:os.environ["键"] —— 键不存在时会报错,慎用

例子

import os
from dotenv import load_dotenv

# 加载.env文件(默认读取项目根目录的.env)
# 如果.env文件在其他路径,可指定:load_dotenv("/path/to/your/.env")
load_dotenv()

# 读取环境变量
# 方式1:os.getenv(键, 默认值) —— 推荐,键不存在时返回默认值,避免报错
dashscope_key = os.getenv("DASHSCOPE_API_KEY", "默认值(可选)")
db_host = os.getenv("DB_HOST")
db_port = os.getenv("DB_PORT")

# 方式2:os.environ["键"] —— 键不存在时会报错,慎用
# dashscope_key = os.environ["DASHSCOPE_API_KEY"]

# 打印验证
print("DashScope API Key:", dashscope_key)
print("数据库地址:", db_host, ":", db_port)

load_dotenv() 的参数

  • dotenv_path:指定 .env 文件路径,如 load_dotenv("./config/.env");
  • override=True:强制用 .env 中的值覆盖系统已有的同名环境变量(默认 False);
  • verbose=True:打印加载过程的日志,便于排查问题。

读取配置-方式二

加载.env文件

不加载到环境变量,直接读取 .env 为字典(适合不想污染环境变量的场景)

config = dotenv_values(".env")

例子

from dotenv import dotenv_values

# 不加载到环境变量,直接读取.env为字典(适合不想污染环境变量的场景)
config = dotenv_values(".env")
print(config["DASHSCOPE_API_KEY"])  # 直接从字典取值

常见问题

  • 加载不到.env文件:检查文件路径是否正确(默认读项目根目录)、文件名是否是 .env(不是 env 或 .env.txt);
  • 中文乱码:确保 .env 文件编码为 UTF-8;
  • 值包含特殊字符(如空格、等号):用引号包裹,如 API_KEY="ab cd=123"。

总结

  1. python-dotenv 核心作用是安全管理敏感配置,避免硬编码,通过 .env 文件分离配置和代码;
  2. 核心流程:安装 → 创建 .env 写配置 → 代码中 load_dotenv() 加载 → os.getenv() 读取;
  3. 关键注意事项:.env 文件要保密,读取时优先用 os.getenv()(带默认值)避免报错。

原文出处:/show_1GW2q16kzPEE.html