使用 Ruff 进行 Python 代码格式化与静态检查
随着 Python 项目的规模增大,保持一致的代码风格和高质量的代码变得尤为重要。Ruff 是一个现代、高性能、支持 lint 和格式化的 Python 工具,能帮助你快速发现并修复常见代码问题。
本文将介绍:
- Ruff 的作用与工作原理
 - 如何安装与配置 Ruff
 - VSCode 等开发环境中的集成方式
 - 常用参数说明
 - 配置案例
 
1. 什么是 Ruff?
Ruff 是由 Astral 团队开发的一个 Python 静态检查器和格式化器,主打:
- 速度极快(使用 Rust 编写)
 - 功能全面:集成 Flake8、isort、pycodestyle、autoflake、pylint 等常见工具的规则
 - 自动修复:支持大部分问题自动修复
 - 代码格式化:可以替代 Black 进行统一格式化
 
2. 安装 Ruff
使用 pip 安装 Ruff(建议加到开发依赖):
pip install ruff3. Ruff 的工作原理
Ruff 的工作主要分为两个阶段:
阶段  | 命令  | 功能  | 
Lint 检查(静态分析)  | ruff check  | 分析代码错误、风格问题(未使用变量、导入顺序等)  | 
自动格式化  | ruff format  | 格式化代码(缩进、引号风格、括号等)  | 
其中:
- ruff check . --fix 可以自动修复大部分 lint 问题,包括删除未使用 import、合并重复导入等。
 - ruff format . 主要用于统一格式,不会做“语义删除”(比如不会删未使用 import)。
 
4. 项目结构建议
css
复制编辑
your_project/
├── pyproject.toml        ← Ruff 配置写在这里
├── .vscode/
│   └── settings.json     ← VSCode 编辑器配置
├── src/
│   └── main.py
└── tests/
    └── test_main.py5. 配置 Ruff(pyproject.toml)
在项目根目录创建或编辑 pyproject.toml,加入以下内容:
[tool.ruff]
line-length = 88                  # 最大行长度
target-version = "py38"          # Python 目标版本
src = ["src", "tests"]           # 源码路径
[tool.ruff.lint]
select = ["E", "F", "I", "W"]     # 开启的规则类型
ignore = ["E501"]                # 忽略某些规则(如行太长)
fixable = ["ALL"]                # 允许自动修复的规则
[tool.ruff.format]
quote-style = "double"           # 使用双引号
indent-style = "space"           # 使用空格缩进select常见规则分类:
规则代码  | 说明  | 
E  | pycodestyle(代码风格)  | 
F  | pyflakes(错误检测)  | 
I  | import 排序(类似 isort)  | 
W  | 警告信息(如未使用变量)  | 
6. 集成 VSCode
在 .vscode/settings.json 中配置如下,实现“自动保存时格式化 + 实时 lint”:
{
  "files.autoSave": "afterDelay",
  "files.autoSaveDelay": 1000,
  "editor.formatOnSave": true,
  // 使用 Ruff 格式化器
  "python.formatting.provider": "ruff",
  // 启用 Ruff lint
  "python.linting.enabled": true,
  "python.linting.ruffEnabled": true,
  "python.linting.ruffArgs": ["--fix"],
  // 保存时执行所有修复操作
  "editor.codeActionsOnSave": {
    "source.fixAll": true
  }
}7. 常用命令总结
命令  | 功能  | 
ruff check .  | 检查代码(不修复)  | 
ruff check . --fix  | 检查并修复问题(推荐日常使用)  | 
ruff format .  | 格式化代码(等价于 Black)  |