mirror of
https://github.com/astral-sh/uv.git
synced 2025-08-04 19:08:04 +00:00
Allow multiple source entries for each package in tool.uv.sources
(#7745)
## Summary This PR enables users to provide multiple source entries in `tool.uv.sources`, e.g.: ```toml [tool.uv.sources] httpx = [ { git = "https://github.com/encode/httpx", tag = "0.27.2", marker = "sys_platform == 'darwin'" }, { git = "https://github.com/encode/httpx", tag = "0.24.1", marker = "sys_platform == 'linux'" }, ] ``` The implementation is relatively straightforward: when we lower the requirement, we now return an iterator rather than a single requirement. In other words, the above is transformed into two requirements: ```txt httpx @ git+https://github.com/encode/httpx@0.27.2 ; sys_platform == 'darwin' httpx @ git+https://github.com/encode/httpx@0.24.1 ; sys_platform == 'linux' ``` We verify (at deserialization time) that the markers are non-overlapping. Closes https://github.com/astral-sh/uv/issues/3397.
This commit is contained in:
parent
71d5661bd8
commit
f67347e72c
17 changed files with 1063 additions and 206 deletions
|
@ -223,6 +223,46 @@ members = [
|
|||
]
|
||||
```
|
||||
|
||||
### Platform-specific sources
|
||||
|
||||
You can limit a source to a given platform or Python version by providing
|
||||
[PEP 508](https://peps.python.org/pep-0508/#environment-markers)-compatible environment markers for
|
||||
the source.
|
||||
|
||||
For example, to pull `httpx` from GitHub, but only on macOS, use the following:
|
||||
|
||||
```toml title="pyproject.toml"
|
||||
[project]
|
||||
dependencies = [
|
||||
"httpx",
|
||||
]
|
||||
|
||||
[tool.uv.sources]
|
||||
httpx = { git = "https://github.com/encode/httpx", tag = "0.27.2", marker = "sys_platform == 'darwin'" }
|
||||
```
|
||||
|
||||
By specifying the marker on the source, uv will still include `httpx` on all platforms, but will
|
||||
download the source from GitHub on macOS, and fall back to PyPI on all other platforms.
|
||||
|
||||
### Multiple sources
|
||||
|
||||
You can specify multiple sources for a single dependency by providing a list of sources,
|
||||
disambiguated by [PEP 508](https://peps.python.org/pep-0508/#environment-markers)-compatible
|
||||
environment markers. For example, to pull in different `httpx` commits on macOS vs. Linux:
|
||||
|
||||
```toml title="pyproject.toml"
|
||||
[project]
|
||||
dependencies = [
|
||||
"httpx",
|
||||
]
|
||||
|
||||
[tool.uv.sources]
|
||||
httpx = [
|
||||
{ git = "https://github.com/encode/httpx", tag = "0.27.2", marker = "sys_platform == 'darwin'" },
|
||||
{ git = "https://github.com/encode/httpx", tag = "0.24.1", marker = "sys_platform == 'linux'" },
|
||||
]
|
||||
```
|
||||
|
||||
## Optional dependencies
|
||||
|
||||
It is common for projects that are published as libraries to make some features optional to reduce
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue