多数人pylance无提示是因vscode未启用它作语言服务器,需通过“python: select language server”选pylance,并确保已正确配置python解释器、pyrightconfig.json路径及排除无关目录。

为什么装了Pylance还是没提示?
多数人遇到的问题不是没装Pylance,而是VSCode没用它当Python语言服务器。默认情况下,VSCode可能仍在用旧的python扩展自带的Jedi引擎,尤其在已安装多个Python相关扩展(如旧版Python、Pylint、Black)时容易冲突。
确认方法:打开命令面板(Ctrl+Shift+P),运行Python: Select Language Server,确保选中Pylance而非Default或Jedi。如果列表里没有Pylance,说明它没被识别——常见原因是未在工作区根目录下有pyproject.toml或setup.py,或Python解释器未正确指定。
- 必须通过
Ctrl+Shift+P → Python: Select Interpreter选定一个有效的Python环境(不能是“Enter interpreter path…”手动填的空路径) - 若使用venv,确保激活后VSCode右下角显示的是该venv路径,否则Pylance无法读取其site-packages
- 禁用或卸载旧版
ms-python.python扩展(非ms-python.pylance)可能残留的冗余功能
如何让Pylance识别自定义模块和本地包?
Pylance默认只索引当前工作区+已安装包,对未安装的本地模块(如from mylib.utils import helper)直接报Import "mylib" could not be resolved。这不是错误,是Pylance的严格解析策略,但可配置绕过。
关键配置项是python.defaultInterpreterPath和python.extraPaths,但更可靠的是用pyrightconfig.json(Pylance底层基于Pyright):
{
"include": ["src", "tests"],
"extraPaths": ["./src", "./lib"]
}
把该文件放在工作区根目录,include控制扫描范围,extraPaths添加模块搜索路径。注意路径是相对于配置文件位置的,且不支持glob(如**/src)。
- 避免在
settings.json里盲目加"python.analysis.extraPaths"——它只影响部分场景,不如pyrightconfig.json稳定 - 如果模块在子目录且带
__init__.py,但Pylance仍不识别,检查该目录是否被exclude规则覆盖(如**/__pycache__会连带排除同级目录) - 符号链接目录需在
pyrightconfig.json中显式写入真实路径,Pylance不跟随symlink自动解析
类型提示失效或跳转错乱怎么办?
Pylance对类型提示依赖强,但现实代码常混用typing、from __future__ import annotations、字符串字面量注解。版本不匹配会导致跳转到stub文件而非源码,或根本无提示。
Python 3.10+建议统一用PEP 604联合类型(int | str)和延迟求值(from __future__ import annotations),Pylance对此支持最好;低于3.10则慎用Optional[T]以外的typing高级构造,比如Literal或TypedDict需对应Python版本和Pylance版本匹配。
- 检查Pylance扩展是否为最新版——旧版(Self、
dataclass_transform支持不全 - 函数内联类型注解(如
def f(x: "MyClass") -> "str":)会被Pylance当作字符串处理,无法跳转,应改用from __future__ import annotations+ 真实类名 - 第三方库缺失stub时,Pylance会回退到动态分析,提示质量下降;可手动安装
types-xxx包,或在pyrightconfig.json中设"typeCheckingMode": "basic"降低严格度
为什么大型项目启动慢、CPU狂升?
Pylance首次加载会构建整个工作区的语义模型,对含数百个模块、大量C扩展(如numpy、pandas)或生成代码(如protobuf)的项目,内存占用可达2–4GB,VSCode响应卡顿。
缓解方式不是关Pylance,而是精准限制其作用域:
- 在
pyrightconfig.json中用"exclude"明确剔除不需要分析的目录:["dist", "build", ".git", "**/migrations", "**/tests/fixtures"] - 关闭
"python.analysis.diagnosticMode": "workspace"(默认),改为"openFilesOnly",只分析打开的文件,牺牲全局诊断换响应速度 - 禁用
"python.analysis.autoSearchPaths"(默认true),防止Pylance自动扫描父目录下的venv或site-packages
这些调整不会降低已打开文件的提示质量,但能明显缩短冷启动时间。真正难搞的是跨仓库引用——Pylance不跨工作区索引,此时必须用extraPaths或符号链接硬导入,没有捷径。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











