找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2166

积分

0

好友

288

主题
发表于 前天 14:58 | 查看: 13| 回复: 0

最近逛GitHub上的热门项目时,有个现象挺有意思。不管是Rust项目里的 Cargo.toml,还是Python项目里的 pyproject.toml,甚至连很多AI智能体的配置里,你都会反复看到一个名字:TOML

开源项目文件列表截图,pyproject.toml被高亮

这就让人有点好奇了:为什么开发者们放着大家熟知的 JSON 和 YAML 不用,反而纷纷拥抱这个“新面孔”呢?

说白了,原因可能很简单:人类的耐心是有限的,而配置文件的“坑”是无限的。

什么是 TOML?

TOML 的全称是 Tom‘s Obvious Minimal Language,翻译过来就是 Tom 的浅显的、极简的语言

从名字就能看出,它的作者 Tom Preston-Werner(他也是 GitHub 的创始人之一)设计它的初衷就两点:显而易见极简

TOML作者Tom Preston-Werner照片

它的设计目标非常明确:让一个不怎么懂代码的人,也能一眼看懂配置写了什么,并且能够手动修改而不出错。

TOML配置文件代码示例截图

“看起来是不是有点像 Windows 时代我们熟悉的 .ini 文件?”
pip.ini 配置文件截图

为什么 JSON 和 YAML “失宠”了?

在 TOML 流行起来之前,配置文件领域主要是 JSON 和 YAML 的天下。但它们各自都有一些让开发者头疼的问题。

JSON:对机器友好,对人刻薄

JSON 格式规整,机器解析起来非常高效,但写起来对人就不那么友好了。满眼的大括号、中括号,还有必须严格遵守的双引号规则。最让人抓狂的莫过于那条“最后一行不能加逗号”的潜规则,一旦漏写或多写一个标点,整个解析过程立刻失败。

{
  "global": {
    "cache-dir": "D:\\Programs\\Python\\Python36\\pipcache",
    "timeout": 6000,
    "index-url": "http://mirrors.aliyun.com/pypi/simple/"
  },
  "install": {
    "trusted-host": "mirrors.aliyun.com"
  }
}

YAML:对人友好,对空格变态

YAML 看起来确实清晰优雅,层级分明,可读性很高。但它对缩进(空格)有着近乎变态的严格要求。在 YAML 里,缩进不仅仅是为了美观,它直接决定了数据的结构和层级。稍微多敲或少敲一个空格,整个配置的逻辑就可能完全乱掉,而且这种错误非常隐蔽,排查起来极其困难。

global:
  cache-dir: D:\Programs\Python\Python36\pipcache
  timeout: 6000
  index-url: http://mirrors.aliyun.com/pypi/simple/
install:
  trusted-host: mirrors.aliyun.com

TOML:走第三条路

TOML 则试图在两者之间找到平衡。它既有 JSON 那种清晰、无歧义的逻辑结构,又保留了类似传统 .ini 文件的简洁和亲切感,降低了人工编写和阅读的门槛。

[global]
cache-dir = "D:\\Programs\\Python\\Python36\\pipcache"
timeout = 6000
index-url = "http://mirrors.aliyun.com/pypi/simple/"

[install]
trusted-host = "mirrors.aliyun.com"

相比之下,你觉得哪种风格的配置文件更顺眼呢?

怎么在 Python 中读取 TOML?

Python 3.11 版本开始,标准库就内置了 tomllib 模块,这意味着你无需安装任何第三方库就能直接解析 TOML 文件,非常方便。

import tomllib

def read_toml_config(filepath="config.toml"):
    with open(filepath, "rb") as f:
        # 使用 tomllib.load() 将文件内容解析为字典
        data = tomllib.load(f)
    return data

# 示例:读取并访问数据
config_data = read_toml_config("pyproject.toml")  # 假设你的 TOML 文件名为 pyproject.toml
print(f"全局缓存目录: {config_data['global']['cache-dir']}")
print(f"超时设置: {config_data['global']['timeout']}")

为什么开源社区都在跟进?

Python 社区

在 Python 生态中,pyproject.toml 已经成为事实上的新标准。它成功地统一了之前分散的 setup.pyrequirements.txtsetup.cfg 等多个文件,将项目元数据、依赖管理和构建配置集中到了一个文件中,大大简化了项目结构。

Rust 社区

以严谨和安全著称的 Rust 语言,从诞生之初就选择了 TOML 作为其包管理器 Cargo 的配置格式。Cargo.toml 文件定义了项目的所有元信息、依赖项和构建脚本,这种一致性也推动了 TOML 在系统编程领域的普及。

DevOps 领域

在容器化和持续集成/持续部署 (CI/CD) 领域,清晰的配置至关重要。越来越多的工具开始采用 TOML 来编写配置文件,一个重要原因就是为了减少因人工修改复杂 YAML 或 JSON 配置时,因格式错误而引发的线上事故。

结论:我该换用 TOML 吗?

这取决于你的具体场景:

  • 如果你的项目配置非常简单,只有寥寥几行,那么继续使用 JSON 完全没问题。
  • 如果你的配置结构非常复杂、嵌套很深,并且主要由程序生成和读取,很少需要人工干预,那么 YAML 或许还能胜任。
  • 但如果你希望你的项目配置看起来更现代、更规范,或者你特别关心配置文件的可读性可维护性,希望用户或协作者在修改配置时能轻松上手、少踩坑,那么切换到 TOML 会是一个值得考虑的选择。

技术的选择往往是对特定场景下利弊权衡的结果。TOML 的流行,反映出开发者社区对“开发者体验”和“配置可靠性”的日益重视。当你在云栈社区浏览或启动下一个开源项目时,不妨考虑一下它。




上一篇:面试官问我如何系统化掌握AI编程?分享我的五步学习路径与工具实战
下一篇:2026年2月全球AI融资破纪录:单月1890亿美元背后的五大趋势
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-17 16:43 , Processed in 0.603759 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表