Panel升级后from panel.io.pyodide import show失效,求解决方案
Panel 24.10.23版本下PyScript中show函数的正确导入方式及代码修复
核心问题解决:show函数导入路径变更
Panel升级到24.10.23版本后,原panel.io.pyodide模块下的show函数已迁移至panel.pyodide模块,需修改导入语句:
原导入:
from panel.io.pyodide import show
新导入:
from panel.pyodide import show
也可通过Panel别名直接调用:
import panel as pn # 使用时写 pn.pyodide.show(...)
其他代码问题修复
除导入路径外,原代码还有几处需修正才能正常运行:
- 缺少
io模块导入:使用io.BytesIO前需添加import io process_file函数缩进错误:if分支下的代码需缩进对齐- 原语句
Bokeh.set_log_level("info");翻译说明:该语句作用是设置Bokeh日志级别为信息级,代码参数"info"无需修改为中文(为函数固定枚举值)
修复后的完整代码
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" /> <script defer src="https://pyscript.net/alpha/pyscript.js"></script> <py-env> - numpy - pandas - panel==24.10.23 </py-env> <h1>上传CSV文件</h1> <div id="fileinput"></div> <div id="upload"></div> <div id="table"></div> <script> // 设置Bokeh日志级别为信息级 Bokeh.set_log_level("info"); </script> <py-script> import asyncio import io import panel as pn import pandas as pd from panel.pyodide import show fileInput = pn.widgets.FileInput(accept='.csv') uploadButton = pn.widgets.Button(name='上传', button_type='primary') table = pn.widgets.Tabulator(pagination='remote', page_size=10) document.getElementById('table').style.display = 'none' def process_file(event): if fileInput.value is not None: table.value = pd.read_csv(io.BytesIO(fileInput.value)) document.getElementById('table').style.display = 'block' uploadButton.on_click(process_file) await show(fileInput, 'fileinput') await show(uploadButton, 'upload') await show(table, 'table') </py-script>
补充说明
- 确保
py-env中指定的Panel版本为24.10.23,避免版本不一致导致的问题
内容的提问来源于stack exchange,提问作者artsem krupenko
相关产品推荐
相关产品推荐

