Боке + интерактивные виджеты + PythonAnywhere

Мне не удалось найти минимальный рабочий пример интерактивного веб-приложения, использующего виджеты боке и боке, который работает на PythonAnywhere.

В идеале я хотел бы иметь простой график относительно сложной функции (которую я не знаю аналитически, но у меня есть SymPy вычислить ее для меня), которая должна быть изменена при изменении параметра.

Весь код, который я нашел до сих пор, этого не делает, например https://github.com/bokeh/bokeh/tree/master/examples , или относится к устаревшим версиям боке.

Большая часть документации посвящена запуску bokeh-сервера, но нет никаких указаний на то, как запустить его с помощью WSGI (именно так PythonAnywhere обрабатывает запросы). По этой причине я попытался встроить график Bokeh в приложение Flask. Однако, насколько я понимаю, для интерактивных виджетов Bokeh (которые должны запускать некоторые вычисления в Python) требуется сервер bokeh. Я не особо привязан к использованию Flask или Bokeh, если я смогу добиться аналогичного результата с помощью других более простых инструментов. К сожалению, записная книжка Jupyter с интерактивными виджетами не подходит для PythonAnywhere.

Я установил bokeh 0.12 на Python 3.5.

Мне удалось запустить простой сюжет с эффектом боке в приложении Flask, но я не могу использовать виджеты Bokeh.


person norok2    schedule 11.08.2016    source источник
comment
Серверные приложения Bokeh требуют использования веб-сокетов. Предоставляет ли PythonAnywhere пересылку соединений через веб-сокеты? В противном случае это может быть технически невыполнимо. Кроме того, почти в каждом отдельном примере по указанной вами ссылке показаны приложения, которые что-то обновляют при изменении параметра, поэтому комментарий о том, что они этого не делают, сбивает с толку. Наконец, серверные приложения Bokeh могут использовать шаблон Jinja, поэтому, если ваше приложение представляет собой одностраничное приложение, вы можете легко сделать все это полностью как приложение-сервер Bokeh (без колбы).   -  person bigreddot    schedule 11.08.2016
comment
Я понимаю, что боке на это вполне способно. Возможно, мне не хватает способа подключить сервер боке к WSGI. Что касается комментария к найденному к настоящему моменту кода, я, очевидно, имею в виду, что либо он не может легко работать с PythonAnywhere, либо он не может перенастроить функцию (если я не прохожу HTTP-запрос и не откажусь от использования красивых виджетов боке) .   -  person norok2    schedule 11.08.2016
comment
Боюсь, я не понимаю, что означает подключение сервера боке к WSGI. Если это исключает подключения к веб-сокетам, это просто не сработает. Сервер Bokeh должен иметь возможность открывать и поддерживать подключения к клиентам через веб-сокеты. Кстати, эта недавняя ветка списка рассылки может быть полезной / актуальной: groups.google.com/a/continuum.io/forum/?pli=1#!topic/bokeh/   -  person bigreddot    schedule 11.08.2016
comment
Я относительно новичок в PythonAnywhere, не говоря уже о веб-разработке на Python, но, исходя из моего небольшого понимания, я действительно не могу контролировать фактический сценарий обслуживания, но, насколько мне известно, веб-сокеты не должны блокироваться. Пример, который вы прислали, на самом деле довольно интересен, и я мог бы попробовать его в выходные ... в случае успеха я напишу минимальный рабочий пример по этому вопросу.   -  person norok2    schedule 12.08.2016
comment
веб-приложения pythonanywhere не поддерживают подключения к веб-сокетам   -  person conrad    schedule 12.08.2016
comment
так просто, +1 за сэкономленные часы разочарования в выходные :-)   -  person norok2    schedule 12.08.2016


Ответы (2)


Вот рабочий пример записной книжки Jupyter с интерактивными виджетами на 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. Но если вы не видите интерактивные виджеты, убедитесь, что вы запустили jupyter nbextension enable --py widgetsnbextension из консоли bash, чтобы включить их для ваших записных книжек. Вам придется перезапустить сервер jupyter после включения этого расширения (убив соответствующие процессы jupyter из списка запущенных процессов консоли на панели инструментов pythonanywhere).

person conrad    schedule 11.08.2016
comment
Спасибо за ответ. Если я не упущу что-то очевидное, я не вижу простого способа настроить PythonAnywhere для обслуживания записной книжки Jupyter. Может быть, это потому, что мой план (бесплатный) не поддерживает ноутбуки Jupyter? - person norok2; 11.08.2016
comment
Вопрос конкретно касается боке, а не MPL. - person bigreddot; 11.08.2016
comment
Кроме того, мне интересно, возможно ли с помощью Jupyter ограничить общее взаимодействие пользователя с виджетом, который я показываю. - person norok2; 11.08.2016
comment
Вам понадобится тарифный план для ноутбуков juptyer прямо сейчас. но вы не сможете показать миру работающие записные книжки (потому что тогда люди могут делать злонамеренные действия, такие как стирание вашей учетной записи). - person conrad; 12.08.2016

Начиная с Bokeh 0.12.5, вы можете встраивать серверные приложения Bokeh непосредственно в записные книжки Jupyter. Это лучший и самый надежный способ иметь интерактивные графики и виджеты Bokeh (поддерживаемые настоящим кодом Python) в записной книжке.

Вы можете изучить пример этого в этой демонстрационной записной книжке:

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

Скринкаст этого ноутбука в действии приведен ниже:

введите описание изображения здесь

person bigreddot    schedule 11.04.2017
comment
Спасибо, что поделились этим! Довольно приятно! К сожалению, это не решает проблему поддержки PythonAnywhere. - person norok2; 14.04.2017