Panel应用转Pyodide-Worker时遇ModuleNotFoundError:找不到mymodule
Panel Pyodide部署时ModuleNotFoundError问题解决
问题背景
本地执行panel serve script.py --autoreload运行Panel应用完全正常,但使用panel convert script.py --to pyodide-worker --out pyodide转换为Pyodide HTML后,通过python3 -m http.server访问生成的页面时,出现ModuleNotFoundError: no module named 'mymodule'错误。已尝试手动追加本地路径到sys.path、使用--requirements ./mymodule参数,均未解决。
项目文件结构:
├── script.py └── mymodule/ ├── __init__.py ├── my_obj.py ├── param_classes.py └── compute_obj.py
解决方案
方案1:显式指定额外模块
panel convert不会自动识别并打包本地自定义模块,需通过--extra-modules参数明确指定模块路径,执行以下转换命令:
panel convert script.py --to pyodide-worker --out pyodide --extra-modules ./mymodule
该参数会将指定的本地模块目录复制到Pyodide运行环境中,确保应用能正确导入mymodule。
方案2:打包模块为wheel后指定依赖
- 若使用Poetry管理环境,先将
mymodule打包为wheel文件:
poetry build
- 转换时通过
--requirements参数指定生成的wheel文件路径:
panel convert script.py --to pyodide-worker --out pyodide --requirements dist/mymodule-0.1.0-py3-none-any.whl
此方法适合模块结构复杂、包含第三方依赖的场景。
方案3:动态添加模块路径到Pyodide环境
在script.py的最开头添加以下代码,仅在Pyodide环境中生效,手动将模块所在目录加入sys.path:
import sys from pathlib import Path if 'pyodide' in sys.modules: # 将当前脚本所在目录添加到Python路径 sys.path.append(str(Path(__file__).parent))
注意:需确保mymodule目录与生成的HTML文件处于同一HTTP服务路径下,否则需调整路径逻辑。
验证
- 执行转换命令后,检查
pyodide输出目录:方案1需确认mymodule文件夹已被复制;方案2需确认wheel已被正确安装到Pyodide环境。 - 重启HTTP服务器,访问
http://localhost:8000/pyodide/script.html,确认错误消失。
内容的提问来源于stack exchange,提问作者GoneAsync
相关产品推荐
相关产品推荐

