在私人网站上托管交互式Jupyter笔记本。

14

我目前在Siteground上托管使用Wordpress的个人网站,其中包含一系列工程学习指南。我想朝着使这些学习指南交互性更强的方向发展(例如根据滑块刷新图形、进行基本计算以指示设计是否有效,因此需要使用numpy)。一位朋友建议我利用Jupyter笔记本来实现这一目的,因为它可以呈现LaTeX(我当前正在使用Mathjax与Wordpress一起使用),并且可以使用Bokeh或Plotly来获得我想要的交互式图形。

虽然我已经看到了在特定服务器上共享笔记本的教程,但我想做的是让其他人在他们的浏览器中运行我的笔记本(只读),而笔记本是私有托管的。

我仍然不确定Jupyter是否是实现我想要的功能的正确途径,因此我对其他建议持开放态度(有人还建议使用Julia,但我看到的示例较少)。


我也有这个问题。你找到答案了吗? - EB88
@EB88,到目前为止还没有这样的运气。 - stagermane
羞愧。你尝试过JupyterHub吗?这可以实现我的目标 - 在你的情况下,你可以在iframe中托管一个jupyter笔记本。但这对我来说行不通,因为我需要使用Windows机器进行托管,而JupyterHub不支持Windows。 - EB88
@EB88 我知道JupyterHub,但我想使用自己的服务器(因为我已经付费了),而且我担心JupyterHub会变成订阅服务。到目前为止,我找到的最接近我所尝试做的事情的“如何”是针对Julia的。 - stagermane
1
我怀疑JupyterHub会变成订阅制。目前它是开源的,因此您可以立即下载代码并运行JupyterHub,在自己的私有服务器上为笔记本提供服务,如果这有意义的话。从文档中: “JupyterHub服务器可以在您组织的内部网络上,也可以在公共互联网上运行(在这种情况下,请注意Hub的安全性)。” - EB88
3个回答

6
我同意你的朋友所说的,Jupyter Notebooks 是一个很好的方法。虽然它并不是实现你想要的目标的唯一方法,但我很难立即想出一个不需要大量设置的替代方案。
我能想到三种主要使用 Jupyter Notebooks 的方法,适合你的需求:

1. Azure Notebooks

微软有一个名为 Azure Notebooks 的新服务,目前是完全免费的。

Azure Notebooks 拥有 Jupyter Notebooks 的全部功能,除了 Python,用户还可以在RF# 中编程。至于服务的典型用法,这里是他们FAQ中的一段摘录:

Jupyter (曾用名 IPython)是一款功能强大的多语言 REPL。作为一项免费服务,它提供了 Jupyter 笔记本以及 R、Python 和 F# 的支持包。这意味着您只需登录即可使用,无需进行任何安装/设置。典型的用法包括学校/教学、举办网络研讨会、学习语言、分享想法等。该服务由 Python 团队 @ Microsoft 提供,隶属于数据组。
2. nbviewer 主 Jupyter 站点的顶部横幅包含指向名为 nbviewer 的应用程序的链接。
显然,您可以将自己的 markdown / Jupyter 语法创建为其他地方的一个离散页面,并将 URL 链接到 nbviewer 中,它将在结果中为您呈现。如果我要使用它,我要么;
  • 为我的Jupyter语法创建一个离散的WordPress页面,然后将其输入到nbviewer中;或者更可能的是
  • 使用GitHub来托管我的Jupyter笔记本页面(主要用于保存和版本控制,而不是Gist选项),并使用原始文本链接作为源输入到nbviewer中。

3. 托管您自己的解决方案

如果您足够技术娴熟,我建议您采用这种方法而不是使用nbviewer

当您在自己的计算机上启动Jupyter Notebooks时,您通过默认URL http://localhost:8888 在浏览器中访问它。这意味着必须存在某种机制将该端口暴露给外部用户,并允许他们使用完全相同的界面访问您的Notebook。有两种实现方法:

  1. 使用Jupyter Notebooks 公共服务器
  2. 远程访问您的普通Jupyter Notebook

希望这有所帮助!我很想知道这些选项中是否有任何一个适合您。


1
所以经过一番搜索,我也发现了nbviewer,但还有nbinteract。我认为这可能是更新指南的最佳途径(至少目前是这样)。 - stagermane

1

Iodide项目(随后是Pyodide)是两个旨在实现此目标的项目。它们仍在开发中,但值得研究。


1
pyodide的链接已失效。 - jtlz2
碘化物显然“不再开发”。 - jtlz2

0

你可以尝试使用 Mercury框架。它允许你将笔记本转换为Web应用程序(带有交互式小部件)。你需要在笔记本的开头添加YAML头文件。基于YAML,小部件将被生成。你的用户可以更改小部件的值并单击运行按钮以执行具有新输入的笔记本。你可以决定是否为用户显示或隐藏代码。你可以在单个服务器上使用Mercury提供多个笔记本。它基于Django,因此可以轻松部署在任何服务器/云上。

示例笔记本:

example notebook

上述笔记本的生成应用程序:

mercury app

在 Mercury 中的应用程序/笔记本画廊截图:

app gallery in Mercury


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接