Ruff 是一个用 Rust 编写的极快的 Python linter 和格式化程序,旨在替换和改进现有的工具,如 Flake8、Black 和 isort。它提供了10-100倍的性能提升,同时通过700多个内置规则和流行插件的重新实现保持了奇偶校验。
Ruff 支持兼容3.12的现代 Python 和“pyproject.toml”。它还提供自动修复支持、缓存和编辑器集成。Ruff 对 monorepo 友好,用于 Pandas、FastAPI 等主要开源项目。通过将速度、功能和可用性相结合,Ruff 将 linting、格式化和自动修复集成到一个统一的工具中,该工具比现有选项快几个数量级。
Ruff 入门
我们可以通过使用 PIP 轻松安装“ruff”。
pip install ruff
为了测试运行 Ruff 的难易程度和速度,我们可以使用 DagHub 存储库 kingabzpro/Yoga-Pose-Classification。你可以克隆它或使用自己的项目进行格式化。
首先,我们将对项目运行一个 linter。你还可以通过将“.”替换为文件位置来对单个文件运行 linter。
ruff check .
Ruff 发现了9个错误和1个可修复的错误。为了修复错误,我们将使用--fix 标志。
ruff check --fix .
要格式化项目,我们将使用“ruff format”命令。
$ ruff format .
>>> 3 files reformatted
Ruff linter 和格式化程序对代码进行了大量更改。但是,为什么我们需要这些工具呢?答案很简单-它们有利于执行编码标准和约定。因此,你和你的团队都可以专注于代码的重要方面。此外,它们还有助于提高我们代码的质量、可维护性和安全性。
对 Jupyter Notebook 进行 linting 和格式化
若要在项目中使用 Ruff for Jupyter Notebooks,必须创建“ruff.toml”文件并添加以下代码:
extend-include = ["*.ipynb"]
你也可以对“pyproject.toml”文件执行相同的操作。
之后,重新运行命令以查看它对 Jupyter 笔记本文件所做的更改。
2个文件被重新格式化,我们有2个笔记本文件。
$ ruff format .
>>> 2 files reformatted, 3 files left unchanged
我们还通过再次运行“check”命令修复了这些文件中的问题。
$ ruff check --fix .
>>> Found 51 errors (6 fixed, 45 remaining).
最终的结果令人惊叹。它已经在不破坏代码的情况下进行了所有必要的更改。
Ruff 配置
通过编辑“ruff.toml”文件来调整 linter 和格式化程序设置,可以轻松地为 Jupyter Notebooks 配置 Ruff。有关更多详细信息,请查看配置 Ruff 文档。
target-version = "py311"
extend-include = ["*.ipynb"]
line-length = 80
[lint]
extend-select = [
"UP", # pyupgrade
"D", # pydocstyle
]
[lint.pydocstyle]
convention = "google"
GitHub Action & Pre-commit Hook
开发人员和团队可以通过“ruff-pre-commit”将 Ruff 用作预提交钩子:
- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.1.5
hooks:
# Run the linter.
- id: ruff
args: [ --fix ]
# Run the formatter.
- id: ruff-format
它也可以通过“ruff-action”用作 GitHub Action:
name: Ruff
on: [ push, pull_request ]
jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: chartboost/ruff-action@v1
Ruff VSCode 扩展
Ruff 最令人愉快的方面是它的 VSCode 扩展。它简化了格式设置和 linting,消除了对第三方扩展的需求。只需在扩展市场上搜索 Ruff 即可安装它。
我已经配置了“setting.json”,以便在保存时格式化。
结论
Ruff 提供闪电般快速的 linting 和格式化,以实现更简洁、更一致的 Python 代码。Ruff 在 Rust 中重新实现了700多个内置规则以提高性能,从 Flake8、isort 和 pyupgrade 等流行工具中汲取灵感,以实施一套全面的编码最佳实践。精心策划的规则集侧重于捕获错误和关键样式问题,而不会过多吹毛求疵。
与预提交钩子、GitHub Actions 和 VSCode 等编辑器的无缝集成使将 Ruff 整合到现代 Python 工作流程中变得容易。无与伦比的速度和精心设计的规则集使 Ruff 成为重视快速反馈、干净代码和顺畅团队协作的 Python 开发人员的必备工具。Ruff 通过将强大的功能与出色的性能相结合,为 Python linting 和格式化设定了新标准。