notebook 6.x与7+补全方案截然不同:6.x用jupyter_contrib_nbextensions+hinterland,7.3+必须用jupyterlab-lsp+python-lsp-server并配置language_servers,且需禁用jedi防卡顿。

补全代码不是开个开关就能用的,得看你的 Notebook 版本、Python 环境和实际需求——选错方案,要么没效果,要么卡死内核。
确认你用的是 Notebook 6.x 还是 7+
这是最关键的分水岭。Notebook 7.0+ 彻底移除了 notebook.nbextensions 模块,jupyter_contrib_nbextensions 会直接报错:ModuleNotFoundError: No module named 'notebook.extensions'。如果你装了这个包还进不去 Nbextensions 页面,基本就是版本不兼容。
检查方式:在终端运行 jupyter notebook --version。结果是 6.5.4 或类似 6.x 就走老方案;7.3.3 或更高,必须换 LSP 方案。
- 6.x:优先用
jupyter_contrib_nbextensions+Hinterland,稳定、轻量、Tab 触发快 - 7.3+:只能用
jupyterlab-lsp+python-lsp-server[all],支持函数签名、类型提示,但启动慢、内存占用高 - 别强行降级 Notebook——
pip install notebook==6.5.4可能破坏 Jupyter Server 依赖,尤其在 Anaconda 2024+ 环境里
6.x 用户:用 hinterland 实现 Tab 补全
这不是“自动弹窗式”补全,而是按 Tab 键才触发,但响应快、不干扰输入节奏,适合大多数场景。
- 在已激活的 conda 环境中运行:
pip install jupyter_contrib_nbextensions jupyter_nbextensions_configurator - 执行:
jupyter contrib nbextension install --user(加--user避免权限错误) - 再执行:
jupyter nbextensions_configurator enable --user - 重启 Jupyter,打开页面后点顶部菜单的
Nbextensions标签页 - 取消勾选
Disable configuration for nbextensions without explicit compatibility(否则 Hinterland 灰掉) - 勾选
Hinterland,不用改其他设置
生效后,在代码单元格输入 pd. 再按 Tab,就会列出所有 pandas 方法。注意:首次使用可能延迟 1–2 秒,是正常现象。
7.3+ 用户:必须用 LSP,但别漏掉 kernel 配置
jupyterlab-lsp 在 Notebook 7+ 里能跑,但默认只对 Python 文件生效,对 notebook 单元格无效——除非你手动指定 kernel 的 language server。
- 安装:
pip install jupyterlab-lsp python-lsp-server[all] - 如果用的是 classic Notebook(非 JupyterLab),还得加:
pip install jupyter-lsp jupyter-lsp-python-lsp-server - 关键一步:在 notebook 里运行一次
%config LanguageServerManager.language_servers = {'python': {'argv': ['python', '-m', 'pylsp']}},否则补全只在 .py 文件里工作 - 重启内核(不是刷新页面),再试
np.array(+Shift+Tab,应该弹出参数说明
常见失效原因:装了 server 却没装 client,或 client 和 server 版本不匹配(比如 python-lsp-server==1.12.0 配 jupyterlab-lsp==4.0.0 就可能挂掉)。查日志看浏览器控制台有没有 LSP connection failed 报错。
Jedi 引擎太慢?直接关掉它
哪怕你用了 LSP,Jupyter 默认仍会并行调用 Jedi 做基础补全,而新版 Jedi 在大型包(如 scikit-learn)上解析极慢,导致卡顿甚至内核无响应。
- 临时关闭(当前 notebook 有效):
%config Completer.use_jedi = False - 永久关闭:在
~/.ipython/profile_default/startup/下新建00-disable-jedi.py,内容为:import IPython<br>IPython.get_ipython().Configurable.get_config().Completer.use_jedi = False
- 注意:关掉 Jedi 后,
df.col这类属性链补全会失效,但 LSP 的函数签名和参数提示不受影响
真正容易被忽略的是 startup 脚本的执行时机——它只在 kernel 启动时运行,所以改完文件必须重启 kernel,不是刷新网页就行。











