在网页中嵌入 Jupyter HTML 输出
Embed Jupyter HTML output in a web page
我想在我自己的网页中嵌入 Jupyter 的 HTML 输出。这样做的主要原因是,我可以通过互联网从我自己的网络应用程序使用 Jupyter - 也可以从世界任何地方访问我的研究笔记本。
一个典型的用例场景是我点击我页面上的一个按钮,一个 iframe 将被插入到我的页面中;然后 Jupyter 将在后端启动(如果尚未 运行),Jupyter 的输出将 'piped' 到 iframe - 这样我就可以在我的页面中使用 Jupyter。
它出现的天真的解决方案是使用 <iframe>
,但有两个问题:
- iframe跨域策略问题
- Jupyter 在首次启动时生成了一次性身份验证令牌
有什么方法可以克服这些问题,让我可以将 Jupyter 的输出嵌入到我自己的网页中?
您需要检查 nbconvert - https://github.com/jupyter/nbconvert
你有 2 个选择。
- 使用命令行到 运行 notebook 然后让一些网络服务器
到服务器 .html
- 使用 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 中找到直接引用。
我想在我自己的网页中嵌入 Jupyter 的 HTML 输出。这样做的主要原因是,我可以通过互联网从我自己的网络应用程序使用 Jupyter - 也可以从世界任何地方访问我的研究笔记本。
一个典型的用例场景是我点击我页面上的一个按钮,一个 iframe 将被插入到我的页面中;然后 Jupyter 将在后端启动(如果尚未 运行),Jupyter 的输出将 'piped' 到 iframe - 这样我就可以在我的页面中使用 Jupyter。
它出现的天真的解决方案是使用 <iframe>
,但有两个问题:
- iframe跨域策略问题
- Jupyter 在首次启动时生成了一次性身份验证令牌
有什么方法可以克服这些问题,让我可以将 Jupyter 的输出嵌入到我自己的网页中?
您需要检查 nbconvert - https://github.com/jupyter/nbconvert
你有 2 个选择。
- 使用命令行到 运行 notebook 然后让一些网络服务器 到服务器 .html
- 使用 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 中找到直接引用。