📌 项目地址:astral-sh/ruff | ⭐ 50,979 颗星 | 🔧 Rust

一个 Python 项目的工具链能有多碎

一个正常规模的 Python 项目,代码质量工具往往是拼出来的:Flake8 做 lint,还得装一堆插件补功能;Black 管格式化;isort 排 import;pydocstyle 查文档字符串;pyupgrade 把旧语法升级成新写法;autoflake 删无用引用。每个工具单独装、单独配、单独跑一遍,CI 里这一段经常要几十秒到几分钟。

Ruff 做的事很直接:把这些工具的活全部用 Rust 重写,塞进一个命令里。官方数字是比 Flake8、Black 这类工快 10 到 100 倍。README 里的演示是从零 lint 完整个 CPython 代码库,这个体量,传统工具链跑下来的时间够你泡杯茶。

基本盘

  • Rust 写的,pip 一行装好:pip install ruff
  • 配置直接写在 pyproject.toml,不用再维护 .flake8、setup.cfg 一堆文件
  • 内置 900 多条规则,flake8-bugbear 这类热门插件是原生重实现的,不是套壳调用
  • 兼容 Python 3.15
  • 五万多 star(截至发稿)

能替代的工具清单官方列得很清楚:Flake8(含几十个插件)、Black、isort、pydocstyle、pyupgrade、autoflake。对 Flake8、isort、Black 三个,官方明确以 drop-in parity 为目标,FAQ 里各有一篇对比文档,差异点列得比较细。

几个关键设计

快不是噱头,快改变用法。 lint 慢的时候,你只能等 CI 跑完才知道问题;快到毫秒级之后,保存文件时实时检查就成了常态。格式化也一样,不再是需要单独等待的步骤。Ruff 还有内置缓存,没改过的文件直接跳过,增量场景下更快。

能自动修就不只是报错。 fix 功能可以直接改掉问题,比如删掉没用到的 import。很多规则从“报给你看”变成“直接修好”。

monorepo 友好。 配置文件支持层级化和级联发现,不同子目录可以挂不同的配置。仓库越大,这个功能越省心。

编辑器集成是第一方维护的。 VS Code 扩展由官方自己维护,其他编辑器的接法在文档 Editors 一节里。

谁在生产环境用

FastAPI、Pandas、SciPy、Hugging Face Transformers、Apache Airflow、Apache Superset。这几个项目的代码量都在那里摆着,CI 全程跑 Ruff 没出问题,成熟度不用太担心。FastAPI 的作者 Sebastián Ramírez 也公开推荐过,README 的 Testimonials 部分有原文链接。

迁移前想两件事

一是兼容性。虽然号称 drop-in parity,但 900 多条规则毕竟是重新实现的,输出和原工具不可能逐字节一致。稳妥的做法是先只跑 lint、不开 fix,对比输出差异,确认没问题再打开自动修复。

二是项目归属。Ruff 背后是 Astral 这家公司,同一家还做了 uv(包管理)和 ty(类型检查)。有公司养着的团队,迭代快、文档全,但项目走向也和这家公司的开源策略绑在一起。许可协议就在仓库里,上生产前自己确认一遍。

怎么开始

不想装的话,先去 play.ruff.rs 在线试,贴段代码进去就能看到效果。觉得可以了就 pip install ruff,完整文档在 docs.astral.sh/ruff/。

如果你还在维护 Flake8 + Black + isort 的组合,这个项目值得今天就试一下:一个依赖、一份配置、快一到两个数量级。

这篇文章对你有帮助吗?

发表回复