v0.27.x releases contain incompatible versions fo pydantic and typing-extensions
- Dominant language
- Python
- Stars
- 14.8k
- Forks
- 1k
- Avg merge
- 20h 29m
- Merged PRs (30d)
- 19
Description
## 🐛 Bug
Pyodide releases contain incompatible versions fo `pydantic` and `typing-extensions`
### To Reproduce
e.g. v0.27.7 https://cdn.jsdelivr.net/pyodide/v0.27.7/full/pyodide-lock.json contains typing-extensions==4.11.0 pydantic==2.10.5
```bash
uv pip install typing-extensions==4.11.0 pydantic==2.10.5
```
reveals
```
× No solution found when resolving dependencies:
╰─▶ Because pydantic==2.10.5 depends on typing-extensions>=4.12.2 and you require typing-extensions==4.11.0, we can conclude that your requirements
and pydantic==2.10.5 are incompatible.
And because you require pydantic==2.10.5, we can conclude that your requirements are unsatisfiable.
```
A workaround in a pure pyodide setup is to install the correct version manually
```js
await micropip.install("typing-extensions>=4.14.0")
```
see https://github.com/OO-LD/playground-python-yaml/commit/370b55cc9dba119f2191ad2d2172e590dbfd1288
However, this does not work on the python side in a jupyter-lite pyodide kernel, where
```py
await piplite.install(['typing-extensions>=4.14.0'])
```
throws
```
ValueError: Requested 'typing-extensions>=4.14.0', but typing-extensions==4.11.0 is already installed
```
Full trace
```
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[1], line 14
3 import micropip
(...)
---> 14 await micropip.install(["typing-extensions>=4.14.0"]) # Typing extensions needs to be installed first otherwise the versions from the pyodide lockfile is used which is incompatible with the latest fastapi.
17 from typing import Optional, List
File /lib/python3.12/site-packages/micropip/package_manager.py:146, in PackageManager.install(self, requirements, keep_going, deps, credentials, pre, index_urls, constraints, verbose)
143 if constraints is None:
144 constraints = self.constraints
--> 146 return await install(
147 requirements,
148 index_urls,
149 keep_going,
150 deps,
151 credentials,
152 pre,
153 constraints=constraints,
154 verbose=verbose,
155 )
File /lib/python3.12/site-packages/micropip/install.py:52, in install(requirements, index_urls, keep_going, deps, credentials, pre, constraints, verbose)
39 wheel_base = Path(getsitepackages()[0])
41 transaction = Transaction(
42 ctx=ctx, # type: ignore[arg-type]
43 ctx_extras=[],
(...)
50 constraints=constraints,
51 )
---> 52 await transaction.gather_requirements(requirements)
54 if transaction.failed:
55 failed_requirements = ", ".join([f"'{req}'" for req in transaction.failed])
File /lib/python3.12/site-packages/micropip/transaction.py:71, in Transaction.gather_requirements(self, requirements)
63 async def gather_requirements(
64 self,
65 requirements: list[str] | list[Requirement],
66 ) -> None:
67 requirement_promises = [
68 self.add_requirement(requirement) for requirement in requirements
69 ]
---> 71 await asyncio.gather(*requirement_promises)
File /lib/python3.12/site-packages/micropip/transaction.py:84, in Transaction.add_requirement(self, req)
82 if as_req:
83 if as_req.name and len(as_req.specifier):
---> 84 return await self.add_requirement_inner(as_req)
85 if as_req.url:
86 req = as_req.url
File /lib/python3.12/site-packages/micropip/transaction.py:171, in Transaction.add_requirement_inner(self, req)
168 # Is some version of this package is already installed?
169 req.name = canonicalize_name(req.name)
--> 171 satisfied, ver = self.check_version_satisfied(req)
172 if satisfied:
173 logger.info("Requirement already satisfied: %s (%s)", req, ver)
File /lib/python3.12/site-packages/micropip/transaction.py:112, in Transaction.check_version_satisfied(self, req)
108 if req.specifier.contains(ver, prereleases=True):
109 # installed version matches, nothing to do
110 return True, ver
--> 112 raise ValueError(
113 f"Requested '{req}', " f"but {req.name}=={ver} is already installed"
114 )
ValueError: Requested 'typing-extensions>=4.14.0', but typing-extensions==4.11.0 is already installed
```
### Expected behavior
Pyodide releases
### Environment
- Pyodide Version: v0.27.6, v0.27.7
### Additional context
- Pyodide v.28.0 fixes this by bundling typing-extensions==4.14.1, but is still instable / not yet supported by jupyter-lite
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.