根本原因是VSCode未将isort识别为Python格式化工具,需显式设置"python.formatting.provider": "isort",禁用冲突配置,确保pyproject.toml正确配置并重启窗口。

isort 在 VSCode 里不自动排序 import,根本不是插件没装好,而是 VSCode 没把它当“格式化工具”用——它默认只认 black 或 autopep8,isort 得手动“扶正”。
为什么 isort 安装了但 Ctrl+S 没反应
常见现象:终端能跑 isort .,VSCode 保存却完全无动静。这不是环境问题,是 VSCode 的 Python 扩展在“格式化流程”中压根没调用 isort。
- 确认
"python.formatting.provider"设置为"isort"(不是"none",也不是旧版已废弃的"python.sortImports.provider") - 删掉所有带
python.sortImports的快捷键绑定(keybindings.json里搜出来全删),1.20+ 版本已移除该命令 - 检查右下角语言模式是不是
Python,不是Plain Text或Py—— 否则 VSCode 根本不触发 Python 相关格式化逻辑 - 确保
"editor.formatOnSave"为true,且没被工作区设置覆盖
pyproject.toml 里怎么写才让 isort 按团队规范排
VSCode 不读 setup.cfg 或 .isort.cfg(除非 UTF-8 无 BOM),只认 pyproject.toml。空配置 = 只做字母序,不按 PEP 8 分组。
- 最小可用配置(适配 Black 风格):
[tool.isort] profile = "black" line_length = 88
- 若不用 Black,改
profile = "django"或profile = "google";或手动控制分组空行:lines_after_imports = 2 - 本地模块识别靠
known_first_party = ["myproject"],填你项目顶层包名,否则会被错判成第三方库
和 black 一起用时 import 排序冲突怎么办
black 本身不处理 import 排序,但会重写整个文件。如果 isort 和 black 都设为保存时运行,顺序错乱、重复格式化、甚至报错 command 'python.sortImports' not found 都会发生。
立即学习“Python免费学习笔记(深入)”;
- 只留一个格式化入口:
"python.formatting.provider": "isort",禁用blackArgs和autopep8Args相关配置 - 用
profile = "black"让isort输出风格与black兼容(单行多 import、无空行分隔),避免后续被black再动 - 真要双工具协同,把
black放 pre-commit 钩子里跑,VSCode 里只交由isort处理 import
真正容易被忽略的点:VSCode 的 Python 扩展会缓存格式化器注册状态。改完 settings.json 和 pyproject.toml 后,必须重启窗口(Developer: Reload Window),否则新配置不生效。


















