Cannot piplite.install vtk: Can't find a pure Python 3 wheel for: 'vtk'
Reproduce
- Open https://jupyter.org/try-jupyter/lab/
- Open a new notebook
- Create and run the cell
import piplite
await piplite.install('vtk')
- verify the issue
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[2], line 2
1 import piplite
----> 2 await piplite.install('vtk')
File /lib/python3.10/asyncio/futures.py:284, in Future.__await__(self)
282 if not self.done():
283 self._asyncio_future_blocking = True
--> 284 yield self # This tells Task to wait for completion.
285 if not self.done():
286 raise RuntimeError("await wasn't used with future")
File /lib/python3.10/asyncio/tasks.py:304, in Task.__wakeup(self, future)
302 def __wakeup(self, future):
303 try:
--> 304 future.result()
305 except BaseException as exc:
306 # This may also be a cancellation.
307 self.__step(exc)
File /lib/python3.10/asyncio/futures.py:201, in Future.result(self)
199 self.__log_traceback = False
200 if self._exception is not None:
--> 201 raise self._exception
202 return self._result
File /lib/python3.10/asyncio/tasks.py:234, in Task.__step(***failed resolving arguments***)
232 result = coro.send(None)
233 else:
--> 234 result = coro.throw(exc)
235 except StopIteration as exc:
236 if self._must_cancel:
237 # Task is cancelled right before coro stops.
File /lib/python3.10/site-packages/piplite/piplite.py:102, in _install(requirements, keep_going, deps, credentials, pre)
100 """Invoke micripip.install with a patch to get data from local indexes"""
101 with patch("micropip._micropip._get_pypi_json", _get_pypi_json):
--> 102 return await _micropip.install(
103 requirements=requirements,
104 keep_going=keep_going,
105 deps=deps,
106 credentials=credentials,
107 pre=pre,
108 )
File /lib/python3.10/site-packages/micropip/_micropip.py:573, in install(requirements, keep_going, deps, credentials, pre)
563 wheel_base = Path(getsitepackages()[0])
565 transaction = Transaction(
566 ctx=ctx,
567 ctx_extras=[],
(...)
571 fetch_kwargs=fetch_kwargs,
572 )
--> 573 await transaction.gather_requirements(requirements)
575 if transaction.failed:
576 failed_requirements = ", ".join([f"'{req}'" for req in transaction.failed])
File /lib/python3.10/site-packages/micropip/_micropip.py:333, in Transaction.gather_requirements(self, requirements)
330 for requirement in requirements:
331 requirement_promises.append(self.add_requirement(requirement))
--> 333 await gather(*requirement_promises)
File /lib/python3.10/asyncio/futures.py:284, in Future.__await__(self)
282 if not self.done():
283 self._asyncio_future_blocking = True
--> 284 yield self # This tells Task to wait for completion.
285 if not self.done():
286 raise RuntimeError("await wasn't used with future")
File /lib/python3.10/asyncio/tasks.py:304, in Task.__wakeup(self, future)
302 def __wakeup(self, future):
303 try:
--> 304 future.result()
305 except BaseException as exc:
306 # This may also be a cancellation.
307 self.__step(exc)
File /lib/python3.10/asyncio/futures.py:201, in Future.result(self)
199 self.__log_traceback = False
200 if self._exception is not None:
--> 201 raise self._exception
202 return self._result
File /lib/python3.10/asyncio/tasks.py:232, in Task.__step(***failed resolving arguments***)
228 try:
229 if exc is None:
230 # We use the `send` method directly, because coroutines
231 # don't have `__iter__` and `__next__` methods.
--> 232 result = coro.send(None)
233 else:
234 result = coro.throw(exc)
File /lib/python3.10/site-packages/micropip/_micropip.py:340, in Transaction.add_requirement(self, req)
337 return await self.add_requirement_inner(req)
339 if not urlparse(req).path.endswith(".whl"):
--> 340 return await self.add_requirement_inner(Requirement(req))
342 # custom download location
343 wheel = WheelInfo.from_url(req)
File /lib/python3.10/site-packages/micropip/_micropip.py:435, in Transaction.add_requirement_inner(self, req)
432 metadata = await _get_pypi_json(req.name, self.fetch_kwargs)
434 try:
--> 435 wheel = find_wheel(metadata, req)
436 except ValueError:
437 self.failed.append(req)
File /lib/python3.10/site-packages/micropip/_micropip.py:303, in find_wheel(metadata, req)
300 if best_wheel is not None:
301 return wheel
--> 303 raise ValueError(
304 f"Can't find a pure Python 3 wheel for '{req}'.\n"
305 f"See: {FAQ_URLS['cant_find_wheel']}\n"
306 "You can use `micropip.install(..., keep_going=True)`"
307 "to get a list of all packages with missing wheels."
308 )
ValueError: Can't find a pure Python 3 wheel for 'vtk'.
See: https://pyodide.org/en/stable/usage/faq.html#micropip-can-t-find-a-pure-python-wheel
You can use `micropip.install(..., keep_going=True)`to get a list of all packages with missing wheels.
Context
I am working on improving the user experience of the Panel example notebooks in Panelite, Panels custom build of Jupyterlite. See Panel #4388
Some of the notebooks showcase the use of vtk
and pyvista
. But I cannot ´piplite.install` vtk.
Edited by Marc Skov Madsen