Ruff 本身不支持在ruff format中排序 import,需要配合ruff check --select I --fix单独执行 import 排序,再运行格式化命令,这才能实现与 isort + black 类似的双步自动化流程。
Ruff 本身不支持在 ruff format 中排序 import,需要配合 ruff check --select I --fix 单独执行 import 排序,再运行格式化命令,这才能实现与 isort + black 类似的双步自动化流程。
从 2023 年开始,Ruff 就把代码格式化(ruff format)和代码检查(ruff check)拆成了两个独立的子命令。这里的关键点在于:导入排序(import sorting)属于 linting 的范畴,由 ruff check 负责,而不是格式化器。换句话说,即使你习惯了用 ruff format . 来替代 black,也别指望它能顺手搞定 import 排序——这活儿,isort 才是正主,而 Ruff 的对应能力在 check 那边。
那么,要完全替代 isort,该怎么办?推荐下面这个两步组合命令(按顺序执行):
ruff check --select I --fix . ruff format .
--select I表示只启用所有以 I 开头的规则(比如 I001 未排序导入、I002 缺失必需空行等等),精准锁定 import 整理,不干扰其他检查项;--fix启用自动修复,全程无需人工干预;- 两步可以安全地串联在一起(例如
ruff check --select I --fix . && ruff format .),非常适合集成到 CI/CD 流水线或者 pre-commit 钩子里。
⚠️ 需要注意几个细节:
- 确保 Ruff 版本 ≥ v0.5.0(推荐 ≥ v0.6.0)。早期版本中,import 规则可能没有默认启用,或者行为上有些差异,升级后才稳妥;
- 如果项目没有配置文件(比如
ruff.toml或pyproject.toml),上面的命令照样可以开箱即用,对小型项目来说非常友好; - 要是想自定义排序逻辑(比如按字母顺序、分组策略、第三方/标准库/本地模块的顺序),那就需要创建配置文件,在
[tool.ruff.isort]下设置选项(例如known-first-party = ["myapp"])。否则,Ruff 会采用默认的 isort 兼容策略。
总结一下:Ruff 并没有追求“一条命令包打天下”,而是通过职责分离,提供了一种更可控、更可组合的开发体验。用 ruff check --select I --fix 替代 isort,再配合 ruff format 完成其余格式化任务,既轻量又可靠,是现代 Python 小型项目非常理想的选择。