mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-28 23:53:45 +00:00
uv-resolver: add initial version of universal lock file format (#3314)
This is meant to be a base on which to build. There are some parts which are implicitly incomplete and others which are explicitly incomplete. The latter are indicated by TODO comments. Here is a non-exhaustive list of incomplete things. In many cases, these are incomplete simply because the data isn't present in a `ResolutionGraph`. Future work will need to refactor our resolver so that this data is correctly passed down. * Not all wheels are included. Only the "selected" wheel for the current distribution is included. * Marker expressions are always absent. * We don't emit hashes for certainly kinds of distributions (direct URLs, git, and path). * We don't capture git information from a dependency specification. Right now, we just always emit "default branch." There are perhaps also other changes we might want to make to the format of a more cosmetic nature. Right now, all arrays are encoded using whatever the `toml` crate decides to do. But we might want to exert more control over this. For example, by using inline tables or squashing more things into strings (like I did for `Source` and `Hash`). I think the main trade-off here is that table arrays are somewhat difficult to read (especially without indentation), where as squashing things down into a more condensed format potentially makes future compatible additions harder. I also went pretty light on the documentation here than what I would normally do. That's primarily because I think this code is going to go through some evolution and I didn't want to spend too much time documenting something that is likely to change. Finally, here's an example of the lock file format in TOML for the `anyio` dependency. I generated it with the following command: ``` cargo run -p uv -- pip compile -p3.10 ~/astral/tmp/reqs/anyio.in --unstable-uv-lock-file ``` And that writes out a `uv.lock` file: ```toml version = 1 [[distribution]] name = "anyio" version = "4.3.0" source = "registry+https://pypi.org/simple" [[distribution.wheel]] url = "2f20c40b45/anyio-4.3.0-py3-none-any.whl
" hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8" [[distribution.dependencies]] name = "exceptiongroup" version = "1.2.1" source = "registry+https://pypi.org/simple" [[distribution.dependencies]] name = "idna" version = "3.7" source = "registry+https://pypi.org/simple" [[distribution.dependencies]] name = "sniffio" version = "1.3.1" source = "registry+https://pypi.org/simple" [[distribution.dependencies]] name = "typing-extensions" version = "4.11.0" source = "registry+https://pypi.org/simple" [[distribution]] name = "exceptiongroup" version = "1.2.1" source = "registry+https://pypi.org/simple" [[distribution.wheel]] url = "79fe92dd41/exceptiongroup-1.2.1-py3-none-any.whl
" hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad" [[distribution]] name = "idna" version = "3.7" source = "registry+https://pypi.org/simple" [[distribution.wheel]] url = "741d8c8280/idna-3.7-py3-none-any.whl
" hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" [[distribution]] name = "sniffio" version = "1.3.1" source = "registry+https://pypi.org/simple" [[distribution.wheel]] url = "75a9c94214/sniffio-1.3.1-py3-none-any.whl
" hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2" [[distribution]] name = "typing-extensions" version = "4.11.0" source = "registry+https://pypi.org/simple" [[distribution.wheel]] url = "936e209267/typing_extensions-4.11.0-py3-none-any.whl
" hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a" ```
This commit is contained in:
parent
a3b61a2644
commit
d2e7c0554b
10 changed files with 890 additions and 0 deletions
|
@ -3,6 +3,7 @@ pub use error::ResolveError;
|
|||
pub use exclude_newer::ExcludeNewer;
|
||||
pub use exclusions::Exclusions;
|
||||
pub use flat_index::FlatIndex;
|
||||
pub use lock::{Lock, LockError};
|
||||
pub use manifest::Manifest;
|
||||
pub use options::{Options, OptionsBuilder};
|
||||
pub use preferences::{Preference, PreferenceError};
|
||||
|
@ -28,6 +29,7 @@ mod error;
|
|||
mod exclude_newer;
|
||||
mod exclusions;
|
||||
mod flat_index;
|
||||
mod lock;
|
||||
mod manifest;
|
||||
mod options;
|
||||
mod pins;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue