Ruff - 极速 Python 代码检查和格式化工具
Ruff 是一个用 Rust 编写的极速 Python 代码检查(linting)和格式化(formatting)工具。它的目标是成为比现有工具(如 Flake8、Black、isort 等)快几个数量级,同时将更多功能集成到一个统一的界面下。
如果您厌倦了等待 Flake8、isort 或 Black 运行完成,那么 Ruff 绝对值得一试。它的速度优势可以显著提升您的开发效率和工作流程。
为什么选择 Ruff?
传统的 Python 代码检查和格式化工具通常是用 Python 本身编写的,这在性能上存在一定的限制。Ruff 利用 Rust 的高性能特性,实现了惊人的速度提升。
- 极速: 比现有工具快 10-100 倍,甚至更快。
- 功能集成: 可以替代 Flake8(及其大量插件)、isort、Black、pydocstyle、pyupgrade、autoflake 等多种工具。
- 统一接口: 通过一个命令 (
ruff
) 完成多种任务,简化了工具链。 - 易于安装和配置: 通过 pip 安装,支持
pyproject.toml
进行配置。
主要特性
- Rust 实现: 带来卓越的性能。
- pip 安装: 方便快捷。
- 支持
pyproject.toml
: 现代 Python 项目的标准配置方式。 - Python 3.13 兼容: 紧跟 Python 版本更新。
- 与现有工具高度兼容: 可以作为 Flake8、isort、Black 的直接替代品。
- 内置缓存: 避免重复分析未修改的文件。
- 自动修复: 支持自动修复多种代码问题(例如,移除未使用的导入)。
- 超过 800 条内置规则: 原生实现了许多流行的 Flake8 插件规则,如 flake8-bugbear 。
- 编辑器集成: 为 VS Code 等编辑器提供官方支持。
- Monorepo 友好: 支持分层和级联配置。
速度有多快?
Ruff 的速度是其最大的亮点。以下是一些来自社区的评价 :
- FastAPI 创建者 Sebastián Ramírez: “Ruff 太快了,有时候我会在代码中故意添加一个 bug,只是为了确认它确实在运行并检查代码。”
- Elementl 创始人 Nick Schrock: “为什么 Ruff 是一个游戏规则改变者?主要是因为它快了近 1000 倍。字面意思。不是打字错误。在我们最大的模块(dagster 本身,25 万行代码)上,pylint 需要大约 2.5 分钟,在我的 M1 上并行使用 4 个核心。对我们整个代码库运行 ruff 只需 0.4 秒。”
- isort 创建者 Timothy Crosley: “刚把我的第一个项目切换到 Ruff。到目前为止只有一个缺点:它太快了,我直到故意引入一些错误才相信它在工作。”
安装
使用 pip 安装 Ruff 非常简单 :
1 | pip install ruff |
基本用法
安装完成后,您可以在终端中使用 ruff
命令。
代码检查 (Linting):
检查当前目录下的 Python 文件:
1 | ruff check . |
检查并自动修复代码问题:
1 | ruff check . --fix |
代码格式化 (Formatting):
格式化当前目录下的 Python 文件:
1 | ruff format . |
格式化并预览修改,但不实际写入文件:
1 | ruff format . --check |
配置
Ruff 主要通过项目的 pyproject.toml
文件进行配置。您可以在其中指定要启用的规则、忽略的文件、Black 兼容性设置等 Source.
1 | # pyproject.toml |
结论
Ruff 凭借其惊人的速度和强大的功能集成,正在迅速成为 Python 生态系统中首选的代码检查和格式化工具。它能够替代多种现有工具,简化开发流程,并显著提高代码质量检查的效率。如果您追求更快的反馈循环和更简洁的工具链,强烈推荐您尝试 Ruff。