You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyScript的pyodide-worker选项时,如何正确引入根目录文件?

解决Pyodide-Worker模式下加载本地数据文件的问题

当切换到pyodide-worker模式时,原pyscript模式下的<py-config> [[fetch]]配置无法直接生效——因为该模式下Pyodide运行在独立的Web Worker线程中,需要通过以下方式加载本地数据文件:

方案1:使用Pyodide内置API直接读取文件

在Python代码中,利用pyodide.http.open_url读取本地文件内容,既可以直接处理内容,也可以写入Pyodide的虚拟文件系统供后续代码调用:

import pyodide.http
import pandas as pd
from io import StringIO

# 方式1:直接读取内容并加载为DataFrame
csv_content = pyodide.http.open_url('./data.csv').read()
df = pd.read_csv(StringIO(csv_content))

# 方式2:写入虚拟文件系统,让后续代码可以通过路径访问
with open('data.csv', 'w') as f:
    f.write(csv_content)
# 后续代码即可正常使用 pd.read_csv('data.csv')

方案2:通过JavaScript预加载文件后传递给Pyodide

先在HTML中用JavaScript提前获取文件内容,再传递到Pyodide的全局环境中:

  1. 在HTML的<body>中添加以下脚本:
<script>
  // 标记Pyodide初始化完成
  window.pyodideReady = new Promise(resolve => {
    document.addEventListener('pyodide:ready', () => resolve());
  });

  // 加载本地数据文件
  fetch('./data.csv')
    .then(res => res.text())
    .then(data => {
      window.pyodideReady.then(() => {
        // 将数据传入Pyodide全局变量
        pyodide.globals.set('csv_raw_data', data);
      });
    });
</script>
  1. 在Python代码中读取全局变量并处理:
import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO(csv_raw_data))

关键注意事项

  • 确保data.csv与生成的.html、.js文件处于同一目录,且通过HTTP服务器(如python -m http.server)访问,不要直接用file://协议打开(浏览器跨域限制会导致文件加载失败)。
  • 打包分享时,需将所有相关文件(HTML、JS、数据文件)放入压缩包,接收方解压后启动本地HTTP服务器即可查看。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:23:03