Pylance默认随Python扩展安装但常未启用,需检查状态栏显示、设置python.languageServer为Pylance、配置python.defaultInterpreterPath,并使用from future import annotations增强类型推断。

Pylance 默认已随 Python 扩展安装,但多数人没开它——你看到的“弱提示”大概率是因为它根本没启用。
确认 Pylance 是否在运行
VSCode 启动后右下角状态栏会显示当前 Python 语言服务器。如果看到 Microsoft Python Language Server 或空白/没标识,说明 Pylance 没生效;正确应显示 Pylance(带紫色图标)。点它可切换,但更关键的是检查设置是否被覆盖。
- 打开设置(
Ctrl+,),搜python.defaultInterpreterPath,确保指向你实际用的 Python 环境(尤其虚拟环境路径要对) - 搜
python.languageServer,值必须是Pylance(不是Default或Microsoft) - 如果之前装过旧版
Python扩展(非微软官方),卸载它——和 Pylance 冲突
为什么 from __future__ import annotations 能让提示变准
这是 Pylance 类型推断的“开关”。不加这句,函数返回类型、类内引用等容易报 Unable to resolve function 或补全缺失。
- 适用于 Python 3.7+,不影响运行,纯提示增强
- 加在文件顶部(
#!/usr/bin/env python下一行即可) - 尤其在定义互相引用的类(如
A和B)时,否则 Pylance 会“看不见”B的方法
pyrightconfig.json 配置哪些项最实用
这是 Pylance 底层 Pyright 的配置文件,放项目根目录,比 VSCode 设置更精细。别碰 typeCheckingMode(设成 basic 就够),重点调这几个:
立即学习“Python免费学习笔记(深入)”;
-
"include": ["src", "tests"]—— 明确告诉 Pylance 查哪几个目录,避免扫整个venv或.git -
"exclude": ["**/migrations", "**/__pycache__"]—— 排除干扰,提速且减少误报 -
"reportGeneralTypeIssues": "none"—— 如果你不想被Cannot assign member这类泛型警告刷屏,关它
常见补全失效场景及应对
不是所有地方都能补全,Pylance 有明确边界:它依赖 AST + 类型注解 + import 路径。典型失效点:
- 动态属性(
obj.__dict__['xxx']或getattr(obj, name))—— Pylance 不跟踪字符串运行时值,补全必然丢 - 未显式 import 的模块(比如只写了
import requests,却想补requests.get的参数)—— 必须from requests import get或import requests后用requests.get - 第三方库没带 stubs(如旧版
celery)—— 安装对应types-xxx包,或手动加# type: ignore抑制,但别关整个检查
类型提示写得越具体,Pylance 越敢补全。一个 def foo(x: list[str]) -> dict[int, bool]: 比 def foo(x): 多出至少三倍可用建议。


















