最稳导出HTML方式是jupyter nbconvert命令行:需加--execute嵌入输出、--html-mathjax-url指定本地MathJax路径解决公式不显示、--embed-images保障Plotly图表离线显示,避免GUI导出不可靠问题。

用 jupyter nbconvert 命令行导出最稳
GUI 点菜单(File → Download as → HTML)经常卡住、漏图表、公式不渲染,尤其含 Plotly 或自定义 CSS 时基本不可靠。命令行才是生产级做法,不依赖浏览器、不卡内核、可复现。
基础操作就是进 notebook 所在目录,运行:jupyter nbconvert --to html notebook.ipynb
- 生成同名
notebook.html,但默认不执行代码,只转源码和 Markdown - 要嵌入图表、打印输出、训练日志?必须加
--execute参数 -
--output-dir推荐用绝对路径(如/home/user/reports/),相对路径容易因工作目录错位导致文件失踪 - 中文路径会触发 UnicodeDecodeError,把 notebook 放到英文路径下再导出
公式不显示?检查 MathJax 加载方式
打开导出的 HTML,发现 $$E=mc^2$$ 变成纯文本,右键没 MathJax 菜单——说明 MathJax 没加载成功。
原因很直接:nbconvert 默认从 CDN(如 https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js)加载,但 file:// 协议或内网环境会因 CORS 被浏览器拦截。
- 最可靠解法是本地化 MathJax:先下载
tex-chtml.js到项目目录(比如./mathjax/tex-chtml.js),再加参数:jupyter nbconvert --to html --html-mathjax-url="./mathjax/tex-chtml.js" notebook.ipynb - 或者全局配置:运行
jupyter nbconvert --generate-config,编辑~/.jupyter/jupyter_nbconvert_config.py,加一行:c.HTMLExporter.mathjax_url = "./mathjax/tex-chtml.js" - 别用
--no-input后再手动删代码块——这会导致单元格编号错乱,影响公式锚点定位
TemplateNotFound: basic 错误怎么修
报这个错不是 notebook 有问题,而是 nbconvert 模板注册异常,常见于 conda 多环境混用或旧版本。
立即学习“前端免费学习笔记(深入)”;
- 先查版本:
jupyter nbconvert --version,低于 7.0 的建议升级:pip install --upgrade jupyter nbconvert - 临时绕过:加
--template basic显式指定模板,能跑通说明是模板路径错位,不是缺文件 - conda 用户特别注意:
which jupyter和python -m jupyter.nbconvert --version输出可能不同,确认你调用的是当前环境里的 nbconvert - 别删
~/.jupyter/jupyter_nbconvert_config.py里已有的模板配置行,覆盖写比清空重来更安全
含 Plotly 图表的 HTML 怎么保真
Plotly 默认输出是 JS 对象,nbconvert 不嵌入 JS 运行时,直接导出常显示空白或“Loading…”。
- 必须加
--embed-images,让 nbconvert 把图表序列化为 base64 PNG 内联进 HTML - 代码里提前加一句:
import plotly.io as pio; pio.renderers.default = "png",避免依赖前端 JS 渲染 - 如果仍想保留交互性,得配合
plotly.offline.init_notebook_mode()+--execute,但离线打开会失效——交互性与离线可用性不可兼得 -
--no-input和--no-output不能同时用,否则图表输出被清空,只剩空 div
<script></script> 或 data:image/png 部分,这类修改无法反向同步回 notebook,下次重导就丢。真正需要定制样式,该改 Jinja2 模板,而不是修生成结果。



















