我正在Holoviews中构建一个仪表板,并尝试从Jupyter笔记本中使用panel.serve()。它在我的本地计算机上运行良好,但我需要与公司网络中的其他计算机共享它,这样人们才能真正使用它。由于隐私问题,我不能把它部署到Heroku或类似的地方。下面是示例代码:
import panel as pn
pn.extension()
dashboard_title = pn.panel('## Test Dashboard')
dashboard_footlote = pn.panel('Test Test Test')
dash = pn.Column(dashboard_title, dashboard_footlote)
dash.servable(title="Claims Dashboard")
pn.serve(dash)
当我在Jupyter笔记本中运行它时,它打开了一个新的浏览器窗口和其中的仪表板。我试着从另一台电脑上通过在地址栏中输入http://10.80.60.31:60840/来访问同一个仪表盘。但这并不能说明什么。在Jupyter单元格中,我得到以下错误:
ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://10.80.40.41:60840';
use --allow-websocket-origin=10.80.40.41:60840 or set BOKEH_ALLOW_WS_ORIGIN=10.80.40.41:60840 to permit this; currently we allow origins {'localhost:60840'}
我尝试将代码中的最后一行更改为以下内容:
pn.serve(dash, websocket_origin=['10.80.60.31:60840','localhost:60840'])
但是由于端口改变,它甚至在本地也不能工作。它给了我一个错误:
ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://localhost:58370';
use --allow-websocket-origin=localhost:58370 or set BOKEH_ALLOW_WS_ORIGIN=localhost:58370 to permit this; currently we allow origins {'localhost:60840', '10.80.60.31:60840'}
如果我尝试像这样分配一个特定的端口:
pn.serve(dash, port = 60840, websocket_origin=['10.80.60.31:60840','localhost:60840'])
它甚至没有开始说:
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
解决方案可能很简单,但我对网络的东西知之甚少,我甚至不知道该用谷歌搜索什么。
如果你能指导我如何使它工作,我会很感激的。
我在.py文件中使用pn.serveable(dash)
,然后单独启动panel serve --port 8086 file.py
,但我认为这将与您所做的工作类似。典型的"gotch"您需要确保您正在使用的任何端口都没有被您的网络配置设置为防火墙,以便其他计算机可以访问它。您可能需要在您的计算机的防火墙规则中添加一个例外,以打开特定的端口。您可以使用该端口上的任何程序(web服务器,ssh客户端,telnet客户端等)进行测试;Panel的服务器在这方面没有任何特殊要求。在https://docs.bokeh.org/en/latest/docs/user_guide/server.html#deployment-scenarios上有很多详细信息,但是配置您的系统不阻止某个端口是您必须在公司设置中与IT部门一起解决的问题。
pn.serve(dash, port=80, websocket_origin=['*'])
我已经试了你的代码,它在我这端工作。