

你是否曾盯着终端,焦灼地等待 flake8 和 black 跑完一个大型项目?又或者被 isort 和 autoflake 的配置搞得晕头转向?别担心,今天介绍的这款 “All-in-One”神器,能让你彻底告别工具链的臃肿与缓慢。
大家好,我是你们的老朋友。在Python开发中,维护代码风格和质量是一道必答题。但传统的答案——用Flake8检查代码、用Black格式化、用isort排序导入——这套组合拳虽好,却有几个痛点:速度慢、配置散、工具多。
直到我遇见了它——Ruff。一个用Rust写的,号称比现有工具快10-100倍的Python代码“闪电侠”。它不止快,更能一站式完成代码检查(Lint)和格式化(Format),替代你桌面上那一排工具。
Ruff是什么?
Ruff 是一款用 Rust 编写的超高速 Python 代码检查器和格式化工具。它的设计目标是比 Flake8、Black 和 isort 等现有工具快 10 到 100 倍,同时提供统一的代码质量管理界面。Ruff 可以用一个速度极快的解决方案替代包括 Flake8、Black、isort、pyupgrade 和 autoflake 在内的多个工具。
今天,就让我们用一篇文章的时间,彻底掌握这个新时代的Python开发利器。
Ruff的核心优势就是快。有多快?官方数据显示,检查像pandas这样庞大的代码库,Flake8需要30秒,而Ruff仅需0.5秒。这种速度意味着你可以在保存文件时实时检查,而无需任何等待。
安装它,只需要一行命令:
# 推荐使用 uv,体验如飞uv add ruff --dev# 或者用 pippip install ruff上手更是简单到离谱。 假设我们有一个“脏兮兮”的Python文件 example.py:
# example.py - 一个充满“问题”的示例文件from typing import Iterableimport os # 未使用的导入import sys # 未使用的导入defsum_even_numbers(numbers: Iterable[int]) -> int:"""Given an iterable of integers, return the sum of all even numbers."""return sum( num for num in numbersif num % 2 == 0 )unused_var = 42# 定义了但未使用的变量让我们请Ruff医生来诊断一下:
# 1. 代码检查 (Lint)ruff check example.py输出:
example.py:3:8: F401 [*] `os` imported but unusedexample.py:4:8: F401 [*] `sys` imported but unusedexample.py:11:1: F841 Local variable `unused_var` is assigned to but never usedFound 3 errors.[*] 2 fixable with the `--fix` option.看,它精准地找到了未使用的导入和变量。更棒的是,它还提示有2个问题可以自动修复!
# 2. 一键自动修复ruff check --fix example.py运行后,os 和 sys 的导入语句被自动删除。修复后的文件清爽多了。
# 3. 代码格式化 (Format)ruff format example.py输出:1 file reformatted现在,你的代码不仅正确,而且风格统一(比如自动调整了缩进和换行)。
看,仅仅3条命令,我们就完成了从检查、修复到格式化的全过程。 这效率,是不是像给开发流程装上了涡轮增压?
Ruff的强大之处在于其高度可配置性。它支持 pyproject.toml、ruff.toml 或 .ruff.toml 配置文件,且配置是级联的,非常适合monorepo项目。
一个标准的 pyproject.toml 配置可能长这样:
[tool.ruff]# 全局设置line-length = 88 # 和Black默认保持一致target-version = "py310" # 你的项目Python版本[tool.ruff.lint]# 选择要启用的规则集,Ruff有800+条规则!select = [ "E", # pycodestyle 错误 "W", # pycodestyle 警告 "F", # Pyflakes (类似未使用变量/导入的核心检查) "UP", # pyupgrade (自动升级Python语法) "B", # flake8-bugbear (常见bug预防) "I", # isort (导入排序,直接替换isort!) "C4", # flake8-comprehensions (推导式优化)]# 忽略某些规则ignore = ["E501"] # 暂时忽略“行过长”,让formatter处理[tool.ruff.format]# 格式化器设置,保持团队风格统一quote-style = "double" # 字符串使用双引号indent-style = "space" # 缩进使用空格skip-magic-trailing-comma = false # 保留末尾逗号,便于diff进阶技巧:按文件/目录配置规则有时候,测试文件或迁移脚本需要特殊照顾,Ruff可以轻松实现:
[tool.ruff.lint.per-file-ignores]# 在测试文件中允许使用 `assert` (S101规则)"tests/**/*.py" = ["S101"]# 在 `__init__.py` 中,未使用的导入可能是对外暴露的API,可以忽略"**/__init__.py" = ["F401"]一键迁移: 如果你从 Black + isort + Flake8 迁移过来,Ruff可以无缝接手你的旧配置,让你无痛切换。
单独使用命令已经很棒,但将Ruff集成到你的开发环境和CI/CD中,才能发挥最大威力。
1. 编辑器集成(以VS Code为例)安装官方 Ruff 扩展后,在 settings.json 中加入:
{"[python]": {"editor.defaultFormatter": "charliermarsh.ruff","editor.codeActionsOnSave": {"source.organizeImports": "always", // 保存时自动整理导入(用Ruff的I规则)"source.fixAll": "always"// 保存时自动修复所有可修复问题 } }}从此,保存即规范,编码体验行云流水。
2. 预提交钩子(Pre-commit)在 .pre-commit-config.yaml 中配置:
repos:-repo:https://github.com/astral-sh/ruff-pre-commitrev:v0.12.8# 使用最新版本hooks:# Ruff linting-id:ruffargs:[--fix]# 提交前自动修复# Ruff formatting-id:ruff-format这样,不规范的代码根本无法被提交到仓库。
3. CI/CD 集成(以GitHub Actions为例)在 .github/workflows/lint.yml 中创建流水线:
name:Lint&Formaton:[push,pull_request]jobs:ruff:runs-on:ubuntu-lateststeps:-uses:actions/checkout@v4-name:RunRuffuses:astral-sh/ruff-action@v1with:args:"check --fix ."# 在CI中也可以尝试自动修复-name:CheckFormattingrun:ruffformat--check.# 检查格式化是否符合要求确保团队每一次合并请求的代码都是整洁的。
Ruff的出现,堪称Python工具链的一次“降维打击”。它用极致的速度和统一的设计,解决了多年以来Python代码质量工具“散、慢、繁”的痛点。
总结一下,它的核心优势:
如果你的团队还在为维护复杂的代码质检工具链而烦恼,或者受困于缓慢的检查速度,Ruff无疑是当前最优、最未来的选择。
是时候给你的项目来一次“工具链升级”了。 你尝试过Ruff了吗?在从传统工具迁移的过程中遇到了什么有趣的问题或惊喜?欢迎在评论区分享你的体验!

长按👇关注- 数据STUDIO -设为星标,干货速递
