Bokeh Server无法找到图片的问题求助
Bokeh Server 图片加载404问题解决
问题场景
在Jupyter Notebook中可正常显示图片的功能,迁移到Bokeh Server后出现404错误,无法加载图片。文件结构如下:
logo.png server_folder/ main.py logo.png static/ logo.png
尝试过两种代码实现均失效:
- 使用Div组件:
p = Div(text="<img src=\"logo.png\">") curdoc().add_root(p)
- 使用figure的image_url方法:
p = figure(x_range=(0,400), y_range=(0,400), width=400, height=400) p.image_url(url=["logo.png"], x=0, y=400, w=400, h=400) curdoc().add_root(p)
还试过file://logo.png、file://c:/some_path/logo.png等路径,均无效。其他元素渲染正常,仅图片加载失败。环境:Windows系统,Bokeh 2.4.3,Python 3.9.13,通过Anaconda Powershell Prompt启动服务。
解决方案
Bokeh Server对静态资源加载有明确规则,需按以下方式调整:
1. 静态文件放置规则
确保图片放在server_folder/static/目录下(你已完成此步骤),这是Bokeh Server默认的静态资源目录。
2. 修正资源路径
- Div组件写法:
路径必须以/static/开头,修改代码:p = Div(text='<img src="/static/logo.png">') curdoc().add_root(p) - image_url方法写法:
同样使用/static/开头的路径,配合ColumnDataSource传递资源地址:from bokeh.models import ColumnDataSource p = figure(x_range=(0,400), y_range=(0,400), width=400, height=400) source = ColumnDataSource(data=dict(url=["/static/logo.png"])) p.image_url(source=source, x=0, y=400, w=400, h=400, url='url') curdoc().add_root(p)
3. 启动服务的正确姿势
启动Bokeh Server时,确保工作目录为server_folder,执行命令:
bokeh serve --show main.py
若静态文件不在默认static目录,可通过--static-path参数指定路径:
bokeh serve --show --static-path=/自定义静态资源路径 main.py
关于file://路径失效的原因
浏览器安全策略禁止Web应用从本地文件系统加载资源,因此file://开头的路径在Bokeh Server这类Web服务场景下无法生效。
内容的提问来源于stack exchange,提问作者Aziuth
相关产品推荐
相关产品推荐

