跳到主要内容 Python 代码检查工具 Ruff 使用指南 | 极客日志
Python
Python 代码检查工具 Ruff 使用指南 Ruff 是一款基于 Rust 编写的高性能 Python 代码检查器和格式化工具,旨在替代 Flake8、Black、isort 等工具,提供显著的性能提升。 Ruff 的核心特性、多种安装方式(pip、uv、brew 等)、Linter 和 Formatter 的基本用法及配置方法。内容涵盖规则设置、自动修复、VSCode 插件集成、预提交钩子及 CI/CD 流程。通过统一工具链,Ruff 能大幅优化 Python 项目的开发体验和代码质量。
忘忧 发布于 2026/3/30 更新于 2026/4/18 13 浏览1. Ruff 简介
Ruff 是一款用 Rust 编写的高性能 Python 代码检查器(linter)和格式化工具(formatter),由 Astral 公司开发。它的目标是作为 Flake8、Black、isort 等多个 Python 工具的统一替代品,提供 10-100 倍的性能提升。
核心特性
⚡ 极致性能 :比现有工具快 10-100 倍
🐍 pip 安装 :通过 pip install ruff 即可安装
🛠️ 统一工具 :同时替代 Flake8、Black、isort、pydocstyle、pyupgrade、autoflake 等
📦 内置缓存 :自动跳过未更改的文件
🔧 自动修复 :支持大量规则的自动修复
📏 800+ 内置规则 :包含主流 Flake8 插件的重新实现
⌨️ 编辑器集成 :官方支持 VS Code 等主流编辑器
🌎 Monorepo 友好 :支持分层级联配置
性能优势 Ruff 的性能提升带来了显著的开发体验改善。以下是来自实际项目的反馈:
'Ruff 快到有时候我故意在代码里加个 bug 来确认它真的在运行检查' —— FastAPI 创始人 Sebastián Ramírez
'在我 25 万行的 dagster 模块上,pylint 需要 2.5 分钟,而 Ruff 检查整个代码库只需 0.4 秒' —— Elementl 创始人 Nick Schrock
2. 安装 Ruff
推荐安装方式
uv tool install ruff@latest
uv add --dev ruff
pip install ruff
pipx install ruff
uvx ruff check
uvx ruff format
其他安装方式
curl -LsSf https://astral.sh/ruff/install.sh | sh
powershell -c "irm https://astral.sh/ruff/install.ps1 | iex"
brew install ruff
conda install -c conda-forge ruff
docker run -v .:/io --rm ghcr.io/astral-sh/ruff check
验证安装 ruff --version
ruff check --help
ruff format --help
3. Ruff Linter(代码检查器)
基本用法
ruff check
ruff check --fix
ruff check --watch
ruff check path/to/code/
ruff check path/to/file.py
ruff check --fix --unsafe-fixes
ruff check --exit-zero
规则配置 Ruff 使用类似 Flake8 的规则代码系统(如 F401、E501)。规则通过 pyproject.toml 或 ruff.toml 配置:
[tool.ruff.lint]
select = ["E" , "F" , "B" , "UP" , "SIM" , "I" ]
ignore = ["E501" , "F401" ]
fixable = ["ALL" ]
unfixable = ["F401" ]
推荐规则集 [tool.ruff.lint]
select = [
"E" ,
"F" ,
"UP" ,
"B" ,
"SIM" ,
"I" ,
]
自动修复安全级别
安全修复 :保证代码语义不变,仅移除注释当删除整个语句时
不安全修复 :可能改变运行时行为、移除注释或改变异常类型
ruff check --fix --unsafe-fixes
错误抑制
退出码
0:未发现 violations 或所有问题已自动修复
1:发现 violations
2:异常终止(配置错误、CLI 选项无效或内部错误)
4. Ruff Formatter(代码格式化工具)
基本用法
ruff format
ruff format path/to/code/
ruff format path/to/file.py
ruff format --check
ruff format --diff
设计理念 Ruff Formatter 是 Black 的替代品,保持 99.9% 以上的兼容性。主要差异:
性能显著提升
支持更多配置选项(引号风格、缩进风格等)
格式化 f-string 表达式部分
配置选项
[tool.ruff]
line-length = 88
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
line-ending = "auto"
docstring-code-format = false
docstring-code-line-length = "dynamic"
格式化抑制
not_formatted = 3
also_not_formatted = 4
a = [1 , 2 , 3 , 4 , 5 ]
与 Linter 的规则冲突 使用 Formatter 时建议禁用以下 Linter 规则:
[tool.ruff.lint]
ignore = [
"W191" ,
"E111" ,
"E114" ,
"E117" ,
"D206" ,
"D300" ,
"Q000" ,
"Q001" ,
"Q002" ,
"Q003" ,
"COM812" ,
"COM819" ,
]
5. 完整配置示例
[tool.ruff]
line-length = 88
target-version = "py38"
include = ["*.py" , "*.pyi" , "**/pyproject.toml" ]
exclude = [".git" , "__pycache__" , "build" , "dist" ]
[tool.ruff.lint]
select = ["E" , "F" , "B" , "UP" , "SIM" , "I" ]
ignore = ["E501" , "F401" ]
fixable = ["ALL" ]
unfixable = []
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401" ]
"tests/**/*.py" = ["B" ]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
line-ending = "auto"
docstring-code-format = true
[tool.ruff.lint.isort]
known-first-party = ["my_package" ]
section-order = ["future" , "standard-library" , "third-party" , "first-party" , "local-folder" ]
6. 最佳实践
在项目中使用
ruff check --fix
ruff format
ruff check --select I --fix
ruff check --extend-select RUF100 --fix
Git 预提交钩子
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.8.0
hooks:
- id: ruff
args: [--fix , --exit-non-zero-on-fix ]
- id: ruff-format
CI/CD 集成
name: Run Ruff
run: |
pip install ruff
ruff check --exit-non-zero-on-fix
ruff format --check
编辑器集成 VS Code :安装官方插件 Ruff,自动启用检查和格式化
7. 性能对比 工具 功能 性能 备注 Flake8 Lint 基准 需要大量插件 Black Format 基准 社区标准 isort 导入排序 基准 - Ruff Lint + Format + Sort 10-100x 更快 单一工具替代
示例:在 CPython 代码库上(约 200k 行),Ruff 检查耗时 <0.5 秒,而 Flake8 需要数十秒。
8. 总结 Ruff 通过 Rust 的高性能实现,将 Python 代码检查、格式化和导入排序统一到一个工具中,带来数量级的性能提升。它与现有工具(Flake8、Black、isort)高度兼容,迁移成本低,是现代 Python 项目的理想选择。
pip install ruff
ruff check --fix
ruff format
9. VSCode 中配置和使用 Ruff 的完整指南
1. 安装 Ruff VSCode 扩展
方式一:图形界面安装
打开 VSCode
点击左侧活动栏的扩展图标(或按 Ctrl+Shift+X)
在搜索框中输入 'Ruff'
找到 Ruff 扩展(作者:charliermarsh,官方扩展)
点击'安装'按钮
方式二:命令行安装 code --install-extension charliermarsh.ruff
前提条件
VSCode 版本 ≥ 1.74.0(推荐 ≥ 1.80.0)
Python 3.7+ (推荐 3.10+)
系统已安装 Ruff(扩展会自动检测或使用内置版本)
2. 基础配置(推荐设置) 在 VSCode 设置中(文件 > 首选项 > 设置 或按 Ctrl+,),搜索 'Ruff',添加以下配置:
核心配置(在 settings.json 中) {
"[python]" : {
"editor.formatOnSave" : true ,
"editor.codeActionsOnSave" : {
"source.fixAll.ruff" : "explicit" ,
"source.organizeImports.ruff" : "explicit"
} ,
"editor.defaultFormatter" : "charliermarsh.ruff"
}
}
editor.formatOnSave :保存时自动格式化代码
source.fixAll.ruff :保存时自动修复可修复的 lint 错误
source.organizeImports.ruff :保存时自动排序导入语句
editor.defaultFormatter :将 Ruff 设为 Python 文件的默认格式化工具
3. 高级配置选项
3.1 全局设置(在 settings.json 中) Note: The original input had a comment inside JSON which is invalid. I will correct it to valid JSON structure for the example.
{
"ruff.enable" : true ,
"ruff.interpreter" : [ "/usr/bin/python3" ] ,
"ruff.path" : [ "/home/user/.local/bin/ruff" ] ,
"ruff.lineLength" : 88 ,
"ruff.lint.select" : [ "E" , "F" , "W" , "I" ] ,
"ruff.lint.ignore" : [ "E501" ] ,
"ruff.exclude" : [ "**/tests/**" , "**/vendor/**" ] ,
"ruff.lint.preview" : true ,
"ruff.format.preview" : true ,
"ruff.configurationPreference" : "filesystemFirst"
}
3.2 项目级配置(推荐) 在项目根目录创建 pyproject.toml 或 ruff.toml:
[tool.ruff]
line-length = 88
target-version = "py38"
include = ["*.py" , "*.pyi" , "**/pyproject.toml" ]
exclude = [".git" , "__pycache__" , "build" , "dist" ]
[tool.ruff.lint]
select = ["E" , "F" , "B" , "UP" , "SIM" , "I" ]
ignore = ["E501" ]
fixable = ["ALL" ]
unfixable = []
[tool.ruff.lint.per-file-ignores]
"__init__.py" = ["F401" ]
"tests/**/*.py" = ["B" ]
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
docstring-code-format = true
3.3 工作区特定配置 创建 .vscode/settings.json(仅对当前工作区生效):
{
"ruff.configuration" : "${workspaceFolder}/pyproject.toml" ,
"ruff.logLevel" : "info" ,
"ruff.trace.server" : "messages" ,
"python.defaultInterpreterPath" : "${workspaceFolder}/venv/bin/python"
}
4. 使用技巧
4.1 手动触发功能
格式化文档 :右键 → 'Format Document' 或按 Shift+Alt+F
快速修复 :在错误上按 Ctrl+. 选择修复方案
排序导入 :命令面板 (Ctrl+Shift+P) → 'Ruff: Organize Imports'
运行 Ruff 检查 :命令面板 → 'Ruff: Run Linting'
4.2 命令面板常用命令 按 Ctrl+Shift+P 打开命令面板,输入:
Ruff: Show Logs - 显示 Ruff 日志
Ruff: Restart Server - 重启语言服务器
Ruff: Run Linting - 运行代码检查
Ruff: Format Document - 格式化当前文档
Ruff: Organize Imports - 排序导入语句
4.3 与 Black 的迁移 如果之前使用 Black,确保禁用 Black 并切换到 Ruff:
{
"python.formatting.provider" : "none" ,
"[python]" : {
"editor.defaultFormatter" : "charliermarsh.ruff"
}
}
5. 常见问题解决
5.1 扩展安装后无反应
检查 Ruff 版本:ruff --version(建议 ≥ 0.5.3)
确保 Python 扩展已安装
检查 Python 解释器选择是否正确(按 Ctrl+Shift+P → 'Python: Select Interpreter')
查看输出面板:终端 → 输出 → 选择 'Ruff' 查看日志
5.2 与 Pyright 类型检查冲突 问题 :Ruff 和 Pyright 同时运行导致重复提示
{
"python.analysis.diagnosticSeverityOverrides" : {
"reportMissingImports" : "none" ,
"reportUnusedVariable" : "none"
}
}
5.3 格式化与 Black 不一致 问题 :团队同时使用 Black 和 Ruff 导致格式冲突
在 pyproject.toml 中配置 Ruff 的 Black 兼容模式:
[tool.ruff.format]
preview = true
5.4 性能问题(大文件卡顿) {
"ruff.lint.run" : "onType" ,
"files.watcherExclude" : { "**/.ruff_cache/**" : true }
}
6. 调试和日志
启用详细日志 {
"ruff.logLevel" : "debug" ,
"ruff.trace.server" : "verbose" ,
"ruff.logFile" : "${workspaceFolder}/.vscode/ruff.log"
}
检查 Ruff 配置
ruff check --show-settings
ruff format --show-settings
7. 版本要求和建议 组件 最低版本 推荐版本 VSCode 1.74.0 1.80.0+ Ruff 扩展 2024.32.0 最新版 Ruff CLI 0.5.3 0.9.8+ Python 3.7 3.10+
pip install --upgrade ruff
8. 完整配置示例
推荐的生产环境配置
{
"[python]" : {
"editor.defaultFormatter" : "charliermarsh.ruff" ,
"editor.formatOnSave" : true ,
"editor.codeActionsOnSave" : {
"source.fixAll.ruff" : "explicit" ,
"source.organizeImports.ruff" : "explicit"
} ,
"editor.rulers" : [ 88 ] ,
"editor.tabSize" : 4 ,
"editor.insertSpaces" : true
} ,
"ruff.enable" : true ,
"ruff.interpreter" : [ "${workspaceFolder}/venv/bin/python" ] ,
"ruff.lint.select" : [ "E" , "F" , "B" , "UP" , "SIM" , "I" ] ,
"ruff.lint.ignore" : [ "E501" , "F403" ] ,
"ruff.format.preview" : true ,
"ruff.lint.preview" : true ,
"files.associations" : { "*.pyi" : "python" }
}
按照以上配置,Ruff 将在 VSCode 中提供流畅的代码检查和格式化体验,大幅提升 Python 开发效率。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online