用 jupyter nbconvert 命令行导出 html 最稳定可控:基础命令为 jupyter nbconvert --to html notebook.ipynb,需加 --execute 才运行并嵌入输出;推荐用绝对路径指定 --output-dir,模板异常可显式指定 --template basic 或升级 nbconvert 至 7.0+;plotly 图表需配合 --embed-images 和 plotly.offline.init_notebook_mode();导出后勿手动修改 html,应保持可复现性。

直接用 jupyter nbconvert 命令就行,不用开界面、不依赖浏览器环境,也比在 Jupyter Lab 里点菜单导出更可控。
用命令行导出 HTML:最稳的路径
很多人卡在「点了 File → Download as → HTML」却没反应,其实是前端渲染失败或内核没响应;而 nbconvert 是纯后端转换,只要 notebook 文件能读,就能出 HTML。
- 基础命令:
jupyter nbconvert --to html <code>notebook.ipynb,生成同名notebook.html - 想带输出(含图表、打印结果)?必须加
--execute参数,否则只转代码块,不跑单元格:jupyter nbconvert --to html --execute <code>notebook.ipynb - 输出目录用
--output-dir,别用相对路径如./out,容易因工作目录混乱失败;建议用绝对路径或先cd进目标文件夹 - 默认用内置模板,若需定制样式(比如去掉左栏、改字体),得配合
--template指向自定义.tpl文件,但普通需求完全没必要碰
导出空白/报错 TemplateNotFound: basic 怎么办
这通常不是 notebook 问题,而是环境里 nbconvert 模板注册异常,尤其多 Python 环境(conda/virtualenv)混用时常见。
- 先确认版本:
jupyter nbconvert --version,低于 7.0 的旧版对新内核兼容差,建议升级:pip install --upgrade jupyter nbconvert - 报
TemplateNotFound时,别急着重装,先运行:jupyter nbconvert --generate-config,再检查生成的jupyter_nbconvert_config.py里有没有误删或覆盖了c.Exporter.template_name - 临时绕过:加
--template basic显式指定,能跑通说明是模板路径错位,不是缺文件 - Conda 用户特别注意:不同 env 的
jupyter可能指向不同nbconvert,用which jupyter和python -m jupyter.nbconvert --version双重验证实际调用的是哪个
导出 HTML 后图表不显示、CSS 错乱
本质是资源加载方式问题——Jupyter 默认把图片、CSS、JS 打包进 HTML 单文件(--no-prompt --embed-images),但某些绘图库(如 Plotly、Bokeh)默认生成外部 JS 调用,离线打开就挂了。
立即学习“前端免费学习笔记(深入)”;
- Matplotlib 图表正常,但 Plotly 需加
--no-input --embed-images并确保 notebook 里用了plotly.offline.init_notebook_mode()或fig.show(renderer="html") - 如果 HTML 打开后控制台报
require is not defined,大概率是用了 JupyterLab 插件式渲染(如@jupyter-widgets/jupyterlab-manager),这种交互组件无法静态导出,得换用voilà或部署为服务 - 字体/排版异常?别动 HTML 源码,那是
nbconvert渲染器写的;真正该调的是--css-files加自定义 CSS,或改custom.css(位置见jupyter --paths输出的config目录)
真正麻烦的不是怎么导,而是导出后要不要再手动改 HTML —— 一旦你开始删 <script></script> 标签或 inline CSS,就等于放弃了 nbconvert 的可复现性。留个心眼:每次导出前先 git commit notebook,HTML 当作一次性交付物就好。










