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

Pylance 解析慢不是你项目写得差,是它默认在后台扫描整个工作区——包括 venv、node_modules、__pycache__,甚至顺着符号链接展开十几层路径。关掉自动索引、显式声明要查的目录,80% 的卡顿当场消失。
关闭 autoSearchPaths + 显式配置 extraPaths
Pylance 默认开启 python.analysis.autoSearchPaths,会递归扫描所有疑似 Python 路径(比如父目录、同级目录下的 src/、lib/),尤其当你工作区里有软链接时,它会把 ../common 展开成五六个绝对路径,每个都单独建索引。
- 在 VS Code 设置中搜
autoSearchPaths,把它设为false - 用
python.analysis.extraPaths显式列出真正要分析的目录,例如:["src", "tests", "scripts"] - 确保这些路径是相对工作区根目录的,不要写绝对路径
- 如果用了 monorepo 结构,别把
packages/**全加进去,只加当前正在开发的子包
确认 pyrightconfig.json 的 include 规则生效
Pylance 实际读的是 pyrightconfig.json(不是 settings.json),而且它优先信任 include,对 exclude 常常忽略——你写了 "exclude": ["venv", "dist"],它可能照样去扫。
- 在工作区根目录放一个
pyrightconfig.json,内容至少包含:{ "include": ["src", "tests"], "exclude": ["**/venv/**", "**/node_modules/**", "**/__pycache__/**"] } -
include必须是明确路径或 glob,不能留空或只写["."] - 改完后必须关闭并重新打开工作区,否则不加载新配置
- 检查右下角状态栏是否显示
Pylance (typeCheckingMode: basic),没显示说明配置没被识别
typeCheckingMode 设为 basic,别碰 strict
typeCheckingMode: strict 不只是“更严”,它是让 Pylance 加载完整类型系统:泛型约束、协议匹配、Literal 推导全开——遇到 pydantic.BaseModel 或 numpy.ndarray 这类 heavily-annotated 类型时,解析时间呈指数增长。
- 日常开发一律用
basic:能抓str传给期待int的函数这类硬错误,但跳过高成本推导 - CI 或提交前用
pyrightCLI 单独跑一次strict,不拖慢编辑器 - 千万别在全局
settings.json里设strict,Pylance 一打开site-packages里的大包就卡死 - 配合
"python.analysis.diagnosticMode": "openFilesOnly",只检查当前打开的文件,进一步减负
补全第三方库类型提示,避免 fallback infer
当 Pylance 遇到没类型提示的库(比如老版本 requests、内部 SDK),它会尝试从源码 infer——这个过程不可缓存、不可中断,每次打开新文件都可能重来,你看到的“正在分析…”基本卡在这儿。
- 运行
pip install types-requests types-redis types-click等常见types-包 - 对自研 SDK,在其
pyproject.toml加:[[tool.mypy.plugins]] module = "mypy_extensions"
,并确保包根目录下有py.typed文件 - 如果 stub 放在独立目录(如
stubs/),在pyrightconfig.json里配"stubPath": "stubs",别让它自己去site-packages翻找 - 检查有没有隐藏符号链接:
ls -la看工作区根目录下是否有src → ../shared/src这类,删掉或替换为真实路径
最易被忽略的是:改了 pyrightconfig.json 或 extraPaths 后不重启工作区,配置根本不会生效;还有人把 include 写成 ["."],等于又回到全量扫描。Pylance 的性能问题,90% 出在路径控制失当,而不是代码本身。











