Python 博克+;交互式小部件+;蟒蛇之家

Python 博克+;交互式小部件+;蟒蛇之家,python,bokeh,pythonanywhere,Python,Bokeh,Pythonanywhere,我找不到一个使用bokeh和bokeh小部件的交互式web应用程序的最小工作示例,这些小部件在Python上运行 理想情况下,我希望有一个相对复杂的函数的简单图(我不知道解析法,但我可以为我计算),当参数改变时,应该重新绘制 到目前为止,我发现的所有代码都没有这样做,例如,或者引用了bokeh的过时版本 大多数文档都涉及运行bokeh服务器,但没有说明如何使用WSGI运行bokeh服务器(这是PythonyWhere处理请求的方式)。出于这个原因,我尝试在烧瓶应用程序中嵌入一个Bokeh图。然而

我找不到一个使用bokeh和bokeh小部件的交互式web应用程序的最小工作示例,这些小部件在Python上运行

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

到目前为止,我发现的所有代码都没有这样做,例如,或者引用了bokeh的过时版本

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

我已经在Python3.5上安装了Bokeh0.12


我已经成功地在flask应用程序中运行了一个简单的bokeh绘图,但我无法使用bokeh小部件。

这里是一个在Pythonywhere上使用交互式小部件的Jupyter笔记本的工作示例:

%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服务器(通过从Pythonywhere仪表板上的控制台运行进程列表中删除相关的jupyter进程)。

从Bokeh
0.12.5
开始,您可以将Bokeh服务器应用程序直接嵌入jupyter笔记本中。这是在笔记本中使用交互式Bokeh绘图和小部件(由真正的python代码支持)的最好、最健壮的方法

您可以在此演示笔记本中学习这方面的示例:

正在运行的笔记本的屏幕显示如下:


谢谢你的回答。除非我遗漏了一些明显的东西,否则我看不到配置pythonywhere为Jupyter笔记本提供服务的简单方法。这可能是因为我的计划(免费)似乎不支持Jupyter笔记本电脑吗?这个问题专门询问Bokeh,而不是MPL。此外,我想知道Jupyter是否有可能将普通用户交互限制在我公开的小部件上。你现在需要Jupyter笔记本电脑的付费计划。但是你将无法向全世界展示正在运行的笔记本电脑(因为这样人们就可以做一些恶意的事情,比如擦除你的帐户)。Bokeh服务器应用程序需要使用WebSocket。PythonyWhere是否提供转发websocket连接?否则,这在技术上可能不可行。此外,你给出的链接中几乎每一个例子都显示应用程序“在参数更改时更新某些内容”,因此关于它们“不这样做”的评论令人困惑。最后,Bokeh服务器应用程序可以使用Jinja模板,因此,如果您的应用程序是单页应用程序,您可以非常轻松地完全作为Bokeh服务器应用程序(无烧瓶)来完成这一切。我知道Bokeh完全能够做到这一点。可能我缺少的是一种将bokeh服务器连接到WSGI的方法。至于到目前为止对代码的评论,我的意思显然是,PythonAnywhere不容易使用,或者它无法重新填充函数(除非我通过HTTP请求,并放弃使用有用的bokeh小部件)。我恐怕不明白“将bokeh服务器连接到WSGI”是什么意思。如果这排除了websocket连接,这将根本不起作用。Bokeh服务器必须能够打开和维护到客户端的websocket连接。顺便说一句,最近的邮件列表线程可能很有用/相关:我对Pythonywhere比较陌生,更不用说Python中的web开发了,但据我所知,我并不能真正控制实际的服务脚本,但据我所知,WebSocket不应该被阻止。您发送的示例实际上非常有趣,我可能会在周末尝试一下。。。如果成功,我将写一个关于这个问题的最简单的工作示例。Pythonywhere webapps不支持web套接字连接感谢分享!非常好!不幸的是,这并不能解决pythonywhere支持的问题。