PyScript中使用Panel时遭遇系列错误的排查求助
PyScript中使用Panel时遭遇系列错误的排查求助
我之前用PyScript搭配Panel写的脚本正常跑了快一年,最近突然罢工了,折腾了好几个阶段还是没完全解决,想请大家帮忙看看问题出在哪。
初始错误:AttributeError 找不到'initialized'属性
一开始我遇到的是这个报错,完全摸不着头脑,所以一开始根本不知道该怎么下手修复:
JsException(PythonError: Traceback (most recent call last): File "/lib/python3.10/asyncio/futures.py", line 201, in result raise self._exception File "/lib/python3.10/asyncio/tasks.py", line 232, in __step result = coro.send(None) File "/lib/python3.10/site-packages/_pyodide/_base.py", line 500, in eval_code_async await CodeRunner( File "/lib/python3.10/site-packages/_pyodide/_base.py", line 353, in run_async await coroutine File "", line 2, in File "/lib/python3.10/site-packages/panel/__init__.py", line 48, in from . import layout # noqa File "/lib/python3.10/site-packages/panel/layout/__init__.py", line 31, in from .accordion import Accordion # noqa File "/lib/python3.10/site-packages/panel/layout/accordion.py", line 5, in from .base import NamedListPanel File "/lib/python3.10/site-packages/panel/layout/base.py", line 13, in from ..reactive import Reactive File "/lib/python3.10/site-packages/panel/reactive.py", line 33, in from .viewable import Layoutable, Renderable, Viewable File "/lib/python3.10/site-packages/panel/viewable.py", line 25, in from .config import config, panel_extension File "/lib/python3.10/site-packages/panel/config.py", line 417, in config = _config(**{k: None if p.allow_None else getattr(_config, k) File "/lib/python3.10/site-packages/panel/config.py", line 216, in __init__ super().__init__(**params) File "/lib/python3.10/site-packages/param/parameterized.py", line 4139, in __init__ if not isinstance(self._param__private, _InstancePrivate): File "/lib/python3.10/site-packages/panel/config.py", line 289, in __getattribute__ init = super().__getattribute__('initialized') AttributeError: '_config' object has no attribute 'initialized' )
这是我当时用的完整代码:
<html> <head> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="https://unpkg.com/@holoviz/panel@0.13.0/dist/bundled/bootstraptemplate/bootstrap.css"> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vega@5"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script> <script type="text/javascript" src="https://unpkg.com/tabulator-tables@4.9.3/dist/js/tabulator.js"></script> <script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.js"></script> <script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js"></script> <script type="text/javascript" src="https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js"></script> <script type="text/javascript" src="https://unpkg.com/@holoviz/panel@0.13.0/dist/panel.min.js"></script> <script type="text/javascript"> Bokeh.set_log_level("info"); </script> <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==0.13.1a2 - xlsxwriter - openpyxl </py-env> </head> <body> <div class="container-fluid d-flex flex-column vh-100 overflow-hidden" id="container"> <nav class="navbar navbar-expand-md navbar-dark sticky-top shadow" id="header" style="background-color: #0f54ea;"> <div class="app-header"> <a class="title" href="" style="color: #f7f6f3;"> Calcuator</a> </div> </nav> <div class="row overflow-hidden" id="content"> <div class="col mh-100 float-left" id="main"> <p> Please Upload a CSV file below to start the calculation! </p> <div id="fileinput"></div> <div id="table"></div> <div id="download"></div> </div> </div> </div> <py-script> import asyncio import panel as pn import pandas as pd from panel.io.pyodide import show import xlsxwriter import openpyxl file_input = pn.widgets.FileInput(accept='.xlsx', width=180) button_upload = pn.widgets.Button(name='Upload', button_type='primary', width=100) row = pn.Row(file_input, button_upload, height=75) table = pn.widgets.Tabulator(pagination='remote', page_size=20, disabled=True) document.getElementById('table').style.display = 'none' await show(row, 'fileinput') await show(table, 'table') await show(file_download_csv, 'download') print(row) print(table) print(file_download_csv) document.getElementById('download').style.display = 'none' </py-script> </body> </html>
第一次更新:升级PyScript后遇到顶级await禁用问题
后来我把PyScript升级到了最新版本,报错变了,这次看起来更具体,但我完全不懂什么是协程:
UserError: (PY9000): The use of top-level "await", "async for", and "async with" has been removed.
Please write a coroutine containing your code and schedule it using asyncio.ensure_future() or similar.
第二次更新:尝试协程后遇到Panel模块找不到的问题
我照着提示试着写了个协程,结果又弹出新错误:
No module named 'panel'
现在我大概明白过来,这个脚本是PyScript还在Beta阶段时写的,当时的示例代码和现在的规范已经不一样了,我打算照着现在的官方示例重新写一遍脚本,但还是希望能得到大家的指点,看看有没有更快捷的修复方式,或者这些错误到底是版本不兼容导致的还是别的问题?
备注:内容来源于stack exchange,提问作者Jasim C
相关产品推荐
相关产品推荐

