Commit Graph

4126 Commits

Author SHA1 Message Date
Charlie Marsh
6745a8b00a Show non-project dependencies in uv tree (#10149)
## Summary

Closes #10147.
2024-12-24 23:34:58 +00:00
Charlie Marsh
e09b1080f4 Store dependency groups separate from dependencies in lockfile (#10148)
## Summary

This is necessary for some future improvements to non-`[project]`
workspaces and PEP 723 scripts. It's not "breaking", but it will
invalidate lockfiles for non-`[project]` workspaces. I think that's
okay, since we consider those legacy right now, and they're really rare.
2024-12-24 17:32:29 -05:00
Charlie Marsh
3435777e87 Support uv export for non-project workspaces (#10144) 2024-12-24 15:23:28 +00:00
Charlie Marsh
473e274275 Rename requires-python validation method (#10133)
## Summary

I want to differentiate this from `validate_script_requires_python`.
2024-12-24 00:45:21 +00:00
Charlie Marsh
9279a125e9 Add a common abstraction to discover PEP 723 script interpreters (#10132)
## Summary

This logic is already repeated twice, and I'm on the verge of adding a
third.

(No behavioral changes.)
2024-12-24 00:29:37 +00:00
Charlie Marsh
6ed7302432 Move implementations next to definitions (#10131) 2024-12-23 19:16:48 -05:00
Mathieu Kniewallner
b24fb774b1 docs: fix invalid syntax in some sources examples (#10127)
## Summary

TOML 1.0 doesn't support multi-line for inline tables, so those examples
are invalid.
2024-12-23 16:12:45 -05:00
Charlie Marsh
755ca8efb5 Respect sources credentials in non-project workspaces (#10125)
## Summary

We weren't looking at credentials in the workspace root, for workspaces
in which the root _isn't_ a project.
2024-12-23 14:25:37 -05:00
Charlie Marsh
561103bf68 Remove redundant alias in uv init CLI (#10124) 2024-12-23 19:05:19 +00:00
Charlie Marsh
340e30d91e Include extras in uv-build Requires-Dist metadata (#10110)
## Summary

Closes https://github.com/astral-sh/uv/issues/10091.
2024-12-23 08:56:53 -05:00
renovate[bot]
c329623770 Update Rust crate thiserror to v2.0.9 (#10112) 2024-12-23 08:48:06 -05:00
renovate[bot]
4008e313bf Update Rust crate which to v7.0.1 (#10113) 2024-12-23 08:47:36 -05:00
renovate[bot]
9e33658ba9 Update Rust crate anyhow to v1.0.95 (#10102) 2024-12-23 00:49:18 +00:00
Charlie Marsh
d9008595d7 Rename 'Expected' and 'Actual' in lockfile logging (#10101)
## Summary

I can never remember which is which.
2024-12-22 20:42:42 +00:00
Charlie Marsh
0e836bcbbc Include both installed and request in satisfied logging (#10100) 2024-12-22 20:41:28 +00:00
Charlie Marsh
38a38fa8e2 Avoid erroring when subdirectories are provided in uv add (#10095)
## Summary

Closes https://github.com/astral-sh/uv/issues/10094.
2024-12-22 15:23:27 +00:00
Charlie Marsh
33cb3497aa Strip fragment when storing direct URL (#10093)
## Summary

Closes
https://github.com/astral-sh/uv/issues/10088#issuecomment-2558280467.
2024-12-22 09:07:04 -05:00
Charlie Marsh
ad92aaf186 Update PyTorch test to latest numpy (#10087) 2024-12-21 18:43:09 -05:00
Charlie Marsh
6e8114ae53 Update PyTorch test to latest jinja2 (#10084)
## Summary

This index doesn't include `exclude_newer`, unfortunately, so this
happens from time to time.
2024-12-21 21:01:10 +00:00
Charlie Marsh
8ff1dfd9b5 Add test cases for hash enforcement from existing uv.lock (#10081) 2024-12-21 09:53:38 -05:00
Charlie Marsh
705b3da913 Preserve sort when deciding on requirement placement (#10078)
## Summary

We had the right logic for determining whether the list is already
sorted, but we forgot to apply the same logic when deciding where to
insert the requirement, which made the list _unsorted_ for future
operations.

Closes https://github.com/astral-sh/uv/issues/10076.
2024-12-21 09:43:43 -05:00
Charlie Marsh
19a6b5fe4b Include hashes for local source archives (#10080)
## Summary

Closes https://github.com/astral-sh/uv/issues/10077
2024-12-21 09:31:28 -05:00
Charlie Marsh
3da4fdeeb3 Use portable path in requirements wire (#10071) 2024-12-20 23:10:24 -05:00
Charlie Marsh
9128fe1866 Use portable path instead of string for subdirectory (#10069)
## Summary

A few places where there are extra conversions to and from string that
seem unnecessary; a few places where we're using `PathBuf` instead of
`PortablePathBuf`.
2024-12-21 00:28:36 +00:00
Charlie Marsh
ddc290feb4 Add support for subdirectories in direct URLs in uv.lock (#10068)
## Summary

There were some subtle bugs here and no test coverage.
2024-12-20 19:00:50 -05:00
Charlie Marsh
2c68dfd4a9 Backtrack to non-local versions when wheels are missing platform support (#10046)
## Summary

This is yet another variation on
https://github.com/astral-sh/uv/pull/9928, with a few minor changes:

1. It only applies to local versions (e.g., `2.5.1+cpu`).
2. It only _considers_ the non-local version as an alternative (e.g.,
`2.5.1`).
3. It only _considers_ the non-local alternative if it _does_ support
the unsupported platform.
4. Instead of failing, it falls back to using the local version.

So, this is far less strict, and is effectively designed to solve
PyTorch but nothing else. It's also not user-configurable, except by way
of using `environments` to exclude platforms.
2024-12-20 19:11:27 +00:00
Charlie Marsh
f3c5b63095 Avoid duplicating backslashes in sysconfig parser (#10063)
## Summary

We had a bug in our handling of escape sequences that caused us to
duplicate backslashes. If you installed repeatedly, we'd keep doubling
them, leading to an exponential blowup.

Closes #10060.
2024-12-20 13:52:42 -05:00
konsti
cf14a62de7 Remove uv-pep440 cdylib (#10058) 2024-12-20 15:38:13 +00:00
konsti
ae659c8bfe Stable order for virtual packages (#10024)
uv gives priorities to packages by package name, not by virtual package
(`PubGrubPackage`). pubgrub otoh when prioritizing order the virtual
packages. When the order of virtual packages changes, uv changes its
resolutions and error messages. This means uv was depending on
implementation details of pubgrub's prioritization caching.

This broke with https://github.com/pubgrub-rs/pubgrub/pull/299, which
added a tiebreaker term that made pubgrub's sorting deterministic given
a deterministic ordering of allocating the packages (which happens the
first time pubgrub sees a package).

The new custom tiebreaker decreases the difference to upstream pubgrub.
2024-12-20 09:28:46 +00:00
Zanie Blue
c4d0caaee5 Bump version to 0.5.11 (#10044) 2024-12-19 18:01:45 -06:00
github-actions[bot]
7cfa1fd204 Sync latest Python releases (#10045)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2024-12-19 17:58:25 -06:00
Charlie Marsh
4513ce0e2a Allow --script to be provided with uv run - (#10035)
## Summary

Closes #10021.
2024-12-19 17:52:57 +00:00
Charlie Marsh
5a3826d9ff Remove references to deprecated first-match (#10036)
## Summary

This is a backwards-compatible alias for `first-index`.

Closes https://github.com/astral-sh/uv/issues/10031.
2024-12-19 12:40:14 -05:00
Charlie Marsh
5c6e584987 Allow uv run arguments when reading from stdin (#10034)
## Summary

Closes https://github.com/astral-sh/uv/issues/10033.
2024-12-19 12:39:56 -05:00
konsti
557e750199 Build backend: Preserve executable bit (#10027)
Fixes #9968
2024-12-19 17:54:44 +01:00
konsti
ac348eecdf Batch prefetch per fork (#10029)
Previously, the batch prefetcher was part of the solver loop, used
across forks. This would lead to each preference in a fork being counted
as a tried version, so that after 5 forks with the identical version, we
would start batch prefetching. The reported numbers of tried versions
are also reported. By tracking the batch prefetcher on the fork the
numbers are corrected.

An alternative would be tracking the actually tried versions, but that
would mean more overhead in the top level solver loop when the current
heuristic works.

In `ecosystem/transformers`:

```
$ hyperfine --runs 10 --prepare "rm -f uv.lock" "../../target/release/uv lock --exclude-newer 2024-08-08T00:00:00Z" "uv lock --exclude-newer 2024-08-08T00:00:00Z"
Benchmark 1: ../../target/release/uv lock --exclude-newer 2024-08-08T00:00:00Z
  Time (mean ± σ):     386.2 ms ±   6.1 ms    [User: 396.0 ms, System: 144.5 ms]
  Range (min … max):   378.5 ms … 397.9 ms    10 runs

Benchmark 2: uv lock --exclude-newer 2024-08-08T00:00:00Z
  Time (mean ± σ):     422.0 ms ±   5.5 ms    [User: 459.6 ms, System: 190.3 ms]
  Range (min … max):   415.0 ms … 430.5 ms    10 runs

Summary
  ../../target/release/uv lock --exclude-newer 2024-08-08T00:00:00Z ran
    1.09 ± 0.02 times faster than uv lock --exclude-newer 2024-08-08T00:00:00Z
```
2024-12-19 15:47:01 +01:00
Jp
dd442450b0 Retry mechanisms on Windows for copy_atomic and write_atomic (#10026)
Hello! 🙂 


## Summary

After submitting retry mechanisms on scripts installation for windows:
#9543 , I noticed that some other functions were using the same
`persist` features of temporary files. This could lead to the same issue
spotted before (temporary lock by AV/EDR software). I validated that it
was possible.

So I updated them to go through the same function on Windows, which is
using the retry mechanisms if needed.
In order to do so, I add to add an async version of the
`persist_with_retry`.

There is a little trick to make the borrow-checker happy line 306,
curious of your opinion on it? This is just a pointer move so it should
not induce some performance regression if I'm not mistaking.

I also updated them to use `fs_err` on Unix for better error messages.

Also, one of the error messages I introduced was badly formatted, I
fixed it. 🙂

## Test Plan

The changes should be iso functional and covered with the existing
test-suite.
2024-12-19 08:43:57 -05:00
samypr100
e65a273f1b Sync env vars with uv-static crate 🧹 (#10016)
## Summary

Updates some env vars references to use `EnvVars` accordingly.
2024-12-18 22:10:27 -05:00
Zanie Blue
1d8dac17fd Fix uv python install --default note about multiple requests (#10011) 2024-12-18 22:12:54 +00:00
Charlie Marsh
4d3c1b325e Prefer higher Python lower-bounds when forking (#10007)
## Summary

With the advent of `--fork-strategy requires-python` (the default), we
actually _want_ to solve higher lower-bound forks before lower
lower-bound forks. The former ensures we get the most compatible
versions, while the latter ensures we get fewer overall versions. These
two strategies match up with `--fork-strategy`, but need to be respected
as such.

Closes https://github.com/astral-sh/uv/issues/9998.
2024-12-18 16:54:56 -05:00
konsti
8f88f98350 Update packse to 0.3.42 for backtracking test (#10009)
Add the missing test for #9843.
2024-12-18 19:53:34 +00:00
konsti
cb325e2e2f metadata_directory already contains dist-info directory (#10005)
From PEP 517:

```python
def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
    ...
```

> Must create a .dist-info directory containing wheel metadata inside
the specified metadata_directory (i.e., creates a directory like
{metadata_directory}/{package}-{version}.dist-info/).

```python
def build_wheel(wheel_directory, config_settings=None, metadata_directory=None):
    ...
```

> If the build frontend has previously called
prepare_metadata_for_build_wheel and depends on the wheel resulting from
this call to have metadata matching this earlier call, then it should
provide the path to the created .dist-info directory as the
metadata_directory argument.

Notice that the `metadata_directory` is different for the both hooks:
For `prepare_metadata_for_build_wheel` is doesn't contain the
`.dist-info` directory as final segment, for `build_wheel` it does.

Previously, the code assumed that both directories didn't contain the
`.dist-info` for both cases.

Checked with:

```
maturin build
uv init test-uv-build-backend --build-backend uv
cd test-uv-build-backend
uv build --sdist --preview
cd ..
UV_PREVIEW=1 pip install test-uv-build-backend/dist/test_uv_build_backend-0.1.0.tar.gz --no-index --find-links target/wheels/ -v --no-cache-dir
```

Fixes #9969
2024-12-18 20:14:08 +01:00
Michał Górny
9305badcaf Fix show_settings tests not to be affected by system configs (#9992)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Override XDG_CONFIG_DIRS in show_settings tests, in order to ensure that
they don't pick system configuration, and therefore fail due to value
mismatches. This specifically addresses test failures on Gentoo where a
default `/etc/xdg/uv/uv.toml` is installed, and users are free to modify
it.

Prior to #9914, we used to set `XDG_CONFIG_DIRS` locally before running
the test suite. However, since the test now wipes the environment, the
problem can no longer be resolved downstream.

## Test Plan

`cargo test` on a Gentoo system (with `/etc/xdg/uv/uv.toml` present).

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-12-18 11:02:15 -05:00
Charlie Marsh
dd760ee507 Normalize platform_system to sys_platform (#9949)
## Summary

A revival of an old idea (#9344) that I have slightly more confidence in
now. I abandoned this idea because (1) it couldn't capture that, e.g.,
`platform_system == 'Windows' and sys_platform == 'foo'` (or some other
unknown value) are disjoint, and (2) I thought that Android returned
`"android"` for one of `sys_platform` or `platform_system`, which
would've made this logic incorrect.

However, it looks like Android... doesn't do that? And the values here
are almost always in a small, known set. So in the end, the tradeoffs
here actually seem pretty good.

Vis-a-vis our current solution, this can (e.g.) _simplify out_
expressions like `sys_platform == 'win32' or platform_system ==
'Windows'`.
2024-12-18 10:29:34 -05:00
github-actions[bot]
eb6bf8b0ee Sync latest Python releases (#9986)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2024-12-18 09:19:02 -06:00
Ben Beasley
45b9aa8f41 Make the backoff crate dependency Windows-only (#10002)
<!--
Thank you for contributing to uv! To help us out with reviewing, please
consider the following:

- Does this pull request include a summary of the change? (See below.)
- Does this pull request include a descriptive title?
- Does this pull request include references to any relevant issues?
-->

## Summary

Since the `backoff` dependency is only *used* on Windows in practice,
this PR would ensure that it is only *compiled* on Windows, too. This is
helpful because it appears to be unmaintained upstream,
https://github.com/astral-sh/uv/issues/10001, and it would be nice to be
able to [drop it from
Fedora](https://bugzilla.redhat.com/show_bug.cgi?id=2329729).
<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan

<!-- How was it tested? -->
```
$ cargo run python install
$ cargo test
```
2024-12-18 10:04:54 -05:00
Charlie Marsh
294da52610 Add nuance to prefetch logging (#9984) 2024-12-17 22:52:45 +00:00
Zanie Blue
37b11ddb22 Bump version to 0.5.10 (#9983) 2024-12-17 14:53:19 -06:00
Zanie Blue
026a40d2a4 Improve styling of uv remove dependency hints (#9960)
Instead of using a warning, which is pretty aggressive feeling, use a
hint.
2024-12-17 14:23:29 -06:00
Zanie Blue
d70160a57b Update references to python-build-standalone to reflect the transferred project (#9977) 2024-12-17 20:19:58 +00:00