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
这一根独苗了。
一枝独秀