Ruff 排序 Python 导入
问题说明
当在小型 Python 项目中工作时,开发者经常需要清理和整理代码。传统上使用 isort
工具管理导入语句排序非常流行,但随着 Ruff 的出现,许多开发者希望使用这个现代化工具链替代多款传统工具。
面临的核心问题:
如何在没有配置文件的简单项目中,使用 Ruff 完全替代 isort
的功能来对 Python 导入语句进行排序和格式化?
开发者可能已经知道 ruff format .
能替代 black
格式化代码,但这个命令不会处理导入语句的排序。因此需要找到使用 Ruff 命令来实现 isort
功能的正确方法。
解决方案
要同时实现导入排序和代码格式化,需要组合使用 Ruff 的两个命令:
排序导入语句
使用 Ruff 的 lint 功能,特别指定I
规则集(导入相关规则)并自动修复问题格式化代码
使用标准的ruff format
命令处理代码风格
完整命令序列
ruff check --select I --fix . # 排序和清理导入
ruff format . # 格式化代码
工作原理解析
--select I
:专门针对 Ruff 的导入规则分类(I代表Imports)--fix
参数:自动应用可修复的问题,包括导入重排序- 双命令顺序:必须先排序后格式化,避免格式调整破坏导入结构
配置说明
最小化配置文件
虽然命令行可直接使用,但添加基本配置能优化行为。创建 ruff.toml
:
# ruff.toml
[format]
# 黑名单兼容样式
indent-style = "space"
indent-width = 4
[lint]
# 启用所有推荐规则
select = ["E", "F", "I", "UP"]
注意事项
- Ruff 不依赖配置文件运行,上述命令在没有任何配置文件的项目中即刻生效
- 与
isort
不同,Ruff 默认遵循 PEP8 的导入排序规范 - 执行
--fix
可能产生额外改动(如移除未使用导入),建议先提交代码变更
终端演示
$ ruff check --select I --fix .
Found 5 imports needing reordering (2 fixable)
Fixed 2 import sorting issue
✨ Done in 0.25s
$ ruff format .
Formatted 3 files
✨ All files formatted
VS Code 集成配置
在设置中启用自动修复:
{
"editor.codeActionsOnSave": {
"source.fixAll.ruff": true
},
"ruff.lint.args": ["--select", "I"]
}
替代方案对比
传统方案 | Ruff 方案 | 优势 |
---|---|---|
isort . && black . | ruff check --select I --fix . && ruff format . | 单工具链, 速度快10-100倍 |
需维护独立配置文件 | 零配置或极简配置 | 降低项目复杂度 |
分离的依赖项 | 统一工具依赖 | 减少开发环境配置负担 |
重要差异
- Ruff 的导入排序逻辑基于类型划分(标准库、第三方、本地)
isort
某些定制配置需通过 Ruff 的[lint.isort]
配置节转换- 迁移大型项目前,建议使用
ruff check --select I --diff .
预览变更
总结
通过组合使用 ruff check --select I --fix .
和 ruff format .
两条命令,即可在无配置或极小配置场景下:
- 完整替代
isort
的导入排序功能 - 获得比传统工具链快10倍以上的执行速度
- 实现项目依赖的简化(仅需Ruff)
对于需要深度定制导入规则的项目,参考官方配置文档:Import Sorting - Ruff Docs