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

使用micropip向Pyodide安装.whl包时提示'非zip文件'错误求助

在Pyodide中使用micropip安装自定义.whl包时触发「不是zip文件」错误

问题描述

我尝试在HTML文件中借助micropip将自定义.whl包导入Pyodide使用,却收到「File is not a zip file」错误提示。根据micropip官方文档,micropip.install()应该支持.whl文件,我已经用python3 -m build命令生成了.whl文件并上传至GitHub。

报错详情

pyodide.asm.js:14 Uncaught (in promise) 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 234, in __step
    result = coro.throw(exc)
  File "/lib/python3.10/site-packages/micropip/_micropip.py", line 183, in install
    transaction = await self.gather_requirements(requirements, ctx, keep_going)
  File "/lib/python3.10/site-packages/micropip/_micropip.py", line 173, in gather_requirements
    await gather(*requirement_promises)
  File "/lib/python3.10/asyncio/futures.py", line 284, in __await__
    yield self  # This tells Task to wait for completion.
  File "/lib/python3.10/asyncio/tasks.py", line 304, in __wakeup
    future.result()
  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/micropip/_micropip.py", line 245, in add_requirement
    await self.add_wheel(name, wheel, version, (), ctx, transaction)
  File "/lib/python3.10/site-packages/micropip/_micropip.py", line 313, in add_wheel
    with ZipFile(io.BytesIO(wheel_bytes)) as zip_file:
  File "/lib/python3.10/zipfile.py", line 1258, in __init__
    self._RealGetContents()
  File "/lib/python3.10/zipfile.py", line 1325, in _RealGetContents
    raise BadZipFile("File is not a zip file")
zipfile.BadZipFile: File is not a zip file

代码示例

<!DOCTYPE html>
<p>My first Pyodide app</p>

<script type="text/javascript">
  async function main() {
    let pyodide = await loadPyodide();
    await pyodide.loadPackage("micropip");
    const micropip = pyodide.pyimport("micropip");
    await micropip.install("url of .whl file");
    await pyodide.runPython(`
      import <package-name>
    `);
  }
  main();
</script>

解决办法

  • 修正GitHub下载链接:不要使用GitHub仓库的文件浏览链接,这类链接返回的是HTML页面而非实际的.whl文件。改用GitHub文件的Raw链接,或者将.whl包上传到GitHub Releases获取直接下载地址。
  • 验证whl包完整性:本地执行unzip -t <your-package>.whl检查包是否为有效zip文件。如果验证失败,重新运行python3 -m build生成包,确保过程无报错。
  • 检查Pyodide兼容性:确保你的包是纯Python包,或者已经针对Pyodide的emscripten架构编译成兼容的wasm格式whl包。包含C扩展的普通whl包无法在Pyodide中运行。
  • 确认CORS配置:如果whl包托管在第三方服务器,需确保服务器配置了CORS,允许你的HTML页面所在域名访问该资源,避免下载内容被拦截或不完整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:35:01