vscode连不上远程python内核主因是远程jupyter server未按新协议启动或uri格式错误;须用jupyter server --ip=0.0.0.0 --serverapp.allow_remote_access=true启动,uri必须含真实ip、?token=和/api路径,且kernel需手动注册并校验argv[0]路径。

VSCode 连不上远程 Python 内核,90% 不是 VSCode 配置错了,而是远程 jupyter server 根本没按新协议启动,或者 URI 填得缺参数、错路径、用 localhost 代替了真实 IP。
远程必须跑 jupyter server,不是 jupyter notebook
VSCode 1.8x 起彻底弃用旧版 jupyter notebook 协议,只认 jupyter server 的 API。用 jupyter notebook --port=8888 启动,VSCode 会卡在 “Connecting…” 或报 404 /api/sessions。
- 先确认远程装的是
jupyter-server:运行pip show jupyter-server,不是jupyter-notebook - 启动命令必须含
--ServerApp.allow_remote_access=True,否则即使端口通也会被静默拒绝 - 监听地址必须是
--ip=0.0.0.0(不能是localhost或127.0.0.1),否则本地请求进不来 - 推荐完整命令:
jupyter server --ip=0.0.0.0 --port=8888 --no-browser --allow-root --ServerApp.allow_remote_access=True --ServerApp.token=''(token 空值仅用于调试)
Jupyter: Specify Jupyter Server URI 必须填对格式
VSCode 不自动扫描、不猜地址,你粘贴什么它就发什么请求。填错一个字符——比如把 ? 写成 /,或漏掉 token=xxx,它就会返回 403 或 404,而不是提示“格式不对”。
- 正确格式是:
http://<your-ip>:8888/?token=abc123</your-ip>(注意是问号,不是斜杠;<your-ip></your-ip>是服务器真实局域网/公网 IP,不是localhost) - 如果远程用了
--base-url=/jupyter,URI 就得写成:http://<your-ip>:8888/jupyter/?token=abc123</your-ip> - 获取准确 URI:远程执行
jupyter server list,直接复制输出的完整行,别手敲 - 填完点连接后,打开 Output → Jupyter 面板,看第一行请求是否发出、响应码是多少(403 = token 错,404 = 路径错,Connection refused = 网络不通)
远程内核选不到 Python 3 (myenv),其实是 kernel 没注册或路径错
VSCode 显示 “Python 3 (unavailable)” 或根本找不到你命名的内核,不是扩展问题,是远程环境里 ipykernel 没装、没激活、或注册时路径指向了不存在的 Python 可执行文件。
- 先在远程终端中
conda activate myenv(或source activate myenv),再运行注册命令 - 注册必须带
--user:python -m ipykernel install --user --name myenv --display-name "Python (myenv)" - 检查注册结果:
cat ~/.local/share/jupyter/kernels/myenv/kernel.json,确认argv[0]指向的是当前环境真实的python路径(比如/home/user/miniconda3/envs/myenv/bin/python) - 别用系统 Python 注册后却在 conda 环境里启动 server——内核和 server 解释器不一致,必崩,报
Kernel died, restarting
SSH 隧道转发时,localhost 在 Windows 上容易失效
很多人用 ssh -L 8888:localhost:8888 user@host,然后在 VSCode 里填 http://localhost:8888/?token=...,结果连不上。这不是 VSCode 的 bug,是 OpenSSH 在 Windows 下对 localhost 的解析不稳定。
- 隧道命令改用
127.0.0.1:ssh -L 8889:127.0.0.1:8888 user@host - VSCode 中 URI 改为:
http://localhost:8889/?token=...(端口要和-L一致) - 本地避免端口冲突:别用 8888,换 8889、8890 等,尤其你本机也跑着 jupyter 的话
- 隧道建立后,先在本地浏览器访问
http://localhost:8889/?token=...看能否打开 Jupyter Lab 页面——能开,说明隧道通;VSCode 连不上,就是 URI 或内核问题
最常被忽略的一点:VSCode 的 Jupyter 扩展不会校验远程 kernel.json 里 argv 是否真实可执行,它只管发连接请求。等单元格一运行,远程进程立刻崩溃,日志里只有 Kernel died,这时候才回头查路径,已经晚了。注册完 kernel,务必手动进 kernel.json 看一眼 argv[0] 对不对。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











