如何编程在JupyterLab同一浏览器标签页中打开多个notebook
直接访问/lab/tree/路径的方式默认会触发浏览器新建标签,本质是这个路径属于Jupyter的单文件独立入口,没有绑定固定工作区,要实现所有notebook都在同一个JupyterLab浏览器标签内加载,用以下方案即可:
固定工作区启动方案(推荐,无全局副作用)
启动JupyterLab时指定固定的默认工作区,不要用临时默认工作区,启动命令:jupyter lab --no-browser --LabApp.default_url='/lab/workspace/main' &后续所有待打开的notebook,都使用同工作区的带参链接访问,链接格式为:
http://localhost:<端口号>/lab/workspace/main?tree=<Notebook相对于Jupyter启动目录的相对路径>这个链接的核心是所有跳转都指向同一个
main工作区入口:第一次访问时会正常打开JupyterLab浏览器标签,后续再调用sensible-browser打开同工作区、不同tree参数的链接时,浏览器会判定为同地址入口,直接切到已经打开的JupyterLab标签,JupyterLab会自动在自身的内部标签栏加载对应的notebook文件,不会弹出新的浏览器标签。
注意路径参数必须填Jupyter启动目录下的相对路径,不要填系统绝对路径,否则会加载失败。浏览器设置调整方案(无需重启Jupyter)
如果已经用默认配置启动了JupyterLab不想重启,可以修改对应浏览器的标签页打开规则:在Chrome/Edge等Chromium内核浏览器的设置页,找到标签页相关配置,关闭「同域链接始终新建标签页」的选项,之后再打开同端口下的notebook链接,浏览器会自动复用已打开的JupyterLab标签加载文件。这个方案会修改浏览器全局跳转规则,影响其他网站的链接打开逻辑,优先选第一个方案。
注意:不要直接使用
/lab/tree/xxx.ipynb格式的链接做批量打开,这个路径是Jupyter设计的单文件独立访问入口,默认逻辑就是独立加载页面,不管服务端有没有已运行的实例,都会触发浏览器新建标签。
内容的提问来源于stack exchange,提问作者ea42_gh

