不能在同一个浏览器标签页里运行多个独立的 Jupyter Notebook 实例,因为每个 .ipynb 文件绑定唯一内核、共享执行上下文;多文件需通过多标签页打开,或改用 JupyterLab 实现单窗口多标签。

不能在同一个浏览器标签页里运行多个独立的 Jupyter Notebook 实例。所谓“同一个页面”,指的是单个 notebook 文件(.ipynb)——它本身就是一个可交互文档,含多个单元格,但只能绑定一个内核(kernel),所有单元格共享同一执行上下文。你真正想实现的,通常是以下几种实际需求之一,对应不同操作方式:
想在一个浏览器窗口里同时打开多个 .ipynb 文件
这是最常见误解。Jupyter Notebook 的 Web UI 本身不支持“多文档标签页”(像 VS Code 那样)。每个 .ipynb 文件默认在新标签页中打开:
- 启动
jupyter notebook后,访问http://localhost:8888进入文件浏览器 - 点击任意
.ipynb文件 → 在新标签页打开该笔记本 - 回到原标签页,再点另一个
.ipynb→ 又开一个新标签页 - 所有标签页都连向同一个
jupyter-notebook进程,但彼此隔离(不同内核、不同变量空间)
⚠️ 注意:jupyter notebook 默认只起一个服务进程,端口固定(如 8888),不是“多实例”。不需要、也不建议为每个笔记本单独起服务。
想让多个笔记本共享变量或状态(比如调试时复用数据)
这本质上违背 Notebook 的设计哲学——每个 .ipynb 应是自包含、可重现的单元。强行共享会破坏可复现性,且极易出错:
- 不同笔记本若连到同一个内核(例如手动选“Python 3”内核并重复 attach),变量会互相污染
- 一个笔记本
del df,另一个立刻报NameError - 内核崩溃时所有关联笔记本同时中断
- 正确做法是:把公共逻辑抽成 Python 模块(
.py文件),在各笔记本中import
示例:utils.py 放预处理函数,各笔记本写 from utils import load_data ——干净、可控、可测试。
想在单个页面里嵌入多个可执行代码块(类似多 notebook 效果)
这不是 Notebook 原生能力,但有替代路径:
-
jupyter lab支持真正的多标签页:启动jupyter lab而非jupyter notebook,它提供类 IDE 界面,可拖拽、分栏、多.ipynb标签共存于同一窗口 - 用
IPython.display.IFrame或 HTML<iframe>嵌入其他本地 notebook 的静态导出(如 HTML),但无法交互执行 - 复杂场景应转向
Voilà或Streamlit:把 notebook 逻辑封装为可交互仪表板,一个页面承载多个模块化组件
⚠️ 别尝试用 JavaScript 动态加载多个 notebook 内核到同一页面——Jupyter 的 WebSocket 协议和内核管理机制不支持这种用法,会触发连接冲突或 404 Not Found(找不到 kernel ID)错误。
真正需要“多 notebook 并行”的场景,通常暴露的是工程结构问题:逻辑没拆解、依赖没抽象、状态管理混乱。优先重构代码,而不是绕过 Notebook 的单内核约束去硬拼界面。


















