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

Pyodide中无法导入自定义Python包的问题求助

解决Pyodide导入自定义包失败的问题

出现ModuleNotFoundError: No module named 'package'的核心原因是:Pyodide运行在浏览器的虚拟文件系统中,本地的package目录不会自动映射到这个虚拟环境里,Python解释器找不到对应的模块文件。

解决步骤

需要手动将本地自定义包的文件写入Pyodide的虚拟文件系统,并确保模块所在目录被添加到Python的搜索路径中,以下是两种可行方案:

方案一:直接在JS中写入模块代码

修改index.html中的脚本部分,先创建虚拟目录并写入__init__.py的内容:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdn.jsdelivr.net/pyodide/v0.19.1/full/pyodide.js"></script>
  </head>
  <body>
    Pyodide test page <br />
    Open your browser console to see Pyodide output
    <script type="text/javascript">
      async function main() {
        let pyodide = await loadPyodide({
          indexURL: "https://cdn.jsdelivr.net/pyodide/v0.19.1/full/",
        });

        // 在虚拟文件系统中创建package目录
        pyodide.FS.mkdir("/package");
        // 写入__init__.py的内容(替换成你实际的代码)
        pyodide.FS.writeFile("/package/__init__.py", `
def main():
    print("Hello from custom package!")
`);

        // 将虚拟根目录添加到Python搜索路径
        pyodide.runPython(`
import sys
sys.path.insert(0, '/')
`);

        let mypkg = pyodide.pyimport("package");
        mypkg.main();
      }
      main();
    </script>
  </body>
</html>

方案二:加载本地的模块文件

如果你的__init__.py已有现成代码,可以通过fetch获取本地文件内容再写入虚拟文件系统:

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdn.jsdelivr.net/pyodide/v0.19.1/full/pyodide.js"></script>
  </head>
  <body>
    Pyodide test page <br />
    Open your browser console to see Pyodide output
    <script type="text/javascript">
      async function main() {
        let pyodide = await loadPyodide({
          indexURL: "https://cdn.jsdelivr.net/pyodide/v0.19.1/full/",
        });

        // 创建虚拟package目录
        pyodide.FS.mkdir("/package");
        // 读取本地的__init__.py文件
        const response = await fetch("./package/__init__.py");
        const content = await response.text();
        // 写入虚拟文件系统
        pyodide.FS.writeFile("/package/__init__.py", content);

        // 添加路径到Python搜索列表
        pyodide.runPython(`
import sys
sys.path.insert(0, '/')
`);

        let mypkg = pyodide.pyimport("package");
        mypkg.main();
      }
      main();
    </script>
  </body>
</html>

注意事项

  • 确保本地服务器运行:如果直接打开index.html(file://协议),fetch可能会因为跨域问题失败,建议用本地服务器(比如python -m http.server)运行页面。
  • 版本匹配:如果使用其他版本的Pyodide,API逻辑基本一致,但注意检查FS相关方法是否有变动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:31:12