深入理解Python之.env

 更新时间:2025年08月05日 09:02:15   作者:无风听海  
.env是一个纯文本文件,用于保存环境变量,本文就来介绍一下Python之.env环境变量配置的实现,具有一定的参考价值,感兴趣的可以了解一下

✅ 一、.env文件是什么?

.env 是一个纯文本文件,用于保存环境变量(环境配置)。它最初被广泛用于 Unix/Linux 系统,现在被各种语言(如 Python、Node.js、Go、Java)项目采纳,成为现代开发中配置与代码解耦的重要手段

📌 1.1.env文件的功能

功能说明
配置解耦将数据库地址、密钥、路径等配置从代码中抽离
管理多环境可以为不同环境(开发、测试、生产)使用不同的 .env 文件
跨平台兼容.env 文件是纯文本格式,可被广泛识别
安全性增强敏感信息如密码、Token 可独立管理,不暴露在代码仓库中

🧾 1.2.env文件格式语法详解

✅ 基本语法:

KEY=VALUE

✅ 完整语法示例:

# 字符串
APP_NAME=MyAwesomeApp

# 布尔值(字符串表示)
DEBUG=True

# 数字(仍作为字符串处理)
PORT=8080

# 空值
LOG_PATH=

# 引号包裹的值(包含空格)
WELCOME_MESSAGE="Hello, user!"

# 注释行
# This is a comment

⚠️ 注意事项:

  • 不要加空格KEY = VALUE 是错误写法。
  • 所有值都是字符串(使用时需自行转换)。
  • 不支持嵌套结构(不像 JSON / YAML)。

🧩 1.3 使用场景

场景示例配置
本地开发配置调试模式开关、端口号
与数据库/服务连接配置数据库主机、用户名、密码等
Docker / CI / 云平台部署注入环境变量
应用参数配置日志路径、语言、运行模式等

💻 二、在 Python 中使用.env

✅ 2.1 安装依赖库

使用 python-dotenv 来加载 .env 文件:

pip install python-dotenv

✅ 2.2 示例项目结构

my_project/
├── .env
├── .env.example
├── config.py
└── main.py

📄 2.3.env示例

APP_NAME=MyService
DEBUG=True
PORT=8080
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb

🐍 2.4 Python 使用方式

📄config.py

import os
from dotenv import load_dotenv

# 加载 .env 文件到系统环境变量中
load_dotenv()

# 从环境变量中读取配置项
APP_NAME = os.getenv("APP_NAME", "DefaultApp")
DEBUG = os.getenv("DEBUG", "False") == "True"
PORT = int(os.getenv("PORT", 8000))
DATABASE_URL = os.getenv("DATABASE_URL")

📄main.py

from config import APP_NAME, DEBUG, PORT, DATABASE_URL

def run():
    print(f"Starting {APP_NAME} on port {PORT}")
    print(f"Debug mode: {DEBUG}")
    print(f"Database: {DATABASE_URL}")

if __name__ == "__main__":
    run()

🔐 三、.env的安全性机制详解

.env 文件是明文文件,不加密,它的安全性来自你的使用方式,而不是文件自身

✅ 安全措施建议:

做法描述
❌ 不上传 .env 到 Git 仓库将 .env 加入 .gitignore
✅ 提交 .env.example用作参考模板,不包含任何敏感信息
✅ 设置文件权限本地设置为 chmod 600 .env,仅本人可读
✅ 在生产环境中使用系统环境变量不在服务器存储 .env,而是通过配置平台环境变量
✅ 不在日志中输出环境变量防止无意间泄露机密信息

📁.gitignore示例:

# 忽略本地配置
.env
.env.*
!*.env.example

📄.env.example示例(无敏感值):

APP_NAME=
DEBUG=False
PORT=8000
DATABASE_URL=

⚖️ 四、与其他配置文件类型的对比

配置文件类型是否支持结构化可注释易读性编程无关性配置复杂性推荐用途
.env❌(仅字符串键值)环境变量、轻量配置
.json✅(严格结构)配置接口、静态参数
.yaml / .yml✅(高度结构化)配置服务、K8s、Docker
.ini✅(简单结构)插件系统、应用启动配置
.py(Python 配置模块)❌(依赖解释器)任意复杂高级配置逻辑(如 FastAPI Settings)

✅.env的适用性总结

优点缺点
✅ 语法简单,学习成本低❌ 不支持复杂结构(如嵌套字典)
✅ 跨语言、跨平台兼容性好❌ 所有值为字符串,需要手动转换类型
✅ 与系统环境变量兼容❌ 不能直接包含列表或嵌套结构
✅ 非开发人员也能理解和编辑❌ 不适用于需要大量配置的复杂场景

✅ 五、总结

项目内容
.env 是一个文本文件,保存键值对形式的环境变量
用途用于安全、统一地管理项目配置
Python 中使用借助 python-dotenv,结合 os.getenv()
安全性实践不上传、设权限、用 .env.example 提供模板
对比其他配置格式.env 简单轻量,适合小型/中型配置;复杂配置建议用 YAML/JSON

到此这篇关于深入理解Python之.env的文章就介绍到这了,更多相关Python .env内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • python实现远程通过网络邮件控制计算机重启或关机

    python实现远程通过网络邮件控制计算机重启或关机

    这篇文章主要为大家详细介绍了python实现远程通过网络邮件控制计算机重启或关机,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • PyTorch之torch.randn()如何创建正态分布随机数

    PyTorch之torch.randn()如何创建正态分布随机数

    这篇文章主要介绍了PyTorch之torch.randn()如何创建正态分布随机数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python线程详解

    Python线程详解

    这篇文章主要介绍了Python线程详解,本文详细讲解了线程方方面面的知识,如线程基础知识线程状态、线程同步(锁)、线程通信(条件变量)等内容,需要的朋友可以参考下
    2015-06-06
  • Pandas.concat连接DataFrame,Series的示例代码

    Pandas.concat连接DataFrame,Series的示例代码

    本文主要介绍了Pandas.concat连接DataFrame,Series的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • 在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

    在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

    这篇文章主要介绍了在Mac OS上部署Nginx和FastCGI以及Flask框架的教程,Flask是Python下一个极简的web开放框架,需要的朋友可以参考下
    2015-05-05
  • OpenCV图像处理之七种常用图像几何变换

    OpenCV图像处理之七种常用图像几何变换

    这篇文章主要介绍了OpenCV图像处理中常用的几个图像几何变换:裁剪、放大、缩小、平移、错切、镜像、旋转、透视等。文中示例代码非常详细,需要的朋友可以参考一下
    2021-12-12
  • python利用thrift服务读取hbase数据的方法

    python利用thrift服务读取hbase数据的方法

    今天小编就为大家分享一篇python利用thrift服务读取hbase数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Pycharm安装报错:Cannot detect a launch configuration解决办法

    Pycharm安装报错:Cannot detect a launch confi

    本文主要介绍了Pycharm安装报错:Cannot detect a launch configuration解决办法,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • python os.path模块使用方法介绍

    python os.path模块使用方法介绍

    os.path 模块是系统路径操作模块,但实际的原理可以把它认为是处理包含斜杠("/")和反斜杠("\")字符串的模块,其中,斜杠("/")是 linux 系统下的路径分隔符,和反斜杠("\")是 windows 系统下的路径分隔符
    2022-08-08
  • Python函数式编程之面向过程面向对象及函数式简析

    Python函数式编程之面向过程面向对象及函数式简析

    这一番我们要学习点有难度的了,因此将降低阅读与理解难度,尽量采用大白话为你铺垫,因为涉及的一些概念也是借鉴的其它编程语言的风格,而且实际落地中存在部分争议不过多学一点,总是没有坏处的
    2021-09-09

最新评论