Simple better than complex

Why pyproject.toml ?

如果你还没有听说过 pyproject.toml ,那么请看一眼最近主力开发的 Python 项目根目录,我想它大概是长这样的

一眼看上去全是配置文件就一个感觉 —— 杂乱。

杂乱带来的最大坏处:管理困难 —— 各种配置的文件类型、配置语法并不统一,对任何刚接入项目的人都有较高学习成本。

所以,类似 NodeJS 的 package.json ,Python 世界的统一项目配置文件 —— pyproject.toml 就显得异常重要了。

Why toml ?

一个比较大的疑问,为什么要选择用 toml 这种使用面并不算广泛的文件格式?

由于长期浸淫在 k8s 里,我第一反应觉得是 yaml 更合适,毕竟表达能力更强。但待我仔细阅读了 PEP 里的相关比较,发现 toml 的选型反而是正确的。

首先,要搞清楚 pyproject.toml 的使用场景,它是配置的集合,而不是业务逻辑对象,过于复杂的配置反而不利于其发展,毕竟工具配置都是开发的“边角料时间”处理的,不能有太复杂的理解门槛。

PEP 里阐述的 yaml 作为项目配置文件的缺点:

  • 过于复杂灵活,可能会导致不同解析器不能互相解析
  • 本身不够安全,而能解决该问题的 PyYAML 依赖过重

主流工具支持

好孩子

详见:

carlosperate/awesome-pyproject

坏孩子

flake8

作者不愿意支持,看起来是强迫症不够强烈

好在,还是有其他强迫着患者存在,外挂实现了 flake9 ,专门支持了 pyproject.toml

mypy

”仁慈的独裁者“并不支持,所以目前只能留着 mypy.ini 这一根独苗了。


一枝独秀