在网页中嵌入 Jupyter HTML 输出

Embed Jupyter HTML output in a web page

我想在我自己的网页中嵌入 Jupyter 的 HTML 输出。这样做的主要原因是,我可以通过互联网从我自己的网络应用程序使用 Jupyter - 也可以从世界任何地方访问我的研究笔记本。

一个典型的用例场景是我点击我页面上的一个按钮,一个 iframe 将被插入到我的页面中;然后 Jupyter 将在后端启动(如果尚未 运行),Jupyter 的输出将 'piped' 到 iframe - 这样我就可以在我的页面中使用 Jupyter。

它出现的天真的解决方案是使用 <iframe>,但有两个问题:

  1. iframe跨域策略问题
  2. Jupyter 在首次启动时生成了一次性身份验证令牌

有什么方法可以克服这些问题,让我可以将 Jupyter 的输出嵌入到我自己的网页中?

您需要检查 nbconvert - https://github.com/jupyter/nbconvert

你有 2 个选择。

  1. 使用命令行到 运行 notebook 然后让一些网络服务器 到服务器 .html
  2. 使用 python 和 nbconvert 库

这是短代码: 如果你想显示已经生成的:

来自 nbconvert.preprocessors 导入 ExecutePreprocessor 导入 nbformat 从 nbconvert 导入 HTMLExporter 从 nbconvert.preprocessors.execute 导入 CellExecutionError src_notebook = nbformat.reads(ff.read(), as_version=4) #其中 ff 是用 some open("path to notebook file")<br> 打开的文件 html_exporter = HTMLExporter() html_exporter.template_file = 'basic' #basic 将跳过生成正文和 html 标签....使用 "all" 生成所有.. (正文,资源)= html_exporter.from_notebook_node(src_notebook) print(body) #body 有 html 输出

如果你还想要 运行 笔记本,那么:

来自 nbconvert.preprocessors 导入 ExecutePreprocessor 导入 nbformat 从 nbconvert 导入 HTMLExporter 从 nbconvert.preprocessors.execute 导入 CellExecutionError src_notebook = nbformat.reads(ff.read(), as_version=4) #其中 ff 是用 some open("path to notebook file")<br> 打开的文件 ep = 执行预处理器(超时=50,kernel_name='python3') ep.preprocess(src_notebook, {}) html_exporter = HTMLExporter() html_exporter.template_file = 'basic' #basic 将跳过生成正文和 html 标签....使用 "all" 生成所有.. (正文,资源)= html_exporter.from_notebook_node(src_notebook) print(body) #body 有 html 输出

您可以使用 ipython nbconvert --to html notebook.ipynb 来获取相同的 html 代码。 这是有关如何使用 IPython 笔记本写博客的指南 - see here

如果您的网站使用 python 编写,请使用 python 嵌入文档 还有本教程 - see here

或使用kyso.io 以下是如何使用 Kyso 平台嵌入 Jupyter - see here

(免责声明 - 我是 kyso 的创始人)

您可以使用 html_embed 预处理器直接执行此操作:

$ jupyter nbconvert  --to html_embed  Annex.ipynb
[NbConvertApp] Converting notebook Annex.ipynb to html_embed
/usr/local/lib/python3.6/site-packages/nbconvert/filters/datatypefilter.py:41: UserWarning: Your element with mimetype(s) dict_keys(['image/pdf']) is not able to be represented.
  mimetypes=output.keys())
[NbConvertApp] Writing 2624499 bytes to Annex.html

奇怪的是,我无法在 nbconvert 的 manual 中找到直接引用。