Commit Graph

7187 Commits

Author SHA1 Message Date
konsti d27e41a43a
Fix relative paths in bytecode compilation (#11177)
Bytecode compilation would panic with a relative path such as `--target
target`.
2025-02-03 11:20:31 +01:00
renovate[bot] 4a88cdd6ee
Update Rust crate syn to v2.0.98 (#11172) 2025-02-02 20:47:35 -05:00
renovate[bot] d3dd91c78c
Update Rust crate jiff to v0.1.29 (#11171) 2025-02-02 20:33:43 -05:00
renovate[bot] 1ce158ca1d
Update pre-commit dependencies (#11173) 2025-02-03 01:28:26 +00:00
renovate[bot] 6f1578fa59
Update Rust crate async-trait to v0.1.86 (#11170) 2025-02-03 01:16:19 +00:00
konsti 1cfe5be355
uv-install-wheel: Split installation logic and link logic (#11166)
uv-install-wheel had the logic for laying out the installation and for
linking a directory in the same module. We split them up to isolate each
module's logic and tighten the crate's interface to only expose top
level members.

No logic changes, only moving code around.
2025-02-02 15:02:13 +00:00
Charlie Marsh cca1d34432
Optimize exclusion computation for markers (#11158)
## Summary

Oddly this showed up in a trace. I think the lack of memoization was
making it fairly expensive.
2025-02-02 08:21:31 -05:00
Charlie Marsh 2dfeafbaa4
Set `UV_PYTHON` in Jupyter kernels (#11155)
## Summary

It turns out activating the kernel does not change `VIRTUAL_ENV`, so we
still install into the environment the Jupyter environment, rather than
the project environment.

Unfortunately, after this change, we do still show a warning on `uv
add`:

```
warning: `VIRTUAL_ENV=/Users/crmarsh/.cache/uv/archive-v0/3bddKDdYXuX2w57Fu6itL` does not match the project environment path `.venv` and will be ignored
```

`uv pip install` works without warning.

Closes #11154.
2025-02-01 16:54:34 -05:00
renovate[bot] b0e9781da4
Update Rust crate miette to v7.5.0 (#9568) 2025-02-01 04:06:15 +00:00
Charlie Marsh 00ccc502c4
Don't expand self-referential extras in the build backend (#11142)
## Summary

See the linked issue for context.

Closes https://github.com/astral-sh/uv/issues/11137.
2025-01-31 20:58:51 -05:00
Zanie Blue 219c936d4e
Rotate GitHub test PATs (#11147)
As before, these are fine-grained PATs and will expire in 366 days.

They're generated by splitting the token into three parts (by `_`) and
base64 encoding.
2025-01-31 17:03:56 -06:00
Zanie Blue e6ead20aac
Refactor Python discovery iterators to use `filter_ok` and `map_ok` (#11145)
Because now I know those exist
2025-01-31 22:06:23 +00:00
Zanie Blue ba8504fe7a
Filter discovered Python executables by source before querying (#11143)
Closes https://github.com/astral-sh/uv/issues/11138

Though I think we could still have a better error message there.
2025-01-31 21:53:59 +00:00
Charlie Marsh 8adf4a8977
Migrate from `urlencoding` to `percent-encoding` (#11144)
## Summary

This lets us drop a dependency entirely. `percent-encoding` is used by
`url` and so is already in the graph, whereas `urlencoding` isn't used
by anything else.
2025-01-31 16:29:46 -05:00
Charlie Marsh 027db656aa
Run `cargo update` (#11146)
## Summary

Renovate only captures first-party dependencies, so it's good to run
this from time to time.
2025-01-31 16:07:36 -05:00
Zanie Blue ca5b840275
Add test case for `uv pip install` with incompatible virtual environment Python version (#11139)
Test case for https://github.com/astral-sh/uv/issues/11138
2025-01-31 14:54:46 -06:00
Charlie Marsh 26f84e5699
Percent-decode URLs in canonical comparisons (#11088)
## Summary

This PR adds an additional normalization step to `CanonicalUrl` whereby
we now percent-decode the path, to ensure that (e.g.)
`torch-2.5.1%2Bcpu.cxx11.abi-cp39-cp39-linux_x86_64.whl` and
`torch-2.5.1+cpu.cxx11.abi-cp39-cp39-linux_x86_64.whl` are considered
equal. Further, when generating the "reinstall" report, we use the
canonical URL rather than the verbatim URL.

In making this change, I also learned that we don't apply any of the
normalization passes to `file://` URLs. I inadvertently removed it in
93d606aba2,
since setting the password or URL on ` file://` URL errors -- but now
suppress those errors anyway.

Closes https://github.com/astral-sh/uv/issues/11082.

## Test Plan

- Downloaded a [PyTorch
wheel](https://download.pytorch.org/whl/cpu-cxx11-abi/torch-2.5.1%2Bcpu.cxx11.abi-cp39-cp39-linux_x86_64.whl)
- `python3.9 -m pip install
torch-2.5.1+cpu.cxx11.abi-cp39-cp39-linux_x86_64.whl --platform
linux_x86_64 --target foo --no-deps`
- `cargo run pip install
torch-2.5.1+cpu.cxx11.abi-cp39-cp39-linux_x86_64.whl --python-platform
linux --python-version 3.9 --target foo --no-deps`
- Verified that the package had the `~` symbol for the reinstall.
2025-01-31 15:45:48 -05:00
Charlie Marsh 1fae8dbf17
Add Git SHA locking behavior to docs (#11125)
## Summary

Closes https://github.com/astral-sh/uv/issues/11090.
2025-01-31 12:11:04 -06:00
Martijn Pieters 47f80a62c4
Sign docker images using cosign (#8685)
cosign uses the GitHub action ID token to retrieve an ephemeral code
signing certificate from Fulcio, and store the signature in the Rekor
transparency log.

Once an image has been successfully signed, you should be able to verify
the signature with:

```sh
cosign verify ghcr.io/astral-sh/uv:latest --certificate-identity-regexp='.*' --certificate-oidc-issuer-regexp='.*'
```

Closes #8670
2025-01-31 09:00:23 -06:00
Charles Tapley Hoyt c6713f5751
Use explicit _GLibCVersion tuple in uv-python crate (#11122) 2025-01-31 11:52:38 +01:00
JackDyre 00eb9cc545
removed unneeded `.clone()` (#11127) 2025-01-31 11:12:18 +01:00
Zanie Blue 5ef3d51390
Bump version to 0.5.26 (#11119) 2025-01-30 15:37:00 -06:00
Charlie Marsh bf9fe1d36d
Error when `--script` is passing a non-PEP 723 script (#11118)
## Summary

We now show a custom error if (1) the file doesn't exist at all, or (2)
it's not a PEP 723 script.

In the future, `uv lock --script` should probably initialize the script,
but that requires a more extensive refactor. At present, we just
silently lock the project instead, which is pretty bad!

Closes https://github.com/astral-sh/uv/issues/10979.
2025-01-30 20:49:59 +00:00
Zanie Blue e0a19be825
Touch-ups to the Python install guide (#11116) 2025-01-30 13:56:53 -06:00
konsti 80d485d32a
Explain build frontend vs. build backend (#11094)
We regularly get questions why `uv build` is missing certain files or
using the wrong build tag, when that's done by the build backend and
part of the build backend's docs. I tried to clarify this difference and
to redirect users to look at the tool's docs instead of wondering why
uv's docs don't explain that.

---------

Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-01-30 19:48:47 +00:00
Charlie Marsh 7531bb8669
Upgrade PyTorch version in documentation (#11114)
## Summary

PyTorch 2.6.0 is now GA!
2025-01-30 14:05:13 -05:00
Charlie Marsh 658ca89fb1
Use `sys_platform` in lieu of `platform_system` in PyTorch docs (#11113)
## Summary

This is what we use in the lockfile. I believe it's preferable, and it's
also more concise.
2025-01-30 19:01:52 +00:00
Charlie Marsh 9f8cd92bd3
Use positive (rather than negative) markers in PyTorch examples (#11112)
## Summary

Maybe slightly controversial because it's more verbose, but we really
want to limit these indexes to Linux and Windows, rather than ignoring
them on Darwin. E.g., we'd also want to ignore them on other platforms.

Further down, I use markers that look like this in the more complete
examples, so this feels more consistent.
2025-01-30 14:00:35 -05:00
Zanie Blue 5c0fdfd7ce
Consistently write log messages with capitalized first word (#11111) 2025-01-30 18:56:46 +00:00
Charlie Marsh ee31e1f11b
Remove unnecessary UTF-8 conversion in hash parsing (#11110)
## Summary

I believe this is a no-op?
2025-01-30 13:55:46 -05:00
Zanie Blue d514743b1a
Improve retry trace message (#11108) 2025-01-30 12:53:33 -06:00
Charlie Marsh 70507b7898
Add PyTorch XPU instructions to the PyTorch guide (#11109)
## Summary

Closes https://github.com/astral-sh/uv/issues/11079.
2025-01-30 13:48:52 -05:00
Charlie Marsh a440735fac
Ignore non-hash fragments in HTML API responses (#11107)
## Summary

I'm not a fan of registries including fragments here that aren't hashes,
but the spec doesn't expressly forbid it. I think it's reasonable to
ignore them.

Specifically, the spec is here:
https://packaging.python.org/en/latest/specifications/simple-repository-api/.
It says that:

> The URL **SHOULD** include a hash in the form of a URL fragment with
the following syntax: `#<hashname>=<hashvalue>`, where `<hashname>`he
lowercase name of the hash function (such as sha256) and `<hashvalue>`
is the hex encoded digest.

But it doesn't mention other fragments.

Closes https://github.com/astral-sh/uv/issues/7257.
2025-01-30 12:35:11 -06:00
Zanie Blue 220821bc39
Add support for `uvx python` (#11076)
Supersedes https://github.com/astral-sh/uv/pull/7491
Closes https://github.com/astral-sh/uv/issues/7430

Thanks @mikeleppane for starting this implementation. I took a bit of a
different approach and it was easier to start over fresh, but I used
some of the test cases there.
2025-01-30 11:53:58 -06:00
Charlie Marsh d106ab1a9a
Make metadata deserialization failures non-fatal in the cache (#11105)
## Summary

If we fail to deserialize cached metadata in the cache, we should just
ignore it, rather than failing.

Ideally, this never happens. If it does, it means we missed a cache
version bump. But if it does happen, it should still be non-fatal.

Closes https://github.com/astral-sh/uv/issues/11043.

Closes https://github.com/astral-sh/uv/issues/11101.

## Test Plan

Prior to this PR, the following would fail:

- `uvx uv@0.5.25 venv --python 3.12 --cache-dir foo`
- `uvx uv@0.5.25 pip install ./scripts/packages/hatchling_dynamic
--no-deps --python 3.12 --cache-dir foo`
- `uvx uv@0.5.18 venv --python 3.12 --cache-dir foo`
- `uvx uv@0.5.18 pip install ./scripts/packages/hatchling_dynamic
--no-deps --python 3.12 --cache-dir foo`

We can't go back and fix 0.5.18, but this will prevent such regressions
in the future.
2025-01-30 12:48:35 -05:00
Zanie Blue 1dfa650ab4
Propagate credentials for `<index>/simple` to `<index>/...` endpoints (#11074)
Closes https://github.com/astral-sh/uv/issues/11017
Closes https://github.com/astral-sh/uv/issues/8565

Sort of an minimal implementation of
https://github.com/astral-sh/uv/issues/4583
2025-01-30 10:22:21 -06:00
Zanie Blue d281f49103
Avoid resolving symbolic links when querying Python interpreters (#11083)
Closes https://github.com/astral-sh/uv/issues/11048

This brings the `PythonEnvironment::from_root` behavior in-line with the
rest of uv Python discovery behavior (and in-line with pip). It's not
clear why we were canonicalizing the path in the first place here.
2025-01-30 10:10:33 -06:00
Zanie Blue 586bab32b9
Update `uv python install --reinstall` to reinstall all previous versions (#11072)
Since we're shipping substantive updates to Python versions frequently,
I want to lower the bar for reinstalling with the latest distributions.

There's a follow-up task that's documented in a test case at
https://github.com/astral-sh/uv/pull/11072/files#diff-f499c776e1d8cc5e55d7620786e32e8732b675abd98e246c0971130f5de9ed50R157-R158
2025-01-30 10:08:06 -06:00
konsti d517b1ca26
Use dependency groups in transformers ecosystem test (#11066)
When we originally created the transformers test case, dependency groups
did not yet exist, but now they are the more realistic case.
2025-01-29 20:22:03 -05:00
Charlie Marsh 329de04758
Use a mirror with upload timestamps for PyTorch (#11086)
## Summary

This PR migrates all of our PyTorch tests to use our own mirror, which
includes upload timestamps that we can use to enforce
`--excludes-newer`, making the tests far more stable over time. (Today,
if you checkout old versions of `uv`, many of the PyTorch tests will
fail, since the index contents drift over time.)

Some snapshots changed in this PR (see, e.g.,
`universal_nested_overlapping_local_requirement`). The underlying reason
is that I used the current timestamp when setting upload times in the
PyTorch mirror, but those tests read from both the PyTorch
`--find-links` index _and_ PyPI. I guess we don't omit `--find-links`
entries based on `--excludes-newer`? That might be a bug. But I had to
_increase_ the `--excludes-newer` to include the PyTorch mirror's
`--find-links`, which meant pulling in some newer packages from PyPI
too. This is fine: it's a one-time churn, and they'll be stable going
forward.
2025-01-29 20:02:30 -05:00
Charlie Marsh b871d2d102
Allow `--exclude-newer` to be set at the test context level (#11085)
## Summary

This is a lot simpler, since you don't need tor remember to set it on
every command.
2025-01-30 00:44:20 +00:00
Danilo Rezende eb8ffa4981
Update documentation for running in a container (#11052)
This PR rewords the instructions for using uv in a container. I'm a new
user and was somewhat confused by it, so I've rewritten it as I'd have
liked to have read it.

It makes it more clear what distroless means, to avoid confusion with
other projects that ship OS files with an image with its tag name clear
of qualifiers(`astral-sh/uv`, in this case). An example of that is
caddy, which ships with alpine.

This also modifies the original example to use a distroful image instead
of distroless one while #8635 doesn't get resolved.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-01-30 00:17:58 +00:00
Andrew Gallant 35ded6d7e1 uv-resolver: fix conflicting extra bug during `uv sync`
In #10875, I relaxed the error checking during resolution to permit
dependencies like `foo[x1]`, where `x1` was defined to be conflicting.
In exchange, the error was, roughly speaking, moved to installation
time. This was achieved by looking at the full set of enabled extras
and checking whether any conflicts occurred. If so, an error was
reported. This ends up being more expressive and permits more valid
configurations.

However, in so doing, there was a bug in how the accumulated extras
were being passed to conflict marker evaluation. Namely, we weren't
accounting for the fact that if `foo[x1]` was enabled, then that fact
should be carried through to all conflict marker evaluations. This is
because some of those will use things like `extra != 'x1'` to indicate
that it should only be included if an extra *isn't* enabled.

In #10985, this manifested with PyTorch where `torch==2.4.1` and
`torch==2.4.1+cpu` were being installed simultaneously. Namely, the
choice to install `torch==2.4.1` was not taking into account that
the `cpu` extra has been enabled. If it did, then it's conflict
marker would evaluate to `false`. Since it didn't, and since
`torch==2.4.1+cpu` was also being included, we ended up installing both
versions.

The approach I took in this PR was to add a second breadth first
traversal (which comes first) over the dependency tree to accumulate all
of the activated extras. Then, only in the second traversal do we
actually build up the resolution graph.

Unfortunately, I have no automatic regression test to include here. The
regression test we _ought_ to include involves `torch`. And while we are
generally find to use those in tests that only generate a lock file, the
regression test here actually requires running installation. And
downloading and installing `torch` in tests is bad juju. So adding a
regression test for this is blocked on better infrastructure for PyTorch
tests. With that said, I did manually verify that the test case in #10985
no longer installs multiple versions of `torch`.

Fixes #10985
2025-01-29 17:21:10 -05:00
Sede Soukossi d5461d8d34
Do not suggest --package when --backend is used, but --build-backend (#10958)
## Summary

Closes #8743

## Test Plan

Snapshot tests
2025-01-29 16:15:05 -06:00
Zanie Blue ae76a4b7f5
Add test case for multiple indexes on the same realm (#11080)
A test case for https://github.com/astral-sh/uv/pull/11074 (and related
issues)
2025-01-29 14:45:03 -06:00
Zanie Blue a3049ecf69
Fix broken link (#11081) 2025-01-29 19:41:18 +00:00
Zanie Blue 2ca51501ed
Shorten "Using existing Python versions" nav item so it fits on one line (#11077) 2025-01-29 19:04:11 +00:00
Florian Greinacher 9fc24b2ac5
docs: suggest copy linking for GitLab integration guide (#11067)
## Summary

Hardlinking does not work in that context and raises a warning.

Setting the link mode to copy makes the warning go away.

## Test Plan

Tested on gitlab.com and our self-hosted GitLab instance.

Before changing the link mode:

https://gitlab.com/fgreinacher/uv-test/-/jobs/8986967570

After changing the link mode:

https://gitlab.com/fgreinacher/uv-test/-/jobs/8987026307.

⚒️ with ❤️ by
[Siemens](https://opensource.siemens.com/)

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-01-29 17:58:14 +00:00
Zanie Blue d866c58ea2
Refactor `uv tool run` hint into separate function (#11069) 2025-01-29 11:55:54 -06:00
titipoco 3af3af5039
Fix typo in no-deps docs/comments/cli description (#11073)
## Summary
Fixes a recurring typo.

## Details
There's a typo appearing in a particular sentence...

> Ignore package dependencies, instead only add those packages
explicitly listed on the command line to the resulting **the**
requirements file.

... used in:
* `crates/uv-cli/src/lib.rs`
* `crates/uv-settings-src-settings.rs`
* `docs/reference/settings.md`
* `uv.schem.json`

Docs, comments and a CLI command description seem affected.

This PR fixes it.

---------

Co-authored-by: bujnok01 <bujnok01@heiway.net>
2025-01-29 11:55:40 -06:00