Взаимодействие с сервером Bokeh в JupyterHub

У меня есть простой блокнот с боке, который фиксирует координаты, которые рисует пользователь, и он отлично работает в Jupyter:

2018-07-03_6-52-18

import numpy as np

N = 500
x = np.linspace(0, 3, N)
y = np.linspace(0, 3, N)

xx, yy = np.meshgrid(x, y)
z = np.sin(xx) * np.cos(yy)

from bokeh import events
from bokeh.io import show, output_notebook
from bokeh.plotting import figure

output_notebook()

geom = {}
global geom

def print_event(attributes=[]):
    def python_callback(event):
        geom.update(event.__dict__['geometry'])
    return python_callback

def modify_doc(doc):
    p = figure(x_range=(0, 3), y_range=(0, 3), 
      tools='reset,box_select,lasso_select,poly_select', plot_height=300)
    p.image(image=[z], x=0, y=0, dw=3, dh=3, palette='Spectral11')
    p.on_event(events.SelectionGeometry, print_event(attributes=['geometry']))
    doc.add_root(p)

show(modify_doc)

print(geom)

но в JupyterHub show(modify_doc) не создает график, и консоль разработчика показывает, что JS не удалось загрузить данные ответа из этого запроса:

http://localhost:43474/autoload.js?bokeh-autoload-element=111c97fa-dbc8-437c-9770-471dc23fb13f&bokeh-absolute-url=http://localhost:43474&resources=none

Поскольку я получаю доступ к Dask Dashboard на моем jupyterhub по адресу

http://pangeo.esipfed.org/user/rsignell-usgs/proxy/ 8787

Я подумал, может быть, что-то вроде этого может сработать:

show(modify_doc, notebook_url='pangeo.esipfed.org/user/rsignell-usgs/proxy')

но это сгенерировало этот URL:

http://pangeo.esipfed.org/user/rsignell-usgs/proxy:34560/autoload.js?bokeh-autoload-element=870004ec-7366-4b38-b20f-2119e2b52327&bokeh-app-path=/user/rsignell-usgs/proxy:34560&bokeh-absolute-url=http://pangeo.esipfed.org/user/rsignell-usgs/proxy:34560&resources=none

это дало ошибку 404.

Я вижу, что несколько месяцев назад было улучшение боке, которое должно позволить такое взаимодействие. для работы, и я полагаю, что должен иметь возможность указать notebook_url как функцию, чтобы это работало, но я не могу понять это.

Ясно, что я делаю неправильно, или у кого-то есть пример того, как это работает?


person Rich Signell    schedule 03.07.2018    source источник


Ответы (1)


В документации Bokeh упоминается некоторая настройка, которую вам необходимо выполнить для взаимодействия с сервером bokeh при проксировании через jupyterhub:

https://docs.bokeh.org/en/latest/docs/user_guide/notebook.html#jupyterhub

Надеюсь, это поможет.

person kpup    schedule 25.01.2019
comment
можете ли вы предоставить более подробную информацию об этом? Я использую Jupyterhub с Kubespawner. Как я могу передать переменную env EXTERNAL_URL, как они упоминали в своем примере? - person Hossein; 08.11.2019