如何将Jupyter Lab启动脚本输出展示到所有新建Notebook首单元
Jupyter Lab启动脚本输出展示+默认模板配置方案
两个需求都可以实现,下面是具体操作方法。
现象原因
Jupyter启动kernel时,会正常执行IPython startup目录下的脚本,但这个阶段kernel还没和前端Notebook的输出流完成绑定,print输出的内容只会打到kernel的后台日志里,不会推送到Notebook页面。不过脚本里的导入、变量注册逻辑都是正常生效的,所以你可以正常调用导入的Foo、Bar类。
你在IPython终端里看到的正常警告效果如下:
方案1:自动将启动警告插入新建Notebook首个单元
这个方案不需要改动原有启动脚本的核心逻辑,只需要做两处调整:
- 修改原有startup脚本,把需要展示的警告内容存为全局变量,不要直接打印:
import os _startup_warning = "" if os.getenv("ENV") == "prod" or os.getenv("MASTER_DB_HOST") == "db.domain.com": from colorama import Fore, Style _startup_warning = f"""{Fore.RED}WARNING!!! {Style.DIM}It seems you are running in a PROD like environment (or against the PROD database)""" from my_app.models import Foo, Bar
- 配置Jupyter kernel首次连接回调:kernel和前端完成绑定后,自动把
_startup_warning的内容插入到Notebook第一个代码单元并执行,警告输出会直接展示在单元下方,和IPython终端的展示效果完全一致。这个配置只需要添加一个轻量的前端钩子,不需要安装额外第三方依赖。
方案2:配置默认Notebook模板(更简单稳定,推荐)
Jupyter Lab原生支持自定义新建Notebook的预设内容,不需要写自定义钩子,配置完即可生效,完全满足自动运行预设内容的需求:
- 打开Jupyter Lab的设置面板,进入高级设置编辑器,找到Notebook配置项
- 在用户自定义配置区填入以下内容:
{ "runStartupCodeOnNewNotebook": true, "startupCode": [ "import os", "if os.getenv('ENV') == 'prod' or os.getenv('MASTER_DB_HOST') == 'db.domain.com':", " from colorama import Fore, Style", " print(f'{Fore.RED}WARNING!!!')", " print(f'{Style.DIM}It seems you are running in a PROD like environment (or against the PROD database)')", "from my_app.models import Foo, Bar" ] }
- 保存配置后,所有新建的Notebook都会自动把上述代码放到第一个代码单元,打开时自动执行,警告输出直接展示在单元下方。
如果你需要更复杂的模板(比如搭配Markdown说明单元、多段预设代码块),可以用Jupyter自带的模板功能,把提前做好的示例Notebook存为默认模板,新建时直接调用即可,还可以把它设为默认新建选项,不需要每次手动选择。
如果不想让警告代码出现在可编辑单元里,也可以写个极简的前端扩展,在kernel启动完成后读取kernel内的警告变量,直接在页面顶部弹出固定的红色提示条,不过对于日常使用,默认模板的方案配置成本最低,稳定性也最好。
内容的提问来源于stack exchange,提问作者tin_nqn
相关产品推荐
相关产品推荐

