news 2026/5/30 3:58:10

LLM系列:环境搭建:5.Python-dotenv 环境变量管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LLM系列:环境搭建:5.Python-dotenv 环境变量管理

Python-dotenv 环境变量管理

在Python项目开发中,python-dotenv是一个用于从.env文件读取键值对并将其加载到系统环境变量中的核心工具库。根据日常工程规范,其主要功能与应用场景总共可分为四大类:

  • 1. 基础加载(Basic Loading):自动寻找并加载.env文件到 Python 的os.environ字典中;
  • 2. 字典解析(Dictionary Parsing):将配置文件的内容解析为 Python 字典,而不直接污染系统的全局环境变量;
  • 3. 动态读写(Dynamic Operations):通过代码直接对.env文件中的特定键值进行读取、修改或删除操作;
  • 4. 变量展开(Variable Expansion):支持在.env文件内部像 Shell 脚本一样互相引用已定义的环境变量。

(注:在进行团队协作或将项目开源时,必须将包含敏感信息(如数据库密码、API Key、Secret)的.env文件加入到.gitignore中,以防核心机密泄露。)


一. 安装与基础语法规则

在使用之前,需要通过 pip 安装该第三方库。虽然导入时使用的是import dotenv,但安装时的包名是python-dotenv

pipinstallpython-dotenv

1. .env 文件的基本编写规则

.env文件的编写极其严格,它遵循类似于 Bash 的语法规则,主要必须满足以下条件:

  1. 键值对格式:使用KEY=VALUE的形式,等号两侧尽量不要有空格。
  2. 引号的使用:值可以使用单引号或双引号包裹。如果值内部包含空格或特殊字符,必须使用引号。
  3. 注释规则:使用#开头表示注释,注释可以单独一行,也可以放在配置项的尾部(需用空格隔开)。

示例.env文件:

# 数据库配置 DB_HOST=127.0.0.1 DB_PORT=3306 # API 密钥 (包含空格,使用双引号包裹) SECRET_KEY="my super secret key" # 变量的扩展(Expansion)特性:复用已有的变量 DATABASE_URL="mysql://${DB_HOST}:${DB_PORT}/my_db"

二. 核心加载与解析运算

核心运算指的是将.env文件中的配置数据读取到 Python 运行环境中的相关方法。

1. load_dotenv - 全局环境变量加载

作用:自动搜索当前路径下的.env文件,没有就去父目录下找,找到就停止;并将其内部的键值对全部注册到 Python 的全局环境变量字典os.environ中。这是最常用、最高频的方法。

fromdotenvimportload_dotenv load_dotenv(dotenv_path=None,override=False)

参数:

  • 配置文件路径 (dotenv_path): 指定.env文件的绝对或相对路径。如果不指定,默认使用find_dotenv()自动向上层目录寻找 (String 或 PathLike -pathlib模块中的Path对象)。
  • 覆盖标志 (override): 当系统环境变量中已经存在同名键时,决定是否使用.env文件中的值进行覆盖。False为不覆盖(默认),True为强制覆盖 (bool)。

返回值:

  • 成功: 返回一个布尔值 (bool)。如果找到了.env文件并成功加载则返回True,未找到则返回False

示例:

importosfromdotenvimportload_dotenv# 加载环境变量is_loaded=load_dotenv()# 返回 True# 通过 Python 原生的 os 模块读取host=os.getenv("DB_HOST")# '127.0.0.1'port=os.getenv("DB_PORT","默认值8080")# '3306' (支持设置默认值)

2. dotenv_values - 字典解析运算

作用:将.env文件的内容读取并解析为一个标准的 Python 字典 (dict),但绝对不会将这些值注入到os.environ中。

注:这种方法常用于同一项目中需要加载多个不同环境配置文件(如.env.dev,.env.prod),且不想污染系统全局环境变量的场景。

fromdotenvimportdotenv_values dotenv_values(dotenv_path=None)

参数:

  • 配置文件路径 (dotenv_path): 需要解析的目标配置文件路径 (String 或 PathLike)。

返回值:

  • 成功: 返回一个包含所有配置键值对的字典 (OrderedDict / dict)。

示例:

fromdotenvimportdotenv_values# 解析特定的配置文件config=dotenv_values(".env.dev")# {'DB_HOST': '127.0.0.1', 'DB_PORT': '3306', 'SECRET_KEY': 'my super secret key', ...}print(config["DB_HOST"])# 直接像字典一样取值

3. find_dotenv - 配置文件自动定位

作用:从当前脚本所在目录开始,逐级向父目录寻找.env文件,直到根目录为止。

fromdotenvimportfind_dotenv find_dotenv(filename='.env',raise_error_if_not_found=False,usecwd=False)

参数:

  • 文件名 (filename): 需要寻找的目标文件名,默认为'.env'(String)。
  • 异常标志 (raise_error_if_not_found): 如果为True,找不到文件时会直接抛出 IOError 异常 (bool)。

返回值:

  • 成功: 返回找到的配置文件的绝对路径字符串 (String)。若未找到则返回空字符串""

三. 动态读写运算

动态读写运算常用于在代码运行时,直接对硬盘上的.env文件内容进行增删改查。它直接修改文件本身,而不仅仅是修改内存中的变量。

函数描述
set_key(…)修改.env文件中指定键的值(如果不存在则追加)。
get_key(…)读取.env文件中指定键的值(不加载到环境变量)。
unset_key(…)删除.env文件中指定的键值对。

1. set_key - 动态更新或追加键值

作用:打开指定的.env文件,修改某个特定变量的值。如果该变量不存在,则在文件末尾自动追加该键值对。

fromdotenvimportset_key set_key(dotenv_path,key_to_set,value_to_set,quote_mode='always')

参数:

  • 配置文件路径 (dotenv_path): 目标.env文件的绝对路径 (String)。
  • 目标键名 (key_to_set): 需要修改或新增的变量名 (String)。
  • 目标键值 (value_to_set): 需要设置的新值 (String)。
  • 引号模式 (quote_mode): 控制写入文件时是否加引号。'always'(总是加引号),'auto'(包含空格时加),'never'(从不加) (String)。

返回值:

  • 成功: 返回包含所设置键值对的元组 (Tuple)。

示例:

importosfromdotenvimportset_key,find_dotenv env_file=find_dotenv()# 修改现有值或新增配置,直接物理写入到 .env 文件中set_key(env_file,"API_VERSION","v2.0.1")

2. get_key - 物理读取指定键值

作用:直接从硬盘上的.env文件中读取某个特定变量的值。此操作绝对不会将该变量加载到系统的os.environ环境变量中,实现了真正的读取隔离。

fromdotenvimportget_key get_key(dotenv_path,key_to_get)

参数:

  • 配置文件路径 (dotenv_path): 目标.env文件的绝对路径 (String)。
  • 目标键名 (key_to_get): 需要读取的目标变量名 (String)。

返回值:

  • 成功: 如果文件中存在该键,返回对应的字符串值 (String);如果不存在,则返回None

示例:

fromdotenvimportget_key,find_dotenv env_file=find_dotenv()# 直接查阅文件内容,不污染当前运行的全局环境api_version=get_key(env_file,"API_VERSION")print(api_version)# 假设存在,输出:'v2.0.1'

3. unset_key - 删除指定键值对

作用:打开指定的.env文件,查找并彻底物理删除指定的键值对(包括其所在的行)。如果目标键在文件中不存在,则文件保持原样,不会报错。

fromdotenvimportunset_key unset_key(dotenv_path,key_to_unset,quote_mode='always')

参数:

  • 配置文件路径 (dotenv_path): 目标.env文件的绝对路径 (String)。
  • 目标键名 (key_to_unset): 需要彻底删除的变量名 (String)。
  • 引号模式 (quote_mode): 重新写入文件时的引号规则,通常保持默认即可 (String)。

返回值:

  • 成功: 返回一个元组。如果删除成功返回(True, '你的键名');如果没找到该键,返回(None, '你的键名')(Tuple)。

示例:

fromdotenvimportunset_key,find_dotenv env_file=find_dotenv()# 从 .env 文件中物理抹除该配置项result=unset_key(env_file,"API_VERSION")print(result)# 删除成功时输出类似于:(True, 'API_VERSION')
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 3:58:08

T-pro-it-2.0-GGUF与Ollama集成:一键部署AI模型的简单方法

T-pro-it-2.0-GGUF与Ollama集成:一键部署AI模型的简单方法 【免费下载链接】T-pro-it-2.0-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/t-tech/T-pro-it-2.0-GGUF T-pro-it-2.0-GGUF是基于t-tech/T-pro-it-2.0模型转换而来的GGUF格式版本&#xff0c…

作者头像 李华
网站建设 2026/5/30 3:55:59

别再找破解版了!用Tampermonkey + GM_download API自制音乐下载工具全流程

从零构建安全合规的音乐下载工具:Tampermonkey与GM_download实战指南在数字资源获取日益复杂的今天,许多音乐爱好者常常陷入两难:既希望保存喜欢的歌曲,又不愿使用来历不明的破解软件。本文将带你用Tampermonkey这一浏览器扩展神器…

作者头像 李华
网站建设 2026/5/30 3:55:57

Rust新手别怕!用Qt Quick (QML) 轻松搞定GUI,CXX-Qt保姆级入门指南

Rust新手别怕!用Qt Quick (QML) 轻松搞定GUI,CXX-Qt保姆级入门指南在Rust生态中构建GUI应用常被视为"硬骨头",但Qt Quick(QML)的声明式语法与CXX-Qt的强强联合,正在改变这一局面。想象一下:用Rust处理高性能…

作者头像 李华
网站建设 2026/5/30 3:53:58

CVE-2018-8174漏洞复现实验报告

一、该漏洞的相关背景CVE-2018-8174是 Windows VBScript Engine 代码执行漏洞。由于VBScript脚本执行引擎存在代码执行漏洞,攻击者可以将恶意的VBScript嵌入到Office文件或者网站中,一旦用户不小心点击,远程攻击者可以获取当前用户权限执行脚…

作者头像 李华