news 2026/6/18 13:37:35

.env 文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
.env 文件

一、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-dotenv
3. 在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的注意事项

  1. 类型转换:从.env读取的所有变量都是字符串类型,如果需要数字(如端口号、超时时间),需手动用int()/float()转换;
  2. 默认值os.getenv()支持设置默认值,避免变量不存在时出错:
    # 如果.env中没有配置TIMEOUT,默认使用30timeout=int(os.getenv("TIMEOUT",30))
  3. 框架集成:很多Python框架(如Flask、Django)可自动识别.env文件(Flask需安装python-dotenv,Django需手动加载);
  4. 生产环境建议:服务器上的.env文件要设置权限(如Linux下chmod 600 .env),仅允许运行程序的用户访问;生产环境也可直接通过服务器环境变量配置,替代.env文件。

总结

  1. Python中使用.env的核心流程:创建.env文件 → 安装python-dotenvload_dotenv()加载 →os.getenv()读取变量 → 配置.gitignore忽略.env;
  2. 关键注意点:从.env读取的变量都是字符串,需按需转换类型;用os.getenv()而非os.environ[]可避免变量不存在时报错;
  3. .env的安全核心依然是不提交到版本库,这是保护敏感信息的关键。

关键点回顾

  • Python依赖python-dotenv库加载.env,核心函数是load_dotenv()os.getenv()
  • 必须将.env加入.gitignore,仅提交.env.example作为模板;
  • 读取的变量默认是字符串,需手动转换数字类型,建议给os.getenv()设置默认值提升代码健壮性。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 6:37:40

Shell脚本编程最佳实践

前言 写Shell脚本容易,写好Shell脚本难。随手写的脚本能跑,但换个环境就出问题;脚本越写越长,自己都看不懂;没有错误处理,跑到一半失败了也不知道。 本文整理Shell脚本编程的最佳实践,从代码规范…

作者头像 李华
网站建设 2026/6/15 12:42:13

Paperzz 开题报告:一键搞定 “开题 + PPT”,硕士开题的双效工具

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 开题报告https://www.paperzz.cc/proposal 对于硕士研究生来说,开题阶段的 “双重压力”—— 写开题报告 做开题 PPT,往往要占用一周以上的时间:报告要符合…

作者头像 李华
网站建设 2026/6/16 8:48:32

如何选择人体解析方案?M2FP的三大优势让你告别环境报错

如何选择人体解析方案?M2FP的三大优势让你告别环境报错 在当前计算机视觉快速发展的背景下,人体解析(Human Parsing) 已成为智能服装推荐、虚拟试衣、动作识别、人机交互等场景中的关键技术。与传统的人体姿态估计不同&#xff0c…

作者头像 李华
网站建设 2026/6/14 22:38:08

STM32F407系列工控板源程序:支持以太网、FX3U PLC,版本多样,已修复多项bug

STM32F407/以太网/FX3U/PLC/工控板源程序 支持stm32f407/429/405芯片 支持断电数据保存。 目前源码有两个版本 图1.是Hal库版本已经被个别人进行倒卖。 现在已经进行了多项bug修复。 图2.是标准的库函数版本不进行网上交易,需要当面交易。最近在工控圈子里看到几个老…

作者头像 李华
网站建设 2026/6/10 18:01:25

Z-Image-Turbo ModelScope模型下载速度优化

Z-Image-Turbo ModelScope模型下载速度优化 阿里通义Z-Image-Turbo WebUI图像快速生成模型 二次开发构建by科哥 运行截图 在AI图像生成领域,模型加载效率直接影响用户体验和生产环境部署成本。阿里通义推出的Z-Image-Turbo作为一款高性能、低延迟的文生图模型&…

作者头像 李华