Why is Pyodide giving me a 'File is not a zip file' error when I try to install a .whl package using micropip?
I'm trying to import a .whl package using micropip into pyodide for use in an html file, but am getting an error about "must be a zip file"?
Based on the documentation of micropip here, I assume the micropip.install()
should be linked to a .whl file and not .zip. I used python3 -m build
to create the .whl file, and then uploaded it to github.
This is the error code:
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
My code looks something like this:
<!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>
source https://stackoverflow.com/questions/76335688/why-is-pyodide-giving-me-a-file-is-not-a-zip-file-error-when-i-try-to-install
Comments
Post a Comment