
本文介绍如何通过 Ruff 的 --select 和 --fix 参数精准修复特定 PEP/Flake8 规则(如未使用导入的 F401),避免全局自动修正带来的意外变更。
本文介绍如何通过 ruff 的 `--select` 和 `--fix` 参数精准修复特定 pep/flake8 规则(如未使用导入的 f401),避免全局自动修正带来的意外变更。
Ruff 是一个极快的 Python 代码检查与自动修复工具,其设计哲学强调可控性与可预测性。当你只想修复某类问题(例如 F401 —— “imported but unused”),而非运行全部修复规则时,应明确指定目标规则,而非依赖 --fix 的默认行为(后者会尝试修复所有已启用且支持自动修复的规则)。
✅ 正确用法:组合 --select 与 --fix
核心命令格式如下:
ruff check --select <RULE_CODE> --fix [PATH...]
-
--select限定仅检查并考虑修复指定规则(支持单个码、逗号分隔列表或前缀,如F401,F4*,F401,F841); -
--fix启用自动修复能力,但仅对--select所指定的规则生效; -
[PATH...]可选,不填则默认扫描当前目录及子目录下所有.py文件。
? 实际示例
修复当前项目中所有 F401(未使用导入)问题:
ruff check --select F401 --fix
仅修复单个文件中的 F401:
ruff check --select F401 --fix src/utils.py
同时修复多个规则(如 F401 和 F841 —— 未使用变量):
ruff check --select F401,F841 --fix
⚠️ 注意事项
- 并非所有规则都支持自动修复(
F401支持,但E501行长限制通常不支持)。可通过ruff rule <rule></rule>查看该规则是否标注Autofix: ✅; -
--select会覆盖配置文件(如pyproject.toml)中select或extend-select的默认设置,因此无需提前修改配置即可临时聚焦; - 若需预览将要修复的内容而不实际写入,可添加
--dry-run(Ruff ≥ v0.5.0):ruff check --select F401 --fix --dry-run
- 避免误用
--fix-only:它仅对已报告的问题执行修复,但不会重新检查;而--fix会在修复后自动重新检查以确保收敛,推荐始终使用--fix。
? 小结
精准修复 = ruff check --select --fix。这一组合既安全又高效,是团队 CI/CD、PR 检查或日常开发中“按需清理”的标准实践。养成显式指定规则的习惯,不仅能提升修复可靠性,也便于协作时快速对齐代码规范意图。

















