sublime text 无法直接运行 .ipynb 文件,因其不解析 json 格式且无内核、消息协议和前端渲染等 jupyter 必需组件;需通过 jupytext 同步 .py 与 .ipynb,并用 sendcode 发送代码至外部 jupyter kernel 执行。

为什么不能直接在 Sublime Text 里运行 .ipynb 文件
Sublime Text 本身不解析 Notebook JSON 格式,双击打开 .ipynb 看到的是一堆嵌套 JSON,不是可执行的代码块。这不是插件没装对,而是底层架构决定的:Jupyter 的执行依赖 kernel 进程、消息协议和前端渲染逻辑,Sublime 没有内置这些组件。
所以所谓“深度集成”,其实是用 Sublime 作为**高级编辑器**,配合外部 Jupyter 服务协同工作,而不是把 Jupyter 塞进 Sublime 里跑。
推荐方案:Sublime + Jupyter Server + jupytext 同步
真正稳定可用的路径是让 Sublime 编辑纯 Python 文件(.py),用 jupytext 与 .ipynb 双向同步,同时连上本地 Jupyter Server 实时查看结果。
- 安装
jupytext:pip install jupytext
- 配置 Jupyter 支持 pair:
jupyter notebook --generate-config
,然后在~/.jupyter/jupyter_notebook_config.py中加一行:c.NotebookApp.contents_manager_class = 'jupytext.TextFileContentsManager' - 在 Sublime 中用
Ctrl+Shift+P→Package Control: Install Package装Jupytext插件(注意不是同名的另一个旧插件) - 打开一个
.py文件,右键 →Jupytext: Pair with Notebook,会自动生成同名.ipynb并保持双向更新
如何从 Sublime 触发单元格级执行并查看输出
Sublime 没有原生 cell 概念,但可通过快捷键把当前光标所在函数或选中代码块发给正在运行的 Jupyter kernel —— 关键靠 SublimeREPL 或更轻量的 SendCode 插件。
-
SendCode更可靠:支持 Python、R、Julia,能识别### %%%分隔符模拟 cell,按Ctrl+Enter发送当前 cell - 必须先启动 kernel:
jupyter console --kernel=python3
或在已打开的 notebook 里复制 kernel ID,再在 Sublime 中Ctrl+Shift+P→SendCode: Select Kernel手动连接 - 发送后输出显示在 Sublime 底部面板(需启用
SendCode.show_in_panel),不是 notebook 界面里;想看图表得用%matplotlib inline且 kernel 必须支持
常见报错和绕过方式
最常卡在 kernel 连接失败或输出不刷新,本质是进程通信链路断了。
-
Connection failed: [Errno 111] Connection refused→ 检查jupyter console是否真在运行,端口是否被占(默认用随机端口,可固定:jupyter console --kernel=python3 --port=5555
,再在 SendCode 配置里指定) - 图表不显示 → Sublime 面板只支持文本输出,
plt.show()会卡住;改用IPython.display.Image或保存为 PNG 后手动插入 -
jupytext同步丢失 metadata(如小数位数设置、widget 状态)→ 这是设计使然,.py文件只存代码逻辑,交互状态永远留在.ipynb里
真正要调试 widget 或实时交互,还是得切回浏览器;Sublime 的价值在于写模型逻辑、做批量数据清洗、配合 git 管理代码——别让它干它不擅长的事。











