问题现象
习惯了深色编辑器的开发者打开 Jupyter Notebook 时,往往会遇到这样几个困扰:
- 界面默认只有亮色一套皮肤,菜单里翻遍了也找不到「主题」或「外观」相关的开关;
- 在网上查到某个主题包,装完执行完命令,刷新页面后界面却毫无变化;
- 好不容易把背景改成深色,顶部的工具栏、文件名区域却整排消失,只能再改回去;
- 同一条命令在同事的 JupyterLab 上执行,直接报错说找不到配置文件。
这些现象看起来杂乱,其实指向同一件事:Notebook 的配色并不是由某个设置项控制的,而是由样式表决定的。不理解这一点,就只能靠反复试错碰运气。
原因分析
第一,主题的本质是样式表覆盖。Notebook 前端渲染出来的表格、代码单元格、菜单栏,全部由层叠样式表决定其颜色与字号。官方发行版只内置了一套亮色样式,并且没有在界面上暴露切换入口,所以「找不到选项」不是操作不熟,而是入口确实不存在。
第二,第三方主题包的工作机制是写文件而不是改配置。以常用的主题命令行工具为例,它做的事情是把自己携带的样式文件写入 Jupyter 配置目录下的自定义样式文件中,浏览器每次加载页面时会额外加载这个文件,从而把默认外观覆盖掉。这个机制解释了两个常见故障:一是命令执行后必须重启内核并强制刷新浏览器,因为页面已经加载过的旧样式还留在缓存里;二是该文件一旦被覆盖,之前手工调整过的样式也会一并丢失。
第三,参数差异导致「工具栏消失」。