【问题标题】:Bokeh + interactive widgets + PythonAnywhere散景 + 交互式小部件 + PythonAnywhere
【发布时间】:2016-12-18 00:24:52
【问题描述】:

我无法找到使用在 PythonAnywhere 上运行的散景和散景小部件的交互式 Web 应用程序的最小工作示例。

理想情况下,我想绘制一个相对复杂函数的简单图(我不知道它的解析,但我有 SymPy 为我计算),当参数更改时应该重新绘制它。

到目前为止我发现的所有代码都没有这样做,例如https://github.com/bokeh/bokeh/tree/master/examples,或指散景的过时版本。

大部分文档都涉及运行散景服务器,但没有说明如何使用 WSGI 运行它(这是 PythonAnywhere 处理请求的方式)。出于这个原因,我尝试在 Flask 应用程序中嵌入散景图。但是,据我了解,为了拥有交互式散景小部件(应该在 Python 中触发一些计算),确实需要散景服务器。如果我可以使用其他一些更简单的工具获得类似的结果,我并不特别喜欢使用 Flask 或 Bokeh。不幸的是,带有交互式小部件的 Jupyter 笔记本在 PythonAnywhere 中似乎不是一个选项。

我在 Python 3.5 上安装了散景 0.12。

我已经设法在烧瓶应用程序中运行了一个简单的散景图,但我无法使用散景小部件。

【问题讨论】:

  • 散景服务器应用程序需要使用 websockets。 PythonAnywhere 是否提供转发 websocket 连接?如果不是,这在技术上可能不可行。此外,您提供的链接中的几乎每个示例都显示了“在更改参数时更新某些内容”的应用程序,因此关于它们“不这样做”的评论令人困惑。最后,Bokeh 服务器应用程序可以使用 Jinja 模板,因此如果您的应用程序是单页应用程序,您可以最轻松地完全作为 bokeh 服务器应用程序完成所有操作(无需烧瓶)
  • 我明白散景完全可以做到这一点。可能我缺少的是一种将散景服务器连接到 WSGI 的方法。至于到目前为止发现的代码的评论,我显然是指要么不能轻松使用 PythonAnywhere,要么不能重新绘制函数(除非我通过 HTTP 请求,并放弃使用漂亮的散景小部件) .
  • 恐怕我不明白“将散景服务器连接到 WSGI”是什么意思。如果这排除了 websocket 连接,这将根本行不通。 Bokeh 服务器必须能够打开和维护与客户端的 websocket 连接。顺便说一句,这个最近的邮件列表线程可能有用/相关:groups.google.com/a/continuum.io/forum/?pli=1#!topic/bokeh/…
  • 我对 PythonAnywhere 比较陌生,更不用说 Python 中的 Web 开发了,但据我所知,我并不能真正控制实际的服务脚本,但据我所知,websockets 不应该被阻止。您发送的示例实际上非常有趣,我可能会在周末尝试一下...如果成功,我将为此编写一个最小的工作示例。
  • pythonanywhere webapps 不支持 web socket 连接

标签: python bokeh pythonanywhere


【解决方案1】:

这是一个 Jupyter notebook 的工作示例,在 pythonanywhere 上带有交互式小部件:

%pylab inline
import matplotlib.pyplot as plt
from ipywidgets import interact

def plot_power_function(k):
    xs = range(50)
    dynamic_ys = [x ** k for x in xs]
    plt.plot(xs, dynamic_ys)

interact(plot_power_function, k=[1, 5, 0.5])

PythonAnywhere 确实预装了 ipywidgets 模块。但是,如果您没有看到交互式小部件,请确保您已从 bash 控制台运行 jupyter nbextension enable --py widgetsnbextension 以便为您的笔记本启用它。启用此扩展后,您必须重新启动 jupyter 服务器(通过从 pythonanywhere 仪表板上的控制台运行进程列表中终止相关的 jupyter 进程)。

【讨论】:

  • 感谢您的回答。除非我遗漏了一些明显的东西,否则我看不到配置 PythonAnywhere 以服务于 Jupyter 笔记本的简单方法。这可能是因为我的计划(免费)似乎不支持 Jupyter 笔记本吗?
  • 该问题专门询问 Bokeh,而不是 MPL。
  • 另外,我想知道 Jupyter 是否可以将通用用户交互限制为我公开的小部件。
  • 您现在需要为 juptyer notebooks 付费。但是您将无法向全世界展示正在运行的笔记本(因为人们可能会做恶意的事情,例如擦除您的帐户)。
【解决方案2】:

从 Bokeh 0.12.5 开始,您可以将 Bokeh 服务器应用程序直接嵌入到 Jupyter 笔记本中。这是在笔记本中拥有交互式散景图和小部件(由真正的 python 代码支持)的最佳和最强大的方法。

您可以在此演示笔记本中学习一个示例:

https://github.com/bokeh/bokeh/blob/master/examples/howto/server_embed/notebook_embed.ipynb

下面是该笔记本的截屏视频:

【讨论】:

  • 感谢分享!挺棒的!不幸的是,这并不能解决 PythonAnywhere 支持的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 1970-01-01
  • 2016-03-07
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多