📌 项目地址:astral-sh/ruff | ⭐ 50,979 颗星 | 🔧 Rust
Python 工具链为什么慢
一个典型的 Python 项目里,代码质量工具是拼出来的:Flake8 做 lint,往往还要装十几个插件;Black 格式化;isort 排 import;pydocstyle 查文档字符串;pyupgrade 升级旧语法;autoflake 删无用代码。每个工具单独安装、单独配置、单独跑一遍,CI 里光这一段就要几十秒甚至几分钟。
Ruff 把这些全部用 Rust 重写,塞进一个工具里。官方给的数字是比现有 linter(如 Flake8)和 formatter(如 Black)快 10 到 100 倍。README 里的演示是从零 lint 整个 CPython 代码库,这个体量的活儿,传统工具链想想就知道要多久。
基本情况
- 仓库:astral-sh/ruff,用 Rust 写的
- pip 直接装,一个包搞定
- 原生支持 pyproject.toml
- 内置 900 多条规则,包括对 flake8-bugbear 这类热门插件的原生重实现
- 兼容 Python 3.15
- 五万多 star(截至发稿)
安装就一行:
pip install ruff
几个我认为关键的设计
替换是“整套”的。 Ruff 能同时替掉 Flake8(含一堆插件)、Black、isort、pydocstyle、pyupgrade、autoflake。对 Flake8、isort、Black 三者官方明确以 drop-in parity 为目标,FAQ 里有三篇专门的对比文档讲清差异。
快带来的实际变化。 lint 快到可以在保存文件时实时跑,不用再等 CI。格式化也不再是需要单独排期的慢步骤。
自动修复。 支持 fix 功能,比如自动删掉没用的 import。很多问题不是报出来让你改,而是直接改掉。
内置缓存。 改过的文件才重新分析,没动的跳过,增量场景下更快。
monorepo 友好。 配置支持层级化和级联发现,不同子目录可以挂不同配置。大仓库里这一点很实用。
编辑器集成。 官方第一方维护 VS Code 扩展,其他编辑器的接入方式在文档 Editors 章节里。
谁在用
FastAPI、Pandas、SciPy、Hugging Face Transformers、Apache Airflow、Apache Superset。这几个项目代码量都不小,CI 能扛住它们,成熟度基本不用担心。FastAPI 作者 Sebastián Ramírez 也公开推荐过(README 的 Testimonials 部分有原文链接)。
迁移前想清楚两件事
一是兼容性。虽然宣称 drop-in parity,但 900 多条规则是重新实现的,和原工具不可能逐字节一致。我的建议是先只跑 lint 不开 fix,对比一下输出差异再决定。
二是项目归属。Ruff 背后是 Astral 这家公司,同一家还做了 uv(包管理器)和 ty(类型检查器)。公司养着的团队意味着迭代很快、文档很全,但项目的走向也和这家公司的开源策略绑在一起。对这个取舍,我的看法是:许可协议就在仓库里,自己确认一遍再上生产。
总结
如果你还在维护 Flake8 + Black + isort 的组合,Ruff 值得马上试:一个依赖、一份 pyproject.toml 配置、快一到两个数量级。具体命令和规则列表 README 没展开,官方文档在 docs.astral.sh/ruff/,不想装的话先去 play.ruff.rs 在线试也行。