一、Python中使用.env文件的完整步骤
1. 准备工作:创建.env文件
在Python项目根目录下新建.env文件,格式和Node.js一致(KEY=VALUE),示例内容如下(包含数据库、API等敏感配置):
# .env 文件(Python项目) # 基础配置 FLASK_APP=app.py FLASK_DEBUG=True PORT=5000 # 敏感配置(数据库信息) DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASSWORD=my_python_db_123 DB_NAME=my_project_db # 第三方API密钥 WEATHER_API_KEY=abc123456xyz789⚠️ 注意:和Node.js一样,等号前后不要加空格,字符串无需加引号,注释用#开头。
2. 安装加载.env的依赖
Python没有内置加载.env的功能,需要安装python-dotenv库(Python生态中最常用的.env处理库):
# 安装依赖(建议在虚拟环境中执行)pipinstallpython-dotenv3. 在Python代码中加载并使用.env变量
创建一个Python文件(如main.py),在代码最顶部加载.env文件,避免变量未生效:
# main.py# 1. 导入dotenv库的load_dotenv函数fromdotenvimportload_dotenv# 2. 导入os模块,用于读取环境变量importos# 3. 加载.env文件(默认读取项目根目录的.env)# 如果.env文件不在根目录,可指定路径:load_dotenv(dotenv_path="./config/.env")load_dotenv()# 4. 读取环境变量:通过os.getenv("KEY")或os.environ["KEY"]获取# 推荐用os.getenv(),因为变量不存在时返回None,不会报错;os.environ[]会抛KeyErrorflask_app=os.getenv("FLASK_APP")flask_debug=os.getenv("FLASK_DEBUG")port=os.getenv("PORT")# 敏感配置读取db_host=os.getenv("DB_HOST")db_port=os.getenv("DB_PORT")db_user=os.getenv("DB_USER")db_password=os.getenv("DB_PASSWORD")db_name=os.getenv("DB_NAME")# API密钥读取weather_api_key=os.getenv("WEATHER_API_KEY")# 5. 打印验证(实际开发中不要打印敏感信息!)print("基础配置:")print(f"FLASK_APP:{flask_app}")print(f"FLASK_DEBUG:{flask_debug}")print(f"PORT:{port}")# 模拟数据库连接配置(仅示例,无实际连接)db_config={"host":db_host,"port":int(db_port),# 注意:从.env读取的都是字符串,需手动转换类型"user":db_user,"password":db_password,"database":db_name}print("\n数据库配置:")print(db_config)运行这个Python文件,输出结果如下(和你.env中的配置一致):
基础配置: FLASK_APP: app.py FLASK_DEBUG: True PORT: 5000 数据库配置: {'host': 'localhost', 'port': 3306, 'user': 'root', 'password': 'my_python_db_123', 'database': 'my_project_db'}4. 关键安全步骤:配置.gitignore
和Node.js一样,必须把.env加入.gitignore,避免提交到Git仓库:
# .gitignore 文件中添加 # Python项目通用忽略(可保留) __pycache__/ *.py[cod] *.so env/ venv/ # 核心:忽略.env文件 .env # 多环境配置文件也忽略 .env.* # 例外:提交示例模板 !.env.example创建.env.example作为模板(可提交到仓库,供团队参考):
# .env.example(Python项目,可提交) FLASK_APP=app.py FLASK_DEBUG=True PORT=5000 # 数据库配置(请填写真实值) DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASSWORD=你的数据库密码 DB_NAME=你的数据库名 # API密钥(请填写真实值) WEATHER_API_KEY=你的天气API密钥5. 进阶:Python多环境配置
如果需要区分开发/生产/测试环境,可创建多个.env文件:
.env.dev:开发环境.env.prod:生产环境.env.test:测试环境
加载指定环境的配置:
# main.pyfromdotenvimportload_dotenvimportos# 加载生产环境配置(指定文件路径)load_dotenv(dotenv_path=".env.prod")# 读取生产环境变量db_password=os.getenv("DB_PASSWORD")print(f"生产环境数据库密码:{db_password}")也可以通过命令行参数动态指定环境:
# 运行时指定加载开发环境python main.py --env dev对应的代码逻辑(示例):
# main.pyfromdotenvimportload_dotenvimportosimportsys# 获取命令行参数env=sys.argv[1]iflen(sys.argv)>1else"dev"# 根据参数加载对应.env文件load_dotenv(dotenv_path=f".env.{env}")# 读取变量print(f"当前环境:{env}")print(f"PORT:{os.getenv('PORT')}")二、Python使用.env的注意事项
- 类型转换:从.env读取的所有变量都是字符串类型,如果需要数字(如端口号、超时时间),需手动用
int()/float()转换; - 默认值:
os.getenv()支持设置默认值,避免变量不存在时出错:# 如果.env中没有配置TIMEOUT,默认使用30timeout=int(os.getenv("TIMEOUT",30)) - 框架集成:很多Python框架(如Flask、Django)可自动识别.env文件(Flask需安装
python-dotenv,Django需手动加载); - 生产环境建议:服务器上的.env文件要设置权限(如Linux下
chmod 600 .env),仅允许运行程序的用户访问;生产环境也可直接通过服务器环境变量配置,替代.env文件。
总结
- Python中使用.env的核心流程:创建.env文件 → 安装
python-dotenv→load_dotenv()加载 →os.getenv()读取变量 → 配置.gitignore忽略.env; - 关键注意点:从.env读取的变量都是字符串,需按需转换类型;用
os.getenv()而非os.environ[]可避免变量不存在时报错; - .env的安全核心依然是不提交到版本库,这是保护敏感信息的关键。
关键点回顾
- Python依赖
python-dotenv库加载.env,核心函数是load_dotenv()和os.getenv(); - 必须将.env加入.gitignore,仅提交.env.example作为模板;
- 读取的变量默认是字符串,需手动转换数字类型,建议给
os.getenv()设置默认值提升代码健壮性。