Jedi 可替代 Pylance 提供 Python 智能提示,需禁用 Pylance、安装 jedi==0.19.1、启用 python.jedi.enable 等配置,并通过类型注解辅助动态代码推断。

如果您在使用 VSCode 进行 Python 开发时发现 Pylance 提示不够准确或响应缓慢,Jedi 可作为替代的智能提示引擎提供代码补全、跳转定义和类型推断功能。以下是启用并配置 Jedi 的具体步骤:
本文运行环境:MacBook Air,macOS Sequoia。
一、禁用 Pylance 并启用 Jedi
VSCode 默认启用 Pylance 作为 Python 语言服务器,需先关闭它才能让 Jedi 生效。Jedi 以轻量级方式嵌入 VSCode,不依赖外部 Python 进程,适合资源受限环境。
1、打开 VSCode 设置(快捷键 Cmd + ,)。
立即学习“Python 免费学习笔记(深入)”;
2、在搜索框中输入 python.defaultInterpreterPath,确认已正确配置 Python 解释器路径。
3、在搜索框中输入 python.languageServer,将下拉选项从 Pylance 改为 Jedi。
4、保存设置后,重启 VSCode 窗口(Cmd + Shift + P →“Developer: Reload Window”)。
二、手动安装 Jedi Python 包
Jedi 语言服务器需依赖本地 Python 环境中安装的 jedi 库,否则 VSCode 会提示“Jedi not found”。该步骤确保核心解析能力可用。
1、在终端中激活当前项目使用的 Python虚拟环境(如使用 venv,则执行 source venv/bin/activate)。
2、执行命令:pip install jedi==0.19.1(推荐固定版本以避免兼容性问题)。
3、验证安装:运行 python -c “import jedi; print(jedi.__version__)”,输出应为 0.19.1。
三、配置 Jedi 专用 setting.json 参数
通过修改工作区或用户级别的 settings.json,可优化 Jedi 对大型项目或特殊结构(如动态属性、__getattr__)的解析行为。
1、按下 Cmd + Shift + P,输入 Preferences: Open Settings (JSON)。
2、在大括号内添加以下配置项:
“python.jedi.enable”: true,
“python.jedi.autoImportCompletions”: true,
“python.jedi.followImportNames”: true
3、保存文件,无需重启,Jedi 将在下次打开。py 文件时应用新配置。
四、处理 Jedi 无法识别动态代码的场景
Jedi 对硬 编码 字符串拼接、exec、setattr 等动态行为支持有限,可通过添加类型提示注解辅助其推断。
1、在变量声明后添加 PEP 526 类型注解,例如:user_name: str = getattr(config, “name”)。
2、对返回动态属性的方法添加 TypeVar 和 overload 声明,例如在模块顶部添加:
from typing import overload, Any
@overload
def get_value(key: Literal[“host”]) -> str: …
3、保存文件,Jedi 将在后续补全中识别该 key 对应的具体返回类型。