新闻详情

新闻详情

首页 / 资讯中心 / 详情

python-dotenv 完整变更历史解析:从版本演进看 .env 配置管理库的核心能力

发布时间:2026/9/25 7:55:35来源:尧图网络
python-dotenv 完整变更历史解析:从版本演进看 .env 配置管理库的核心能力
后端【免费下载链接】python-dotenvReads key-value pairs from a .env file and can set them as environment variables. It helps in developing applications following the 12-factor principles.项目地址https://gitcode.com/gh_mirrors/py/python-dotenv点击查看免费下载本文以 python-dotenv 官方 变更日志 为骨架结合仓库源码与测试逐版本解读关键演进从 .env 文件解析、变量插值、load_dotenv/dotenv_values加载语义到set_key/unset_key写入机制与 CLI 命令的完整能力边界。读完本文你将掌握该库每个版本引入/修复的核心行为、各 API 参数的准确语义以及如何用当前仓库源码验证这些行为。项目与文档概览python-dotenv 是一个读取.env文件中的 key-value 对并将其设置为环境变量的工具遵循十二要素12-factor应用开发原则将配置与代码分离。当前仓库版本为1.2.2见 src/dotenv/version.py支持 Python 3.10 及以上见 pyproject.toml。变更日志 遵循 Keep a Changelog 格式并遵循语义化版本控制Semantic Versioning。本文将逐版本解读其中的 Added新增、Changed变更、Fixed修复、Breaking Changes破坏性变更条目并用仓库中的源码与测试印证其真实行为。最新版本 1.2.22026-03-01BOM、符号链接与 CLI 行为新增Python 3.14 与自由线程构建支持支持 Python 3.14包括 free-threaded3.14t构建。对应 pyproject.toml 中新增的Programming Language :: Python :: 3.14classifier 以及requires-python 3.10。同步将 PyPy 支持更新到 3.11并移除了 Python 3.9 支持Dropped Support for Python 3.9。修复UTF-8 BOM 处理变更日志 [Unreleased] 与 1.2.2 之前的提交都提及一个关键修复剥离.env文件内容开头的 UTF-8 BOM避免当文件以 BOM 保存例如部分 JetBrains IDE 在 Windows 上保存文件时导致第一个变量被静默丢弃。该行为在源码中可直接验证在 src/dotenv/parser.py 的Reader.__init__中读取流内容后立即执行self.string stream.read().removeprefix(\ufeff)即在解析开始前就移除 BOM 字符。修复set_key与unset_key的符号链接行为1.2.2 修复了set_key/unset_key与符号链接symlink交互时的行为由 src/dotenv/main.py 中的rewrite()上下文管理器实现默认不再跟随符号链接修改时若路径是符号链接默认会替换链接本身用普通文件覆盖而不是修改链接指向的目标文件避免意外修改到不可信路径下的文件。测试 tests/test_main.py 中test_set_key_symlink_to_existing_file验证对指向target.env的符号链接调用set_key后目标文件内容保持不变而符号链接被替换为普通文件。恢复旧行为需显式传follow_symlinksTrue此时会先os.path.realpath(path)解析到真实路径再修改。test_set_key_follow_symlinks验证此时目标文件内容被修改且符号链接保持不变。破坏性变更文件权限位不再被重置1.2.2 引入三项 Breaking Changesdotenv.set_key和dotenv.unset_key不再在部分场景下跟随符号链接需follow_symlinksTrue恢复。CLI 的set和unset命令同样不再跟随符号链接。set_key、unset_key及 CLIset/unset不再将修改后的.env文件权限重置为0o600原文件的权限位现在被保留仅当文件需要被新建或原本不是普通文件时才使用0o600。源码验证rewrite()中通过os.lstat(path)读取原文件模式若stat.S_ISREG为真则保存stat.S_IMODE(...)写入临时文件后若存在original_mode则os.chmod(dest_path, original_mode)再os.replace原子替换。测试test_set_key_preserves_file_mode验证将文件 chmod 为0o640后执行set_key权限保持不变。其他变更dotenv run命令现在将额外 flags 直接透传给指定的命令。改进了 override 行为与 reference 页面的文档说明。增加了 FIFO 文件支持的文档对应下文 1.2.1 的 FIFO 支持。修正了包元数据中的 license 说明并补齐了 Python 3.14 classifier。版本 1.2.12025-10-26FIFO 与构建配置精简新增从 FIFOUnix 命名管道读取.env的能力load_dotenv可以接收一个 FIFO 路径作为dotenv_path。源码中_is_file_or_fifo()见 src/dotenv/main.py在os.path.isfile不成立时进一步通过os.stat判断stat.S_ISFIFOfind_dotenv查找文件时也使用该判定。测试 tests/test_fifo_dotenv.py 演示了完整用法os.mkfifo(fifo)创建命名管道在一个线程中向管道写入MY_PASSWORDpipe-secret主线程调用load_dotenv(dotenv_pathstr(fifo), overrideTrue)即可把值读入环境变量——适合从外部进程注入机密而避免落盘。构建配置进一步迁入pyproject.toml移除了setup.cfg。版本 1.2.02025-10-26PYTHON_DOTENV_DISABLED与 PEP 517 构建新增全局禁用开关本版本新增通过环境变量PYTHON_DOTENV_DISABLED禁用load_dotenv()的能力。其语义为若该变量被设置为真值1、true、t、yes、y大小写不敏感load_dotenv()直接返回False且不加载任何内容。该判定在 src/dotenv/main.py 的_load_dotenv_disabled()中实现先检查变量是否存在于os.environ再用.casefold()归一化后与真值集合比对。测试 tests/test_main.py 的test_load_dotenv_disabled用true、yes、1、t、y及其大写形式验证返回Falsetest_load_dotenv_enabled用、false、no、0、f、n等验证仍正常加载。典型使用场景在 CI、容器或测试环境中需要临时关闭.env加载时无需修改代码只需注入该环境变量。其他构建系统升级为 PEP 517 PEP 518使用build与 pyproject.toml[build-system]声明setuptools 77.0。增加 Python 3.14 支持。版本 1.1.x2025dotenv run的 execvpe 化与 Python 3.131.1.02025-03-25新增 Python 3.13 支持。dotenv run切换到execvpe在非 Windows 平台run_command()src/dotenv/cli.py用os.execvpe(command[0], argscommand, envcmd_env)替换当前进程从而获得更好的资源管理与信号处理——子进程信号直接作用于运行中的命令本身在 Windows 平台则回退为subprocess.Popencommunicate()sys.exit(returncode)。修复find_dotenv与load_dotenv在调试器/pdb 中运行时的查找目录现在会正确地在当前目录查找。源码中find_dotenv通过_is_debugger()sys.gettrace() is not None判断是否处于调试器环境若是则从os.getcwd()开始向上查找。1.1.12025-06-24修复 CLI 中find_dotenv在 Python 3.13 上的可靠性。在 Windows 上回退了execvpe的使用即采用上述 Popen 方案。Misc移除了 Python 3.8 支持。版本 1.0.x2023-2024稳定版收尾1.0.02023-02-24移除 Python 3.7 支持新增 Python 3.12-dev 支持。处理当前工作目录cwd不存在的情况enumerate_env()src/dotenv/cli.py捕获os.getcwd()抛出的FileNotFoundError并返回None避免 CLI 在异常目录下崩溃。1.0.12024-01-23优雅处理从 zipfile 导入的代码test_zip_imports.py有对应测试当模块位于 zip 归档中时__file__指向 zip 内部路径find_dotenv的帧遍历逻辑会跳过不存在路径的帧。允许在独立线程中启动时重载使用load_dotenv的模块。修复删除后文件句柄未关闭、rewrite 函数中的错误处理对应 src/dotenv/main.pyrewrite()中try/finally式的关闭逻辑测试test_rewrite_closes_file_handle_on_lstat_failure验证 lstat 失败时所有打开的句柄都被关闭。版本 0.21.xCLI 与类型现代化2022-2023CLI 支持python -m dotenv调用入口在 src/dotenv/main.pyif __name__ __main__: cli()同时 pyproject.toml 中[project.scripts]声明dotenv dotenv.__main__:cli因此dotenv命令与python -m dotenv等价。load_dotenv现在返回False而非此前可能抛错语义更明确True表示至少设置了一个环境变量False表示没有。CLIlist命令新增--format选项取值simple默认、json、shell、export见 tests/test_cli.py 的参数化测试。修复get/list命令在 env 文件无法打开时的错误信息src/dotenv/cli.py 的stream_file()打印Error opening env file: ...并以退出码 2 退出。修复 IPython 测试中已弃用的magic警告为dotenv_path添加StrPath类型别名License 对齐 BSD OSI 模板。版本 0.20.02022-03-24encoding参数全面化为get_key、set_key、unset_key增加encodingOptional[str]参数。至此库内所有读写入口load_dotenv、dotenv_values、get_key、set_key、unset_key都支持自定义编码。测试 tests/test_main.py 中test_set_key_encoding/test_get_key_encoding/test_unset_encoding用latin-1编码验证了非 UTF-8 场景。不再构建 universal wheelpy2.py3-none-any仅构建 py3 wheel。版本 0.19.xPython 版本边界与参数类型放宽0.19.0要求 Python 3.5正式放弃 Python 2 与 3.4。set_key/unset_key的dotenv_path参数类型从os.PathLike放宽为Union[str, os.PathLike]。load_dotenv/dotenv_values的stream参数现在接受文本流IO[str]包括io.StringIO(foo)与open(file.env, r)这类对象对应test_load_dotenv_string_io_utf_8、test_load_dotenv_file_stream测试。0.19.2修复set_key在追加新条目时若文件末尾缺少换行符则补上\n的问题对应 src/dotenv/main.pyset_key中的missing_newline逻辑。版本 0.18.02021-06-20引号策略的形式化本版本重新定义了set_key与dotenv set key value写值时的引号规则非法quote_mode抛ValueErrorquote_mode必须是always、auto、never三者之一src/dotenv/main.pyset_key开头即校验。写入时优先使用单引号而非双引号。不再剥离值两侧的引号如值本身是b会原样写入a\b\见test_set_key参数化用例。auto模式下仅当值由纯字母数字组成str.isalnum()时不加引号源码quote quote_mode always or (quote_mode auto and not value_to_set.isalnum())。注意 CLI 全局选项-q/--quote的三个取值always/never/auto与此一一对应src/dotenv/cli.py。版本 0.17.x-0.16.0run 覆盖控制与插值解析顺序0.17.0dotenv get key只输出值本身b不再输出keyvalue新增dotenv run --override/--no-override选项run命令默认overrideTrue见 src/dotenv/cli.py。0.16.0load_dotenv/dotenv_values的encoding默认值从None改为utf-8当前签名即encoding: Optional[str] utf-8。修复overrideFalse时变量展开variable expansion的解析顺序源码resolve_variables()src/dotenv/main.py中overrideTrue时先合并os.environ再合并.env内新值文件优先overrideFalse时先合并新值再合并os.environ环境优先。对应测试test_load_dotenv_redefine_var_used_in_file_no_overrideac已存在、文件写ab、d${a}结果为dc。版本 0.15.02020-10-28export前缀与自动建文件CLIset命令新增--export选项写入时在绑定前加export前缀如export KEYvalue使.env文件可直接作为 bash 脚本source执行。源码set_key的export: bool False参数控制line_out fexport {key_to_set}{value_out}\n或普通形式。set命令在未找到.env文件时会在当前目录创建.env。对应test_set_key_no_file对不存在的路径调用set_key返回(True, foo, bar)且文件被创建。修复重复 key 时可能出现的空展开值修复未加引号值中多个相邻空格/制表符的解析对应_unquoted_value正则([^\r\n]*)与parse_unquoted_value中re.sub(r\s#.*, , part).rstrip()。版本 0.14.0-0.11.0插值语义的演进0.14.0变量展开时文件中的定义优先于环境变量对应上述resolve_variables的overrideTrue合并顺序。0.13.0新增 Bash 风格的默认值语法${VAR:-default}。源码 src/dotenv/variables.py 的正则_posix_variable支持可选(?::-(?Pdefault[^\}]*))?分组Variable.resolve()中default self.default if self.default is not None else 未定义变量时回退到默认值。0.12.0使用 PyInstaller 打包时改用当前工作目录查找.env对应find_dotenv中getattr(sys, frozen, False)判定。0.11.0load_dotenv/dotenv_values新增interpolate参数设为False可禁用 POSIX 变量插值见 src/dotenv/main.pyDotEnv.dict()中if self.interpolate: resolve_variables(...)的分支。从warnings切换为logging输出当前为logger.warning(...)/logger.info(...)见with_warn_for_invalid_lines。插值行为一览可用dotenv_values验证测试见 tests/test_main.py输入是否插值结果a$b环境bc任意a$b$b不展开a${b}环境bc是aca${b}未定义是a空串a${b:-d}未定义是ada${b:-d}环境bc是ac文件内bd后a${b}是ad文件定义优先a${b}${b}环境bc是acc版本 0.10.x解析器重构与容错0.10.0支持 UTF-8 非引号值、行尾注释、值中的反斜杠、值中的换行Windows 上 Python 2 强制将环境变量转为str移除 Python 3.3 支持。0.10.1修复无值变量的解析。0.10.2添加类型提示并对用户公开load_dotenv/dotenv_values接受encoding参数当时默认None。0.10.3改进交互式环境检测_is_interactive()判断sys.ps1/sys.ps2或__main__无__file__重构解析器统一行为转义仅在双引号字符串中被解释为控制字符_double_quote_escapes匹配\\[\\\abfnrtv]。#仅在其前有空白时才被当作注释开始parse_unquoted_value中re.sub(r\s#.*, , part)。0.10.4类型标注变为可选格式错误的行打印警告支持无值的 key解析结果中 value 为Nonedotenv_values返回{foo: None}。0.10.5进一步拒绝更多畸形行如A: B、ab,c无值 key 不再告警纯注释行正确处理。版本 0.9.0-0.6.0CLI 成型期0.9.0CLI 新增--version参数由 src/dotenv/cli.py 的click.version_option(version__version__)提供支持从当前目录加载新增dotenv run命令——用.env中的变量运行任意 shell 命令。0.8.1cli支持变为可选需pip install python-dotenv[cli]pyproject.toml 中[project.optional-dependencies] cli [click5.0]src/dotenv/cli.py 在 import click 失败时提示该安装命令。0.8.0set_key/unset_key改为只修改受影响的行而不是解析后重写整个文件注释与其余内容原样保留rewrite()中逐行比对mapping.key key_to_set其余行dest.write(mapping.original.string)支持行内export前缀load_dotenv/dotenv_values支持StringIO。0.7.1移除对 iPython 的硬依赖。0.7.0支持通过.env覆盖系统环境变量override.env not found 警告默认关闭verboseFalse。0.6.x支持特殊字符\修复单引号问题CLIlist命令修复新增 iPython 支持%dotenvmagic见 src/dotenv/ipython.py%load_ext dotenv后可通过%dotenv加载支持-o/-v选项。0.6.0移除 Python 2.6 支持处理引号值中的转义字符与换行去除未加引号 key/value 周围空白新增 POSIX 变量展开。早期版本0.4.0-0.5.1能力奠基0.5.0新增find_dotenv方法——从调用处所在文件目录开始逐级向根目录查找.env_walk_to_root逐级向上遍历命中_is_file_or_fifo即返回。0.5.1修复find_dotenv从调用该函数的文件处开始搜索当前实现通过sys._getframe()回溯栈帧获取调用方文件路径。0.4.0CLI 新增-q/--quote选项控制.env中值的引号行为即现在的always/never/auto前身。从变更日志看当前 API 全貌综合上述演进当前版本的公开 API见 src/dotenv/init.py 的__all__为API核心参数说明load_dotenv(dotenv_pathNone, streamNone, verboseFalse, overrideFalse, interpolateTrue, encodingutf-8)路径或流二选一解析并写入os.environ返回是否至少设置了 1 个变量受PYTHON_DOTENV_DISABLED控制dotenv_values(dotenv_pathNone, streamNone, verboseFalse, interpolateTrue, encodingutf-8)同上只返回 dict不写环境无值 key 对应None内部overrideTruefind_dotenv(filename.env, raise_error_if_not_foundFalse, usecwdFalse)查找策略从调用文件目录逐级向上查找交互式/调试器/PyInstaller 下从 cwd 开始get_key(dotenv_path, key_to_get, encodingutf-8)单键读取找不到或无值返回Noneset_key(dotenv_path, key_to_set, value_to_set, quote_modealways, exportFalse, encodingutf-8, follow_symlinksFalse)写入/更新文件不存在则创建默认单引号、不跟随符号链接、保留原文件权限unset_key(dotenv_path, key_to_unset, quote_modealways, encodingutf-8, follow_symlinksFalse)删除键文件或 key 不存在时返回(None, key)并告警get_cli_string(pathNone, actionNone, keyNone, valueNone, quoteNone)CLI 辅助生成适合 shell 执行的dotenv命令字符串load_ipython_extension(ipython)iPython 集成注册%dotenvmagicCLI 命令面python -m dotenv或dotenv依赖python-dotenv[cli]全局选项-f/--file默认当前目录.env、-q/--quotealways/never/auto、-e/--export、--version。dotenv list [--format simple|json|shell|export]列出所有键值。dotenv get key只输出值。dotenv set key value写入并回显keyvalue。dotenv unset key删除键。dotenv run [--override/--no-override] command...携带.env变量执行命令非 Windows 下通过execvpe替换进程。结语从 0.4.0 的-q/--quote选项到 1.2.2 的 BOM 剥离与符号链接安全策略python-dotenv 的变更日志完整记录了一个配置加载工具走向生产可用的全过程。透过这些版本条目去阅读 src/dotenv/main.py、src/dotenv/parser.py、src/dotenv/cli.py 与 tests/test_main.py 等源码可以精确理解每个参数的真实语义——这正是把变更日志从新闻列表升华为技术手册的正确方式。赞分享后端【免费下载链接】python-dotenvReads key-value pairs from a .env file and can set them as environment variables. It helps in developing applications following the 12-factor principles.项目地址https://gitcode.com/gh_mirrors/py/python-dotenv点击查看免费下载相关推荐PaddleOCR 版本更新全览从 3.2.0 核心能力到 2.x 历史演进PaddleOCR 版本更新全览从 3.2.0 核心能力到 2.x 历史演进 PaddleOCR 的 版本更新记录 https://link.gitcode.人工智能计算机视觉深度学习从 Pyroscope 版本演进看连续剖析平台的核心能力构建v0.0.11 到 v0.37.2 变更史深度解析从 Pyroscope 版本演进看连续剖析平台的核心能力构建v0.0.11 到 v0.37.2 变更史深度解析 本篇文章以 Pyroscope连续剖析平台可观测性性能剖析后端运维观测python-for-android 版本演进全览从版本历史看 Android Python 打包工具链的关键能力变迁python for android 版本演进全览从版本历史看 Android Python 打包工具链的关键能力变迁 python for android开发工具构建工具移动开发上一篇未来已来IBM Granite-4.1系列模型路线图与131072序列长度的应用前景下一篇Smart-Admin技术栈选型为什么选择Vue3与Spring Boot构建现代化企业后台管理系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

地铁BAS PLC开发为何必须用STEP7 V5.5 2026/9/25 9:15:17

地铁BAS PLC开发为何必须用STEP7 V5.5

简介:本资源是一套完整的地铁环境监控系统(BAS)PLC控制程序工程包,面向自动化、轨道交通及工业控制领域的工程师、高校师生与PLC初学者,聚焦西门子S7系列PLC在真实地铁场景中的工程化应用。资源基于STEP7 V5.5开发&…

阅读更多 →
安全养虾:[Windows]Docker部署OpenClaw详细过程记录——TaoToken统一Key接入飞书机器人 2026/9/25 9:15:17

安全养虾:[Windows]Docker部署OpenClaw详细过程记录——TaoToken统一Key接入飞书机器人

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
A股光模块五大龙头量化横评:谁在AI算力浪潮中最受益? 2026/9/25 9:15:11

A股光模块五大龙头量化横评:谁在AI算力浪潮中最受益?

这两年做投研交流,我被问得最多的一个问题是:"AI算力行情走到现在,光模块还能不能看?" 问这话的人,有2023年就在车上的老玩家,也有2025年才反应过来想上车的踏空者。我的回答一直很明确&#xff…

阅读更多 →
【SAP BASIS】Section 5: SAP System Configuration 2026/9/25 9:15:04

【SAP BASIS】Section 5: SAP System Configuration

12. System Parameters【RZ10】默认系统配置再看下一个instance,修改memory,修改密码(点击Parameter)。点击Parameter,就可以修改配置的参数。【SE38】程序RSPARA,查看所有密码可以查看所有的参数&#xff…

阅读更多 →
【SAP BASIS】Section 2: SAP System 2026/9/25 9:15:04

【SAP BASIS】Section 2: SAP System

目录 2. Architecture of SAP NetWeaver AS 3. Logon Groups 4. AS ABAP Processes 5. Transactional Processing 6. Gateway & Web Prcoess 2. Architecture of SAP NetWeaver AS 三层架构:表示层、应用层、服务层 MS消息服务器(仅中央实例&…

阅读更多 →
@vinext/cloudflare 完全指南:为 vinext 接入 Workers KV、CDN 缓存、Response Store 与 Cloudflare Images 2026/9/25 9:14:45

@vinext/cloudflare 完全指南:为 vinext 接入 Workers KV、CDN 缓存、Response Store 与 Cloudflare Images

后端Web框架SSR 【免费下载链接】vinext Vite plugin that reimplements the Next.js API surface — deploy anywhere 项目地址: https://gitcode.com/gh_mirrors/vi/vinext 点击查看 免费下载 vinext/cloudflare 是 vinext(Vite plugin 重新实现 Next…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉