pylance解析慢主因是默认全量扫描工作区,关闭autosearchpaths、显式配置extrapaths和pyrightconfig.json的include规则,设typecheckingmode为basic并安装types包可显著提速。

Pylance 提示慢,基本不是你代码的问题,而是它默认在扫整个工作区——包括 venv、node_modules、__pycache__,甚至顺着软链接展开七八层路径。关掉自动索引、显式声明要分析的目录,90% 的卡顿当场消失。
怎么确认 Pylance 正在拖慢你?
右下角状态栏没显示 Pylance(带紫色图标),或显示了但补全总卡在“正在分析…”;打开一个简单文件后 CPU 持续 >70%、内存涨到 1.5GB+;输入 pd.read_ 等半天没提示——这些都不是偶然,是索引失控的明确信号。
- 别信“重启 VS Code 就好”,配置没改,重启只是临时清缓存
- 别在设置里搜 “performance” 或 “speed”,关键开关藏在
python.analysis.*下 - 状态栏显示
Pylance (typeCheckingMode: basic)才算真正生效,只写Pylance不代表 mode 正确
必须关掉 autoSearchPaths,否则一切优化白做
python.analysis.autoSearchPaths 是罪魁祸首。它默认为 true,会让 Pylance 主动扫描父目录、同级 src/、lib/,甚至把 ../common 软链接展开成多个绝对路径,每个都建独立索引。
- 在 VS Code 设置(
Ctrl+,)中搜autoSearchPaths,设为false - 紧接着配
python.analysis.extraPaths,只写你真正在写的模块,例如:["src", "tests", "scripts"] - 路径必须是相对工作区根目录的,
./src或绝对路径会失效 - monorepo 项目别加
packages/**,只加当前子包,比如["packages/my-core"]
pyrightconfig.json 的 include 规则比 settings.json 更管用
Pylance 实际优先读 pyrightconfig.json,而且它对 exclude 常常忽略,但 include 一定生效。没这个文件,所有 exclude 配置都可能被绕过。
- 在工作区根目录新建
pyrightconfig.json,内容至少含:{ "include": ["src", "tests"], "exclude": ["**/venv/**", "**/node_modules/**", "**/__pycache__/**"] } -
include不能为空,也不能只写["."],必须是明确子目录或 glob - 改完必须关闭并重新打开整个工作区,热重载不加载新配置
- 如果仍卡,检查
include里是否误写了不存在的目录(比如拼错srcc),Pylance 会静默跳过但继续扫其他路径
basic 类型检查模式 + openFilesOnly 是日常开发黄金组合
typeCheckingMode: strict 不是“更认真”,是让 Pylance 加载完整类型系统:泛型约束、协议匹配、Literal 推导全开。遇到 pydantic.BaseModel 或 numpy.ndarray 这类重度注解类型时,解析时间直接翻倍甚至指数增长。
- 设
"python.analysis.typeCheckingMode": "basic":能抓str传给期待int的硬错误,但跳过高成本推导 - 配
"python.analysis.diagnosticMode": "openFilesOnly":只检查当前打开的文件,编辑器响应几乎无延迟 - 第三方库缺类型提示(如老版
celery)时,pip install types-celery比写# type: ignore更治本 - 别在全局
settings.json里设strict,Pylance 打开site-packages里的大包就卡死
最易被忽略的一点:Pylance 的性能瓶颈往往不在你的源码,而在它反复尝试从无类型提示的第三方库源码 infer——这个过程不可缓存、每次打开新文件都可能重来。所以 types- 包和 py.typed 文件,不是锦上添花,是提速刚需。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











