Commit Graph

5974 Commits

Author SHA1 Message Date
Samuel Rigaud 2fc5fe2ac0
fix small typos (#16357)
## Summary

I tried to fix minor typos in the project

---------

Co-authored-by: Samuel Rigaud <rigaud@gmail.com>
Co-authored-by: konstin <konstin@mailbox.org>
2025-10-21 12:11:59 +00:00
Jordan Borean 17155c4cca
Fix backtick escaping for PowerShell (#16307)
## Summary
Fixes the logic for escaping a double quoted string in PowerShell by not
escaping a backslash but escaping the Unicode double quote variants that
PowerShell treats the same as the ASCII double quotes.

<img width="685" height="99" alt="image"
src="https://github.com/user-attachments/assets/ac1368c2-d915-4e49-b67f-ac71ee0f7d46"
/>

## Test Plan
There does not seem to be any tests for this. I'm fairly new to rust but
happy to add some if someone can point me in the right direction.

---------

Co-authored-by: Aria Desires <aria.desires@gmail.com>
2025-10-21 10:16:21 +00:00
Andrei Berenda 51e8da2d1c
Move parsing http retries to EnvironmentOptions (#16284)
## Summary
- Move  parsing `UV_HTTP_RETRIES` to `EnvironmentOptions`

Relates https://github.com/astral-sh/uv/issues/14720

## Test Plan

- Tests with existing tests
2025-10-21 11:14:37 +02:00
Charles-Meldhine Madi Mnemoi 29cec24d5c
fix: Add a hint on `uv pip install` failure if the `--system` flag is used to select an externally managed interpreter (#16318)
Hello,

# Summary
This PR makes the error message clearer when you try to install packages
into an externally managed Python environment with the `--system` flag.
Now, instead of just failing, the error explains that you're hitting
this because you explicitly used `--system`.

This closes #15639.

# Test plan

- I added a new integration test (`install_with_system_interpreter` in
`pip_install.rs`) that checks the error message includes the hint.
- I tried to run `uv pip install --system -r requirements.txt` to see
the actual error message in action, but had permission issues.
2025-10-21 07:46:39 +00:00
github-actions[bot] ed65c2482c
Sync latest Python releases (#16246)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-10-21 00:41:53 +00:00
eun2ce e0fe38eabb
Improve 403 Forbidden error message to indicate package may not exist (#16353)
Fixes #16340

## Summary

Some package registries (PyTorch, corporate PyPI mirrors) return `403
Forbidden` when a package is not found, instead of `404 Not Found`. The
previous error message incorrectly suggested this was always an
authentication issue, causing confusion for users.

This PR updates the error hint to clarify that a 403 error could
indicate either missing authentication credentials OR that the package
doesn't exist on the index.

## Test Plan

- Updated existing snapshot test in `crates/uv/tests/it/edit.rs` to
reflect the new error message
- The change is purely a message improvement with no behavioral changes

## Changes

### Before

hint: An index URL (https://example.com/simple) could not be queried due
to a lack of valid authentication credentials (403 Forbidden).

### After

hint: An index URL (https://example.com/simple) returned a 403 Forbidden
error. This could indicate missing authentication credentials, or the
package may not exist on this index.


## Files Changed

- `crates/uv-resolver/src/pubgrub/report.rs` - Updated error message
- `crates/uv/tests/it/edit.rs` - Updated snapshot test expectation

---------

Co-authored-by: eun2ce <eun2ce@eun2ceui-MacBookPro.local>
Co-authored-by: konstin <konstin@mailbox.org>
2025-10-20 11:43:18 +00:00
Parham MohammadAlizadeh ed3f99a119
Add required environment marker example to hint (#16244)
## Summary
fixes issue #15938 
- show platform wheel hint with a concrete
`tool.uv.required-environments` example so users know how to configure
compatibility
- add `WheelTagHint::suggest_environment_marker` to pick a sensible
environment marker based on the available wheel tags
- update the `sync_required_environment_hint` integration snapshot to
expect the new multi-line hint

## Test Plan

cargo test --package uv --test it --
sync::sync_required_environment_hint
2025-10-20 13:08:10 +02:00
Björn Dahlgren 57f56467d9
Fix typo in MissingTopLevel warning (#16351)
<!--
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

<!-- What's the purpose of the change? What does it do, and why? -->
The warning shown when `egg-info` lacks `top_level.txt` incorrectly
warns about missing `top-level.txt`

ee2649feaa/crates/uv-install-wheel/src/uninstall.rs (L179-L188)

ee2649feaa/crates/uv/src/commands/pip/operations.rs (L687-L693)

The non fatal warning with incorrect filename was introduced in
https://github.com/astral-sh/uv/pull/6881 which changed previous fatal
error https://github.com/astral-sh/uv/issues/6872 with correct
`top_level.txt` output.

## Test Plan

<!-- How was it tested? -->
Updated unit test to reflect change in warning
2025-10-19 11:32:50 +02:00
Zanie Blue ee2649feaa
Bump version to 0.9.4 (#16347) 2025-10-17 16:02:02 -05:00
Zanie Blue 7b3a9c2859
Avoid obfuscating pyx tokens in `uv auth token` output (#16345) 2025-10-17 19:19:05 +00:00
Yu, Guangye de9f299b80
Add auto-detection for Intel GPU on Windows (#16280)
This PR enables `--torch-backend=auto` to automatically detect Intel
GPUs. It follows up on
[#14386](https://github.com/astral-sh/uv/pull/14386).
On Windows, detection is implemented by querying the
`Win32_VideoController` class via the [WMI
crate](https://github.com/ohadravid/wmi-rs/tree/v0.16.0).

Currently, Intel GPUs (XPU) do not depend on specific driver or toolkit
versions to determine which PyTorch wheel to use.
2025-10-16 16:56:07 -04:00
Mark Dodgson c12e8bb343
Implement RFC9457 compliant messaging (#16199)
<!--
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

HTTP1.1 [RFC 9112 -
HTTP/1.1](https://www.rfc-editor.org/rfc/rfc9112.html#name-status-line)
section 4 defines the response status code to optionally include a text
description (human readable) of the reason for the status code.

[RFC9113 - HTTP/2](https://www.rfc-editor.org/rfc/rfc9113) is the HTTP2
protocol standard and the response status only considers the [status
code](https://www.rfc-editor.org/rfc/rfc9113#name-response-pseudo-header-fiel)
and not the reason phrase, and as such important information can be lost
in helping the client determine a route cause of a failure.

As per discussion on this
[PR](https://github.com/astral-sh/uv/pull/15979) the current feeling is
that implementing the RFC9457 standard might be the preferred route.
This PR makes those changes to aid the discussion which has also been
moved to the [PEP
board](https://discuss.python.org/t/block-download-of-components-when-violating-policy/104021/1)

## Test Plan

Pulling components that violate our policy over HTTP2 and without any
RFC9457 implementation the following message is presented to the user:
<img width="1482" height="104" alt="image"
src="https://github.com/user-attachments/assets/0afcd0d8-ca67-4f94-a6c2-131e3b6d8dcc"
/>


With the RFC9457 standard implemented, below you can see the advantage
in the extra context as to why the component has been blocked:
<img width="2171" height="127" alt="image"
src="https://github.com/user-attachments/assets/25bb5465-955d-4a76-9f30-5477fc2c866f"
/>

---------

Co-authored-by: konstin <konstin@mailbox.org>
2025-10-16 19:53:49 +00:00
Charlie Marsh bf81a5bf0c
Add CUDA 13.0 support (#16321)
## Summary

Closes https://github.com/astral-sh/uv/issues/16319.
2025-10-15 15:10:08 -04:00
konsti 766bd951cb
Use `uv_build` in `make_project` tests (#16298)
Skip downloading and running setuptools.
2025-10-15 20:45:32 +02:00
konsti 52cc3c8b94
Add missing `UV_TEST_NO_HTTP_RETRY_DELAY` check and better logging (#16313)
The `install_http_retries` test goes from 15s to 0.3s. Additionally, we
log the retry delay.
2025-10-15 20:45:21 +02:00
Zanie Blue 9db7d38cf7
Bump version to 0.9.3 (#16305) 2025-10-14 18:19:49 -05:00
Zanie Blue d1413a60d8
Add CPython 3.15.0a1 and 3.13.9 (#16304) 2025-10-14 18:05:44 -05:00
Mark Dodgson b151e0ea3d
Fix workspace with relative pathing (#16296)
<!--
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

Fixes #16285 

## Test Plan

<!-- How was it tested? -->
2025-10-14 19:15:19 +02:00
Geoffrey Thomas 8eada1685c
Fix comments on python_no_transparent_upgrade_with_venv_patch_specification (#16294)
I think this was originally intended to behave as the comments
specified, but the behavior changed in discussions in #13312 somewhere.
2025-10-14 07:32:47 -05:00
Zanie Blue 15829bb30a
Obfuscate Bearer Token values in logs (#16164)
Sometimes a credential's `Debug` formatted value appears in tracing logs
- make sure the credential doesn't appear there.

## Test plan

Added a test case + ran
```
uv pip install --default-index $PYX_API_URL/$SOME_INDEX $SOME_PACKAGE -vv
```
With an authenticated uv client and confirmed the tokens are obfuscated.

---------

Co-authored-by: Zsolt Dollenstein <zsol.zsol@gmail.com>
2025-10-13 08:28:20 -05:00
Andrei Berenda c7d3d549e2
Move parsing concurrency env variable to EnvironmentOptions (#16223)
## Summary
- Move parsing `UV_CONCURRENT_INSTALLS`, `UV_CONCURRENT_BUILDS` and
`UV_CONCURRENT_DOWNLOADS` to `EnvironmentOptions`

Relates https://github.com/astral-sh/uv/issues/14720

## Test Plan

- Tests with existing tests
- Add test with invalid parsing
2025-10-12 21:22:30 -04:00
William Woodruff 141369ce73
Bump version to 0.9.2 (#16238)
Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com>
2025-10-10 14:20:14 -04:00
github-actions[bot] d54a5bb5cb
Sync latest Python releases (#16229)
Add python-build-standalone 20251010 for CPython 3.12.12, 3.11.14, 3.10.19 and 3.9.24.

Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com>
2025-10-10 13:35:37 -04:00
Harshith VH b4168e665e
Add uv tool list --show-python (#15814)
<!--
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?
-->

Closes #15312 
Closes https://github.com/astral-sh/uv/issues/16237

---------

Co-authored-by: pythonweb2 <32141163+pythonweb2@users.noreply.github.com>
Co-authored-by: Wade Roberts <wade.roberts@centralsquare.com>
2025-10-10 12:33:26 -05:00
William Woodruff 6fb00a9936
publish: don't infer check URLs for pyx uploads (#16234) 2025-10-10 12:51:02 -04:00
samypr100 d5dd43aa18
Missing added_in on new env vars (#16217)
## Summary

Adds the version for environment variables added in
https://github.com/astral-sh/uv/pull/16040 and
https://github.com/astral-sh/uv/pull/16125. as these were in-flight
before documentation versioning was added.

Adds ability to emit a compiler error when added in is missing for
improved reporting to the developer.

e.g. example for the ones fixed in this PR

```shell
error: missing #[attr_added_in("x.y.z")] on `UV_UPLOAD_HTTP_TIMEOUT`
       note: env vars for an upcoming release should be annotated with `#[attr_added_in("next release")]`
   --> crates\uv-static\src\env_vars.rs:593:15
    |
593 |     pub const UV_UPLOAD_HTTP_TIMEOUT: &'static str = "UV_UPLOAD_HTTP_TIMEOUT";
    |               ^^^^^^^^^^^^^^^^^^^^^^

error: missing #[attr_added_in("x.y.z")] on `UV_WORKING_DIRECTORY`
       note: env vars for an upcoming release should be annotated with `#[attr_added_in("next release")]`
    --> crates\uv-static\src\env_vars.rs:1087:15
     |
1087 |     pub const UV_WORKING_DIRECTORY: &'static str = "UV_WORKING_DIRECTORY";
     |               ^^^^^^^^^^^^^^^^^^^^
error: could not compile `uv-static` (lib) due to 2 previous errors
```
2025-10-10 08:55:09 -05:00
Skyler Hawthorne ea5a09215b
fix recompiling every time in uv-python (#16214)
Cargo is currently recompiling uv-python on every invocation because the
minified JSON output file is getting a mod time newer than the last run.
Instead, set the mod time of the output file to the same as the input
file.
2025-10-09 16:10:08 -05:00
Zanie Blue 9887ef5bd7
Bump version to 0.9.1 (#16212)
Archives the 0.8.x changelog too.
2025-10-09 18:28:59 +00:00
Alyssa Coghlan 628eedea36
Fix pylock.toml config conflict error messages (#16211)
## Summary

When specifying constraints or overrides in combination with
`pylock.toml` as an input to `uv pip install`,
the error messages are not currently correct.

## Test Plan

No testing, it's a straightforward error string fix.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-10-09 17:38:18 +00:00
Andrei Berenda a58d031157
Add `UV_UPLOAD_HTTP_TIMEOUT` and respect `UV_HTTP_TIMEOUT` in uploads (#16040)
## Summary
- Move parsing `UV_HTTP_TIMEOUT`, `UV_REQUEST_TIMEOUT` and
`HTTP_TIMEOUT` to `EnvironmentOptions`
- Add new env varialbe `UV_UPLOAD_HTTP_TIMEOUT`

Relates https://github.com/astral-sh/uv/issues/14720

## Test Plan

Tests with existing tests
2025-10-09 12:28:30 -05:00
Zanie Blue 84d6a913ac Ignore pre-release Python versions when a patch version is requested (#16210)
I think this is ostensively breaking, though I think the impact would be
small given this will go out in 0.9.1 and should only affect people
using pre-release Python versions.

When `3.14.0` is requested (opposed to `3.14`), we treat this as a
request for a final / stable version and ignore pre-releases.

I think this is a fairly clean way to allow users to explicitly request
the stable version.

Closes https://github.com/astral-sh/uv/issues/16175
Follows #16208
2025-10-09 12:24:42 -05:00
Zanie Blue fb7d5361b0 Fix handling of Python requests with pre-releases in ranges 2025-10-09 12:24:42 -05:00
Assad Yousuf 24ebdf02c0
Preserve comments on version bump (#16141)
## Summary
Fixes [1633](https://github.com/astral-sh/uv/issues/16133). Preserves
comments preceding "version = ..." line when uv version --bump is ran

## Test Plan
Added IT test

---------

Co-authored-by: konsti <konstin@mailbox.org>
2025-10-09 16:07:00 +00:00
konsti 3e6fe1da86
Allow missing `Scripts` directory (#16206)
With the new Python install manager, the `Scripts` directory reported by
Python may not exist.

See https://github.com/astral-sh/uv/pull/16205 for a failing CI run:
https://github.com/astral-sh/uv/actions/runs/18377230241/job/52354460636?pr=16205#step:4:15

Fixes https://github.com/astral-sh/uv/issues/16204
2025-10-09 16:34:40 +02:00
konsti f0fbda1001
Update codspeed to v4 (#16139)
Simplifies the codspeed setup.
2025-10-09 15:57:05 +02:00
konsti 40397ddb4b
Log Python choice in `uv init` (#16182)
Example output:

```
$ uv-debug init foo -v
  DEBUG uv 0.9.0+6 (d3324baf68 2025-10-08)
  DEBUG Acquired shared lock for `/home/konsti/.cache/uv`
  DEBUG No Python version file found in ancestors of working directory: /home/konsti/projects/foo
  DEBUG Checking for Python environment at: `foo/.venv`
  DEBUG Searching for default Python interpreter in managed installations or search path
  DEBUG Searching for managed installations at `/home/konsti/.local/share/uv/python`
  DEBUG Found managed installation `cpython-3.14.0-linux-x86_64-gnu`
  DEBUG Found `cpython-3.14.0-linux-x86_64-gnu` at `/home/konsti/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/bin/python3.14` (managed installations)
  DEBUG Using Python version `>=3.14` from default interpreter
  DEBUG `git rev-parse --is-inside-work-tree` failed but didn't contain `not a git repository` in stderr for `/home/konsti/projects/foo`
  DEBUG No Python version file found in ancestors of working directory: /home/konsti/projects/foo
  DEBUG Writing Python versions to `/home/konsti/projects/foo/.python-version`
  Initialized project `foo` at `/home/konsti/projects/foo`
  DEBUG Released lock at `/home/konsti/.cache/uv/.lock`
```

First commit is refactoring, second commit is the actual change.
2025-10-09 13:55:22 +00:00
konsti 5ee728b3e3
Retry all h2 errors (#16038)
The h2 errors, a specific type nested in reqwest errors, all look like
they shouldn't happen in regular operations and should be retried. This
covers all `io::Error`s going through h2 (i.e., only HTTP 2
connections).

Fixes https://github.com/astral-sh/uv/issues/15916
2025-10-09 13:53:14 +00:00
Mitchell Berendhuysen 40204f06d1
Replace `fs_err` alias (#16201) 2025-10-09 15:18:38 +02:00
samypr100 f81c6b9a62
document uv version for environment variables (#15196)
## Summary

As new environment variables get introduced (e.g. `UV_EDITABLE`) I
thought it would useful to start tracking which release they were
introduced. I think its a common workflow to navigate to the [env var
documentation](https://docs.astral.sh/uv/reference/environment) to know
what the env var for something is but then end up in a situation where
one is using an environment variable with the wrong version of uv and
not notice immediately that its not compatible and therefore ignored.

## Test Plan

Existing tests.

The versions in `since` have all been manually reviewed to the best of
my ability for correctness.
2025-10-08 12:31:12 -05:00
Zanie Blue 1051709792
Treat deleted Windows registry keys as equivalent to missing ones (#16194)
I noticed this flaked in a snapshot.

We may want to encode this in a helper at some point.
2025-10-08 12:24:36 -05:00
Zanie Blue 9cec60bcc4
Include the RFC in the docs for our `Credentials` variants (#16162) 2025-10-08 16:26:30 +00:00
Shunsuke Tsuchiya 39e2e3e74b
Support `UV_WORKING_DIRECTORY` for setting `--directory` (#16125)
<!--
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

<!-- What's the purpose of the change? What does it do, and why? -->

This pull request enables the `--directory` option to accept environment
variable: `UV_DIRECTORY`

### Motivation

Currently, the `--project` option already supports environment
variables, but --directory does not.

The motivation for this change is the same as for the --project option.
When using this option, it’s likely that the project root and the
directory containing the uv project differ. In such cases, allowing
environment variables makes it easier to avoid repeatedly specifying the
directory in commands or task runners.

### Other PRs

- PR for create `--project` option:
https://github.com/astral-sh/uv/pull/12327

## Test Plan

<!-- How was it tested? -->

### no auto testing

As with the --project option, no auto tests are included for this
change.
This is because the implementation relies on Clap’s built-in attribute
functionality, and testing such behavior would effectively mean testing
a third-party crate, which would be redundant.

As long as the compiler accepts it, things should work as expected.

### testing manually

i tested manually like [previous pull
request](https://github.com/astral-sh/uv/pull/12327)

```shell
$ cargo build --locked
./target/debug/uv init uv_directory

$ mkdir uv_directory

$ UV_DIRECTORY=uv_directory ./target/debug/uv sync
Using CPython 3.14.0rc3
Creating virtual environment at: .venv
Resolved 1 package in 15ms
Audited in 0.04ms

$ UV_DIRECTORY=uv_directory ./target/debug/uv run main.py
Hello from uv-directory!

$ ./target/debug/uv run main.py
error: Failed to spawn: `main.py`
  Caused by: No such file or directory (os error 2)
```

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-10-08 08:46:11 -05:00
Ruben Arts 2e180f5c66
Add missing fields to the Cargo package manifests (#16179)
<!--
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?
-->

Hey devs, great tool as always, you're doing amazing work. 

## Summary

<!-- What's the purpose of the change? What does it do, and why? -->

Adds the following fields to the `[package]` table of `Cargo.toml` files
where they were missing:
```toml
rust-version = { workspace = true }
homepage = { workspace = true }
documentation = { workspace = true }
repository = { workspace = true }
authors = { workspace = true }
license = { workspace = true }
```

Most crates already had these fields, this just aligns the rest for
consistency.

This also resolves the warnings from `cargo-deny` when using `uv` crates
as dependencies in Pixi.
## Test Plan
No tests needed, this only updates metadata.
2025-10-08 12:01:52 +02:00
github-actions[bot] 4c4fce4284
Sync latest Python releases (#16169)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-10-08 04:26:32 +00:00
Zanie Blue 39b6886536
Bump version to 0.9.0 (#16161)
Co-authored-by: konsti <konstin@mailbox.org>
2025-10-07 23:17:42 +00:00
Zanie Blue df0a12d461
Fix `uv python upgrade` replacement of installed binaries on pre-release to stable (#16159) 2025-10-07 20:29:42 +00:00
Zanie Blue 3a507e69b2
Ban pre-release versions in `uv python upgrade` requests (#16160) 2025-10-07 15:07:09 -05:00
github-actions[bot] 37b3557dab
Sync latest Python releases (#16157)
Pick up python-build-standalone tag 20251007 to add 3.14.0 final
and 3.13.8, and adjust tests.

Also, fix matching version requests with prereleases: `uvx
python@3.14.0rc3` should not be satisfied by 3.14.0 final.

Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com>
2025-10-07 19:07:18 +00:00
Zanie Blue 61b8eae08a
Fix `uv python upgrade / install` output when there is a no-op for one request (#16158) 2025-10-07 18:39:28 +00:00
Skyler Hawthorne 9214855109
fix compile error on missing uv-python metadata (#16154)
The `uv-python` crate reads the checked-in download metadata to write
out a minified version to be statically included into the binary.

Sometimes, the resulting `download-metadata-minified.json` can go
missing, such as when `uv` is installed via `cargo` as a git source, and
there is an update; `cargo` will do a hard reset on the git repo it
stores in the cache, causing it to be deleted. In these instances, the
`uv-python` crate does not currently re-run its build script, because as
it happens, there was no change to the `download-metadata.json` since it
was last compiled. This causes a build error like:

```
            Updating git repository `https://github.com/astral-sh/uv`
          Installing uv v0.8.24 (https://github.com/astral-sh/uv?tag=0.8.24#252f8873)
            Updating crates.io index
           Compiling uv-version v0.8.24 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-version)
           Compiling uv-git v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-git)
           Compiling uv-build-backend v0.1.0 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-build-backend)
           Compiling uv-configuration v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-configuration)
           Compiling uv-client v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-client)
           Compiling uv-extract v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-extract)
           Compiling uv-workspace v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-workspace)
           Compiling uv-python v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-python)
           Compiling uv-requirements-txt v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-requirements-txt)
           Compiling uv-bin-install v0.0.1 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-bin-install)
           Compiling uv-publish v0.1.0 (/home/skhawtho/.cargo/git/checkouts/uv-c9e40703e19509a8/252f887/crates/uv-publish)
        error: couldn't read `crates/uv-python/src/download-metadata-minified.json`: No such file or directory (os error 2)
           --> crates/uv-python/src/downloads.rs:795:45
            |
        795 | const BUILTIN_PYTHON_DOWNLOADS_JSON: &str = include_str!("download-metadata-minified.json");
            |                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

        error: could not compile `uv-python` (lib) due to 1 previous error
        error: failed to compile `uv v0.8.24 (https://github.com/astral-sh/uv?tag=0.8.24#252f8873)`, intermediate artifacts can be found at `/home/skhawtho/.cache/cargo`.
        To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.
```

This fixes the issue by also adding a `rerun-if-changed` on the
resulting minified JSON file.

Separately, this revision also changes the output directory of the
minified file to the build script's output directory via the `OUT_DIR`
environment variable, so as not to pollute the source code.
2025-10-07 12:33:04 -05:00
Zanie Blue 83f738074d
Allow use of free-threaded variants in Python 3.14+ without explicit opt-in (#16142)
Closes https://github.com/astral-sh/uv/issues/15739
Closes #12445
2025-10-07 11:24:05 -05:00
liam 7d63ef114a
Surface pinned-version hint when `uv tool upgrade` can’t move the tool (#16081)
Resolves https://github.com/astral-sh/uv/issues/15665

`uv tool upgrade` already respects version pins, but when a tool was
installed with an exact version the command quietly becomes a no-op even
though users expect it to upgrade the executable. This change tweaks the
upgrade flow to detect that situation by inspecting the stored receipt
and, whenever the tool stays pinned, emit a concise hint explaining why
the version didn’t move and how to reinstall without the pin.

The message still appears if the run only refreshed supporting packages,
so users aren’t misled by dependency churn that leaves the tool itself
untouched.

I also added an integration test for the scenario end to end by
installing `babel==2.6.0`, attempting an upgrade, and asserting that the
hint is shown alongside the dependency updates.
2025-10-07 11:18:39 -05:00
konsti 73e62c0c17
Don't warn when dependency is constraint by other dependency (#16149)
Currently, `uv lock --resolution lowest-direct` warns above the setup
below, as we visit the unbounded `anyio[trio]` first.

```toml
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
    "anyio[trio]",
    "anyio>=4"
]
```
2025-10-07 17:59:01 +02:00
Zanie Blue 252f887338
Bump version to 0.8.24 (#16146) 2025-10-07 03:03:01 +00:00
Zanie Blue 6f7d0dc7b4
Emit a message on `cache clean` and `prune` when lock is held (#16138)
Closes https://github.com/astral-sh/uv/issues/16112

```
❯ cargo run -q cache clean
Cache is currently in-use, waiting for other uv processes to finish (use `--force` to override)
```

Otherwise, `-v` is required to see we're waiting on a lock.

I'd rather do this than elevate the exclusive lock log message to
something more verbose because this allows us to use a more specific
message as appropriate for the situation. We also previously reduced the
verbosity of arbitrary locks, e.g., see
https://github.com/astral-sh/uv/issues/7489
2025-10-06 16:49:24 +00:00
Zanie Blue 7e4edf0fb4
Add `--force` flag for `uv cache prune` (#16137)
Matching #15992 

See https://github.com/astral-sh/setup-uv/issues/588
2025-10-06 11:36:58 -05:00
konsti 3bed81866f
Remove unused version.rs (#16135)
This file does not have a `mod version;`, I assume it's a remnant of the
`uv version` -> `uv self version` transition.
2025-10-06 09:58:20 -05:00
Zanie Blue 00d3aa3780
Bump version to 0.8.23 (#16119) 2025-10-04 12:46:01 -05:00
Takayuki Maeda 34ec30563e
Move `TRACING_DURATIONS_FILE` to `EnvironmentOptions` (#16109)
<!--
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

<!-- What's the purpose of the change? What does it do, and why? -->

Fixes a part of #14720

Add `TRACING_DURATIONS_FILE` to EnvironmentOptions.

## Test Plan

<!-- How was it tested? -->
2025-10-04 00:09:55 -05:00
Zanie Blue 241ad88051
Confirm that the directory name is a valid Python install key during managed check (#16080)
Closes https://github.com/astral-sh/uv/issues/16077

```
❯ UV_PYTHON_INSTALL_DIR=/opt uv python list --no-managed-python
cpython-3.9.6-macos-aarch64-none    /usr/bin/python3
❯ alias uv=$(pwd)/target/debug/uv
❯ UV_PYTHON_INSTALL_DIR=/opt uv python list --no-managed-python
cpython-3.13.3-macos-aarch64-none     /opt/homebrew/bin/python3.13 -> ../Cellar/python@3.13/3.13.3/bin/python3.13
cpython-3.13.3-macos-aarch64-none     /opt/homebrew/bin/python3 -> ../Cellar/python@3.13/3.13.3/bin/python3
cpython-3.12.10-macos-aarch64-none    /opt/homebrew/bin/python3.12 -> ../Cellar/python@3.12/3.12.10/bin/python3.12
cpython-3.11.12-macos-aarch64-none    /opt/homebrew/bin/python3.11 -> ../Cellar/python@3.11/3.11.12/bin/python3.11
cpython-3.9.6-macos-aarch64-none      /usr/bin/python3
pypy-3.10.14-macos-aarch64-none       /opt/homebrew/bin/pypy3 -> ../Cellar/pypy3.10/7.3.17_1/bin/pypy3
```

Prevents false positives when the `UV_PYTHON_INSTALL_DIR` is a prefix of
some other path with Python installations
2025-10-03 19:36:08 +00:00
Aria Desires b06f02f13d
Fix typo in `_CONDA_ROOT` docs (#16114)
All other references are correct, just slipped through in the actual
docs.
2025-10-03 10:38:00 -05:00
Charlie Marsh 8da9df3654
Avoid rejecting already-installed URL distributions with `--no-sources` (#16094)
## Summary

This PR removes a guard that was accidentally included in
https://github.com/astral-sh/uv/pull/15234/files#diff-6be6d80fe4821c47b70a372260f55e73b8da8182b8dcad7525d5cd3eb584532b.
I meant to remove that logic before merging.

Closes https://github.com/astral-sh/uv/issues/16068.
2025-10-02 09:32:14 -04:00
Charlie Marsh c2100d11f3
Make cache control lookups robust to username (#16088)
## Summary

We serialize the index to the lockfile without the username, so if we
compare based on `==` and the user _includes_ the username in their
`pyproject.toml`, the check will always fail.

Closes https://github.com/astral-sh/uv/issues/16076.
2025-10-01 16:57:50 -04:00
liam d51a1e7456
Deduplicate marker-specific dependencies in `uv pip tree` output (#16078)
Resolves https://github.com/astral-sh/uv/issues/16067

When we build the dependency graph we add an edge per `Requires-Dist`.
If a package publishes multiple marker-guarded requirements (like
pylint’s `dill>=…` for different Python versions), more than one marker
can evaluate to true at runtime, which gives us several edges pointing
to the same installed package node.

To avoid printing the package multiple times, we gather all edges
targeting that node, pass them through a `Cursor`, and aggregate their
requirement details before we print the dependency line. That
aggregation does two things:
  1. If any edge carries a URL, we return that URL immediately.
2. Otherwise we merge all version specifiers into one canonical PEP 440
string.

I've added an integration test, namely `cargo test -p uv --test it
--features pypi -- no_duplicate_dependencies_with_markers` exercises the
new snapshot that installs pylint (with the real dill duplication
scenario present in the original issue) and asserts the tree output,
both with and without `--show-version-specifiers`, now shows a single
dill entry with the merged constraint.
2025-10-01 11:01:41 -05:00
Zanie Blue 8b86bd530e
Remove tracking of inferred dependency conflicts (#15909)
Alternative to #15884 (see commentary there)

Closes https://github.com/astral-sh/uv/issues/15869
2025-10-01 10:03:42 -05:00
Charlie Marsh ab2f394019
Use a global flags instance for wheel check (#16047)
## Summary

This stands up the idea proposed in
https://github.com/astral-sh/uv/pull/16046/files#r2384395797.
2025-09-30 00:10:11 +00:00
Charlie Marsh 7d9ea797b0
Add `UV_SKIP_WHEEL_FILENAME_CHECK` to allow installing invalid wheels (#16046)
## Summary

This PR adds a user setting to allow (in rare cases) accepting wheels
with mismatched filenames and internal metadata.

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

Closes https://github.com/astral-sh/uv/issues/15647.
2025-09-29 19:54:25 -04:00
Charlie Marsh 170ab1cd7f
Ignore origin when comparing installed tools (#16055)
## Summary

This field gets dropped when you serialize and deserialize, so we should
ignore it when comparing indexes.

Closes https://github.com/astral-sh/uv/issues/16051.
2025-09-29 17:23:18 +00:00
Charlie Marsh e87236391f
Re-order lock validation checks by severity (#16045)
## Summary

I don't think it's common for this to matter, but in theory at least
it's important that these are ordered by severity. Otherwise, e.g,
changing the pre-release mode (and then returning early) could mean we
retain the forks when we otherwise shouldn't.
2025-09-29 09:42:21 -04:00
Charlie Marsh b2cc2c2749
Respect `--no-color` on the CLI (#16044)
## Summary

This argument has always existed for compatibility, but apparently we
don't respect it. I assume it was unintentionally dropped during a
refactor.

Closes https://github.com/astral-sh/uv/issues/15950.
2025-09-29 09:38:47 -04:00
Andrei Berenda 1d76c5a365
Add UV_LOG_CONTEXT to EnvironmentOptions (#16031)
## Summary
Add UV_LOG_CONTEXT to EnvironmentOptions
Relates https://github.com/astral-sh/uv/issues/14720

## Test Plan

Tests with existing tests
2025-09-25 21:01:29 +00:00
Andrei Berenda 372283c0cf
Add install_mirrors to EnvironmentOptions (#15937)
## Summary

Add install_mirrors to EnvironmentOptions
Relates #14720

## Test Plan

Tests with existing tests
2025-09-25 10:35:09 -05:00
Zanie Blue ade2bdbd2a
Bump version to 0.8.22 (#16005) 2025-09-23 14:43:48 -05:00
William Woodruff 92cd9cfb0c
deps: bump astral-tokio-tar to 0.5.5 (#16004) 2025-09-23 13:46:08 -04:00
github-actions[bot] 268f1325ba
Upgrade Pyodide to 0.28.3 (#15999)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-09-23 09:57:15 -05:00
Charlie Marsh f64da27450
Bump version to v0.8.21 (#16001) 2025-09-23 13:55:19 +00:00
renovate[bot] 9af64cc156
Update Rust crate anyhow to v1.0.100 (#15974)
Coming soon: The Renovate bot (GitHub App) will be renamed to Mend. PRs
from Renovate will soon appear from 'Mend'. Learn more
[here](https://redirect.github.com/renovatebot/renovate/discussions/37842).

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [anyhow](https://redirect.github.com/dtolnay/anyhow) |
workspace.dependencies | patch | `1.0.99` -> `1.0.100` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>dtolnay/anyhow (anyhow)</summary>

###
[`v1.0.100`](https://redirect.github.com/dtolnay/anyhow/releases/tag/1.0.100)

[Compare
Source](https://redirect.github.com/dtolnay/anyhow/compare/1.0.99...1.0.100)

- Teach clippy to lint formatting arguments in `bail!`, `ensure!`,
`anyhow!`
([#&#8203;426](https://redirect.github.com/dtolnay/anyhow/issues/426))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45Ny4xMCIsInVwZGF0ZWRJblZlciI6IjQxLjk3LjEwIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJpbnRlcm5hbCJdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: konstin <konstin@mailbox.org>
2025-09-23 11:49:23 +00:00
Charlie Marsh 8d6b369274
Refresh lockfile when `--refresh` is provided (#15991) (#15994)
## Summary

If you provide `--refresh` to `uv lock`, we'll now always resolve (even
though it might return the same result). This is also robust to
`--locked` such that `--refresh --locked` will only fail if the lockfile
changes.

Closes https://github.com/astral-sh/uv/issues/15997.
2025-09-23 07:25:13 -04:00
Charlie Marsh 7f7fac812c
Add S3 request signing (#15925)
## Summary

This PR enables users to mark a URL as an S3 endpoint, at which point uv
will sign requests to that URL by detecting credentials from the
standard AWS environment variables, configuration files, etc.

Signing is handled by the
[reqsign](https://docs.rs/reqsign/latest/reqsign/) crate, which we can
also use in the future to sign requests for other providers.
2025-09-22 23:59:52 +00:00
Zanie Blue 3e6fd0b775
Bump version to 0.8.20 (#15998) 2025-09-22 22:34:27 +00:00
Zanie Blue 107d4e0ac7
Add `--force` flag for `uv cache clean` (#15992)
Follows https://github.com/astral-sh/uv/pull/15990 to address concerns
there.
2025-09-22 22:15:14 +00:00
Zanie Blue c21b11edb9
Revert "Refresh lockfile when `--refresh` is provided (#15991)" (#15993)
This reverts commit aeb7ee056e from
https://github.com/astral-sh/uv/pull/15991 since it will break `uv lock
--locked --refresh` otherwise.
2025-09-22 21:13:23 +00:00
Charlie Marsh aeb7ee056e
Refresh lockfile when `--refresh` is provided (#15991)
## Summary

If you provide `--refresh` to `uv lock`, we'll now always resolve (even
though it might return the same result).
2025-09-22 15:58:20 -05:00
Zanie Blue a502464f82
Retain the cache lock and temporary caches during `uv run` and `uvx` (#15990)
We're seeing reports of a regression from
https://github.com/astral-sh/uv/pull/15888 where `--no-cache` causes `uv
run` and `uvx` to fail to spawn a command.

The intent of this code was to allow destructive cache operations
_after_ we'd finished setting up the environment. However, it's unclear
to me that it's safe to run `uv cache clean` during a `uv run` operation
(e.g., `uv run --script` uses an environment in the cache) and, more
importantly, we cannot drop non-persistent caches (e.g., from
`--no-cache`) as they include the environment we're spawning the command
in.

Alternative to #15977 which retains release of the lock — we may want to
consider that approach still but this regression needs to be resolved
quickly.

Closes https://github.com/astral-sh/uv/issues/15989
Closes https://github.com/astral-sh/uv/issues/15987
Closes https://github.com/astral-sh/uv/issues/15967
2025-09-22 15:41:07 -05:00
Zanie Blue 1224f65b13
Hide freethreaded+debug Python downloads in `uv python list` (#15985)
ref https://github.com/astral-sh/uv/issues/15983#issuecomment-3319579833
2025-09-22 12:24:10 -05:00
Zsolt Dollenstein 46bf420eae
Allow upgrading prerelease versions of the same minor Python version (#15959)
Turns out if the minor versions matched we returned false from
`is_upgrade_of` instead of continuing to compare prerelease versions.

Closes #15955.

Note: test cases were initially generated by Claude - I tried making
them shorter.

## Test plan

```
❯ cargo run -- -v python upgrade 3.14
[...]
DEBUG Inspecting existing executable at `/Users/zsol/.local/bin/python3.14`
DEBUG Replacing existing executable for `cpython-3.14.0rc2-macos-aarch64-none` at `/Users/zsol/.local/bin/python3.14` with executable for `cpython-3.14.0rc3-macos-aarch64-none` since it is an upgrade
DEBUG Updated executable at `/Users/zsol/.local/bin/python3.14` to cpython-3.14.0rc3-macos-aarch64-none
Installed Python 3.14.0rc3 in 5.04s
 + cpython-3.14.0rc3-macos-aarch64-none (python3.14)
[...]
❯ uvx python3.14 -V
Python 3.14.0rc3
```
2025-09-22 16:59:48 +00:00
Zanie Blue 022a8f1dd1
Add test coverage for `python_upgrade` with a pre-release version (#15982)
Coverage for https://github.com/astral-sh/uv/pull/15959
2025-09-22 14:26:13 +00:00
Zanie Blue 0edc5677ad
Document support for free-threaded and debug Python versions (#15961)
Closes #12707

---------

Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com>
2025-09-22 13:59:40 +00:00
konsti a6daab422f
Add incompatibility from proxy to base package (#15200)
Add an incompatibility that lets pubgrub skip of marker packages when
the base package already has an incompatible version to improve the
error messages (https://github.com/astral-sh/uv/issues/15199).

The change is also a small perf improvement. Overall this should be able
to improve performance in slow cases by avoiding trying proxy package
versions that are impossible anyway, for a (ideally very small cost) for
tracking the additional incompatibility and tracking the base package
for each proxy package.

```
$ hhyperfine --warmup 2 "uv pip compile --universal scripts/requirements/airflow.in" "target/release/uv pip compile --universal scripts/requirements/airflow.in"
Benchmark 1: uv pip compile --universal scripts/requirements/airflow.in
  Time (mean ± σ):     145.5 ms ±   3.9 ms    [User: 154.7 ms, System: 140.7 ms]
  Range (min … max):   139.2 ms … 153.4 ms    20 runs
 
Benchmark 2: target/release/uv pip compile --universal scripts/requirements/airflow.in
  Time (mean ± σ):     128.7 ms ±   5.5 ms    [User: 141.9 ms, System: 137.3 ms]
  Range (min … max):   121.8 ms … 142.0 ms    23 runs
 
Summary
  target/release/uv pip compile --universal scripts/requirements/airflow.in ran
    1.13 ± 0.06 times faster than uv pip compile --universal scripts/requirements/airflow.in
```

This implementation is the basic version: When we see a proxy
`foo{...}>=x,<y` we add a dependency edge `foo{...}>=x,<y` ->
`foo>=x,<y`. There are several way to extend this, which likely help
more with performance than with error messages.

One idea is that if we see `foo{...}>=x,<y` but we already made a
selection for `foo==z` outside that range, we can insert a dependency
`foo{...}!=z` -> `foo!=z`. This avoids trying any version of the proxy
package except the version that matches our previous selection.

Another is that if we see a dependency `foo>=x,<y`, we also add
`foo{...}>=x,y` -> `foo>=x,<y`. This allows backtracking beyond `foo`
immediately if all version of `foo{...}>=x,<y` are incompatible, since
`foo{...}>=x,<y` incompatible -> `foo>=x,<y` incompatible -> the package
that depended of `foo>=x,<y` is incompatible.

The cost for each of these operations is tracking an additional
incompatibility per virtual package. An alternative approach is to only
add the incompatibility lazily, only when we've tried several version of
the virtual package already. This needs to be weighed of with the better
error messages that the incompatibility gives, we unfortunately have
only few large reference examples.

Requires https://github.com/astral-sh/pubgrub/pull/45

Closes https://github.com/astral-sh/uv/issues/15199
2025-09-22 13:26:08 +02:00
github-actions[bot] 3979c59726
Sync latest Python releases (#15958)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-09-20 02:25:21 +00:00
Zanie Blue fc7c2f8b50
Bump version to 0.8.19 (#15953) 2025-09-19 14:34:41 -05:00
github-actions[bot] 974a83b676
Sync latest Python releases (#15940)
Add Python 3.13.0rc3 (and some comments in .python-version).

Co-authored-by: Geoffrey Thomas <geofft@ldpreload.com>
2025-09-19 18:13:33 +00:00
konsti 00aa2ab672
Make `uv cache clean` parallel process safe (#15888)
Currently, `uv cache clean` and `uv cache prune` can cause crashes in
other uv processes running in parallel by removing their in-use files.

We can solve this by using a shared (read) lock on the cache directory,
while the `uv cache` operations use an exclusive (write) lock. The
drawback is that this is always one extra lock, and that we assume that
all platforms support shared locks.

Once Rust 1.89 fulfills our N-2 policy, we can add support for these
methods in fs_err and switch to
https://doc.rust-lang.org/std/fs/struct.File.html#platform-specific-behavior-2.

**Test Plan**

Open one terminal, run:

```
uv venv -c -p 3.13
UV_CACHE_DIR=cache uv cache clean
UV_CACHE_DIR=cache uv pip install numpy==2.0.0
```

Open another terminal, run:

```
UV_CACHE_DIR=cache uv cache clean
```

Fixes #15704
Part of #13883
2025-09-19 10:21:22 +02:00
Charlie Marsh 0889d53c25
Bump MSRV to 1.88 (#15935)
And bump the `rust-toolchain.toml` to `1.90`. Per our versioning policy.
2025-09-18 14:00:39 -04:00
Zanie Blue 4c2d9e19b0
Use `EnvVars` in linehaul (#15931) 2025-09-18 14:08:58 +00:00
Zanie Blue e23da5b315
Use `EnvVars` for Conda variables in tests (#15930) 2025-09-18 07:52:23 -05:00
Frazer McLean f122387f89
Fix implied `platform_machine` marker for `win_arm64` platform tag (#15921)
<!--
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

I'm back again after #14041, this time for `win_arm64`. I [asked a
Windows on ARM
user](https://github.com/getlogbook/logbook/pull/451#issuecomment-3295513650)
what the value of `platform.machine()` is, and it's `ARM64`.

## Test Plan

Updated/added tests
2025-09-17 19:33:59 -04:00
Zanie Blue c4c47814a8
Bump version to 0.8.18 (#15920) 2025-09-17 16:13:41 -05:00
Zanie Blue fa53a62f0b
Always treat conda environments named `base` and `root` as base environments (#15682)
Extends https://github.com/astral-sh/uv/pull/15679

I'm not sure if we want to do this. It is probably _generally_ true, but
I think I'd rather remove the special casing entirely? I think the main
case for this is that it could help prevent regressions from #15679 and
we can remove it in a breaking release?
2025-09-17 17:32:14 +00:00
Zanie Blue d5012c66bd
Add handling for unnamed conda environments in base environment detection (#15681)
While investigating https://github.com/astral-sh/uv/pull/15679, I
created an unnamed conda environment and noticed this quality which
allows us to detect that it's not the base environment.
2025-09-17 11:34:23 -05:00
Aria Desires 1943aba150
Allow `[project]` to be missing from a `pyproject.toml` (#14113)
Closes #8666 
Closes https://github.com/astral-sh/uv/issues/6838

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-17 10:48:56 -05:00
Charlie Marsh 2a14edf75c
Respect `UV_INSECURE_NO_ZIP_VALIDATION=1` in duplicate header errors (#15912)
## Summary

This was just an oversight on these specific returns.

Closes https://github.com/astral-sh/uv/issues/15871.
2025-09-17 14:34:49 +00:00
Charlie Marsh dea1700945
Avoid ANSI codes in debug! messages (#15843)
## Summary

I spent time trying to figure out how to support this but came up empty.
It _seems_ like maybe the `DefaultFields` implementation in
`tracing-subscriber` uses debug formatting for fields...? So if you have
a string with ANSI codes, they end up printing as unformatted values? I
even reverted all our custom formatting in `logging.rs` and saw the same
thing.

Closes https://github.com/astral-sh/uv/issues/15840.
2025-09-17 14:30:43 +00:00
Charlie Marsh 48f507680c
Add PyG packages to torch backend (#15911)
## Summary

These are now supported on pyx.
2025-09-17 14:18:30 +00:00
Charlie Marsh d4806ee921
Re-add `triton` as a torch backend package (#15910)
## Summary

This accidentally regressed in
https://github.com/astral-sh/uv/pull/15769/files#diff-fcd4a516243929cdb086b7b79af9865a6ed432a0386765b0436392edc17a5a4eL260.
2025-09-17 14:04:50 +00:00
chisato accfb48876
Fix `uv sync --no-sources` not switching from editable to registry installations (#15234)
## Summary

Fixes issue #15190 where `uv sync --no-sources` fails to switch from
editable to registry package installations. The problem occurred because
the installer's satisfaction check didn't consider the `--no-sources`
flag when determining if an existing editable installation was
compatible with a registry requirement.

## Solution

Modified `RequirementSatisfaction::check()` to reject non-registry
installations when `SourceStrategy::Disabled` and the requirement is
from registry. Added `SourceStrategy` parameter threading through the
entire call chain from commands to the satisfaction check to ensure
consistent behavior between `uv sync --no-sources` and `uv pip install
--no-sources`.

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2025-09-17 06:35:32 -05:00
konsti eb5ec95396
Better warning for no direct build (#15898)
**Setup**

```
$ git clone https://github.com/wheelnext/variant_aarch64
$ cd variant_aarch64
$ git checkout 1d047e667dbce4c74878a68c653a6b41bc3d3684
```

**Before**

```
$ uv build -v
[...]
DEBUG Not using uv build backend direct build of , no pyproject.toml: TOML parse error at line 5, column 1
  |
5 | [project]
  | ^^^^^^^^^
missing field `version`
[...]
```

**After**

```
$ uv build -v
[...]
DEBUG Not using uv build backend direct build of ``, pyproject.toml does not match: The value for `build_system.build-backend` should be `"uv_build"`, not `"flit_core.buildapi"`
[...]
```

The empty string gets fixed in
https://github.com/astral-sh/uv/pull/15897

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-17 13:18:41 +02:00
Zanie Blue d805d4a370
Use `_CONDA_ROOT` to detect conda base environments (#15680)
While investigating https://github.com/astral-sh/uv/pull/15679, I
noticed this variable was available in the environment and seems like a
nice additional heuristic.
2025-09-17 11:17:06 +00:00
Zanie Blue ee5f155f7e
Invert the logic for determining if a path is a base conda environment (#15679)
Closes https://github.com/astral-sh/uv/issues/15604

The previous logic does not match the discussion in the original issue
about this feature, nor does it match the comment for the function. I'm
confused because I know this logic is working for some people? I'm
consequently a little wary of making this change. I'm following up with
some additional changes that should ensure this is robust, e.g., #15680
2025-09-17 06:04:29 -05:00
github-actions[bot] 9ec7971b4a
Add GraalPy 25.0.0 with support for Python 3.12 (#15900)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-09-17 02:54:31 +00:00
Zanie Blue 664eadc59a
Fix verbose logging configuration for flake (#15902)
Alas in
https://github.com/astral-sh/uv/actions/runs/17784455913/job/50549326728?pr=15900
we caught the flake with the assert but the `-vv` flags were not in the
right position!
2025-09-17 02:54:12 +00:00
Harshith VH 705b35c552
fix misleading debug message in uv sync (#15881)
<!--
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

- Added `RemovableReason` enum to track removal context
- Updated `OnExisting::Remove` to include source information
- Modified debug message to show appropriate context
- Updated all call sites to specify correct removal source

fixes: #14734

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-16 18:39:08 +00:00
konsti 60f2ca3388
Don't user display empty string for absolute path CWD (#15897)
With the previous order an absolute path would become an empty string.
2025-09-16 17:49:08 +00:00
Charlie Marsh 422863ffde
Infer check URL from publish URL when known (#15886)
## Summary

If we know the publish URL-to-check URL mapping, we can just infer it.
2025-09-16 14:03:03 +00:00
Charlie Marsh ac52201626
Show organization name after authenticating (#15823)
## Summary

Shows the name of the logged-in organization on success, rather than
repeating the URL.
2025-09-16 09:46:43 -04:00
konsti 663053b0d1
packse: Use our own rendering exclusively, and use pylock.toml (#15796)
This PR contains two changes: The companion PR to
https://github.com/astral-sh/packse/pull/277, which moderately
simplifies the uv side, and switching to pylock.toml for packse as
dogfooding. These changes can be applied independent from each other.

Since all files, including the vendored build dependencies, are now on
GitHub Pages under the same root, we only need a packse index root URL.
2025-09-16 15:25:11 +02:00
Harshith VH 2825ee3435
Add `--no-clear` to `uv venv` to disable removal prompts (#15795)
<!--
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?
-->

Closes #15485

---------

Co-authored-by: Aditya-PS-05 <adityapratapsjnhh7654@gmail.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-16 08:24:57 -05:00
Zanie Blue 89a59749c0
Store native credentials for realms with the https scheme stripped (#15879)
Closes https://github.com/astral-sh/uv/issues/15818

Unfortunately, this is how we perform lookups. We could also change the
lookup to include the scheme. I expect all of this to change in the
future anyway, as I want to redesign the storage model for native
credentials.
2025-09-15 13:47:33 -05:00
Zanie Blue 31f46cd6a6
Use the root index URL when retrieving credentials from the native store (#15873)
Part of https://github.com/astral-sh/uv/issues/15818

We use the root when we store the credentials, so we need to use the
root when we retrieve them!
2025-09-15 13:47:24 -05:00
Zanie Blue daff98988b
Add test for realm-level authentication (#15877)
Test coverage for https://github.com/astral-sh/uv/issues/15818
2025-09-15 17:27:59 +00:00
Zanie Blue e90d13e53b
Remove `lock_git_change_log` (#15880)
This test is unstable
2025-09-15 12:04:18 -05:00
Zanie Blue 0aa3c4e094
Propagate preview flag to client for `native-auth` feature (#15872)
Somehow propagation of this got dropped during a rebase, so we never
actually used the native store during resolution.

Part of https://github.com/astral-sh/uv/issues/15818
2025-09-15 10:51:44 -05:00
Charlie Marsh d706c07ae3
Avoid re-parsing `pyproject.toml` when provided as a source (#15851)
## Summary

In the process of making a different change, I noticed that we parse
this during source discovery, throw it away, then parse it again later.
2025-09-15 10:07:38 -04:00
Charlie Marsh ef17e7d0f4
Load credentials for explicit members when lowering (#15844)
## Summary

If the target for `uv pip compile` is a `pyproject.toml` in a
subdirectory, we won't have loaded the credentials when we go to lower
(since it won't be loaded as part of "configuration discovery"). We now
add those indexes just-in-time.

Closes https://github.com/astral-sh/uv/issues/15362.
2025-09-15 13:54:38 +00:00
Charlie Marsh 64bcd4e8a6
Improve BSD tag construction (#15829)
## Summary

I had to use ChatGPT to help with my research on the "correct"
architecture names for these platforms; there could still be some rough
edges, but this seems like an improvement.

Closes https://github.com/astral-sh/uv/issues/15799.
2025-09-14 10:48:37 -04:00
Charlie Marsh 3c813cde76
Error when `pyproject.toml` target does not exist for dependency groups (#15831)
## Summary

Closes https://github.com/astral-sh/uv/issues/15789.
2025-09-14 13:49:35 +00:00
Charlie Marsh b770639c91
Rename `provides_extras` to `provides_extra` (#15825)
## Summary

This is now consistent with `requires_dist` (singular).
2025-09-14 13:27:45 +00:00
Charlie Marsh 312084f2dd
Allow cached environment reuse with `@latest` (#15827)
## Summary

I think this is leftover from a prior refactor whereby we used to avoid
reusing the cached environment if `--reinstall` was passed; but then we
stopped allowing `--reinstall` in `uv tool run` anyway, and this got
changed to `--refresh`. It seems wrong to skip cache reuse with
`--refresh`, though.

Closes https://github.com/astral-sh/uv/issues/15824.
2025-09-14 09:10:46 -04:00
Charlie Marsh 0a2a7bc445
Log when the cache is disabled (#15828)
## Summary

This strikes me as fairly reasonable.

Closes https://github.com/astral-sh/uv/issues/15822.
2025-09-14 01:57:10 +00:00
Charlie Marsh f59d00b479
Allow escaping spaces in --env-file handling (#15815)
## Summary

We allow space-delimiting for `--env-file`, but Clap doesn't support any
form of escaping, so as-is, there's no way to provide a `.env` file in a
directory that contains a space. We now do the splitting ourselves and
respect escapes.

Closes https://github.com/astral-sh/uv/issues/15806.
2025-09-12 18:11:51 -04:00
Charlie Marsh b1fbb524d2
Include SHA when listing lockfile changes (#15817)
## Summary

Right now, we only list changes if the _version_ differs. This PR takes
the SHA into account. We may want to list changes to _any_ sources, but
that gets more complicated (e.g., if the user swaps the index URL, we'd
have to show _all_ changes to the index URL).

Closes #15810.
2025-09-12 17:57:58 +00:00
Charlie Marsh bd8a9348bd
Document `NO_PROXY` support (#15816)
Closes https://github.com/astral-sh/uv/issues/15785.
2025-09-12 13:11:05 -04:00
Ahmed Ilyas 9153d1a5e3
Deprecate `tool.uv.dev-dependencies` (#15469)
## Summary

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

## Test Plan

`cargo test`

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-12 15:08:09 +00:00
Zanie Blue 8f3583a6e6
Allow selection of debug build interpreters (#11520)
Extends the `PythonVariant` logic to support interpreters with the debug
flag enabled.
2025-09-12 13:32:22 +00:00
rimathia 3081557159
Better defaults for native build backend cache keys (#15705)
<!--
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

This change extends the default initialized projects with scikit and
maturin build backends to ensure that the rust or C++ build gets invoked
when a source file changes.

## Test Plan

`cargo run init cppextension-test --build-backend=scikit` followed by
manual testing of the behaviour of the resulting project under `uv run
--with jupyter jupyter lab` and changes to the source file of the
extension.
Analogous for `cargo run init maturin-test --build-backend=maturin `.

## Relevant Issues

The question of why the python extension is not rebuilt on source
changes has been discussed in
https://github.com/astral-sh/uv/issues/15701#issuecomment-3258714942.
2025-09-12 11:14:59 +02:00
William Woodruff 21a92c1632
feat(publish): include blake2b hash in upload form (#15794) 2025-09-11 16:17:07 -04:00
Harshith VH a0f8359012
Add conflict detection between --only-group and --extra flags (#15788)
<!--
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

- Added `conflicts_with = "only_group"` to `--extra` arguments in
`SyncArgs`, `RunArgs`, and `ExportArgs`
- Added tests to verify proper conflict detection and error messages

**Before:** The `--extra` flag was silently ignored when used with
`--only-group`
**After:** Clear error message: `error: the argument '--only-group
<ONLY_GROUP>' cannot be used with '--extra <EXTRA>'`

fixes: #15676 

## Test Plan

- Tests confirm proper error message format when `--only-group` and
`--extra` are used together
- Verified existing functionality remains unchanged when flags are used
independently
2025-09-11 10:34:49 -05:00
Harsh Pratap Singh 5f2871e695
Support Gitlab CI/CD as a trusted publisher (#15583)
Co-authored-by: William Woodruff <william@astral.sh>
2025-09-11 10:35:04 -04:00
Zanie Blue cbb713f705
Review for #15769 (#15775)
Addresses my review comments from
https://github.com/astral-sh/uv/pull/15769
2025-09-11 13:20:13 +00:00
konsti 2ec71bd608
Update packse to 0.3.52: Fix requires python 3.12 (#15786)
Pull in the latest packse changes to make all test work with the new
default Python requirement, 3.12.
2025-09-11 13:19:34 +00:00
Zanie Blue 7789f5b217
Bump version to 0.8.17 (#15776) 2025-09-10 14:59:48 -05:00
Charlie Marsh b195d523d5
Add pyx as a supported PyTorch index URL (#15769)
## Summary

If the user explicitly authenticated to pyx, then we attempt to use the
pyx PyTorch URLs; otherwise, we stick to `download.pytorch.org` as the
default.
2025-09-10 14:38:00 -05:00
David Peter 0d174b79e2
Ignore pre-release versions in `uv init --script` (#15747)
## Summary

Ignore managed pre-release versions of Python for purposes of creating a
`requires-python` constraint when running `uv init --script`. This makes
the behavior consistent with `uv init` for normal projects.

## Test Plan

Added a regression test that makes sure that the constraint is
`requires-python = ">=3.13"`, even though a pre-release version of 3.14
is installed.
2025-09-10 14:35:29 -05:00
Zanie Blue 27d205b0c3
Respect `PYX_API_URL` when suggesting `uv auth login` on 401 (#15774) 2025-09-10 19:24:46 +00:00
Charlie Marsh ccf01fff66
Avoid initiating login flow for invalid API keys (#15773)
## Summary

If the login flow fails, and the user provided an API key, it's
unintuitive to initiate the login flow.
2025-09-10 19:07:29 +00:00
Zanie Blue b2c59a8ace
Do not search for a password for requests with a token attached already (#15772) 2025-09-10 13:52:09 -05:00
Zanie Blue 7c716d5227
Improve error message for HTTP validation in auth services (#15768)
Follows https://github.com/astral-sh/uv/pull/15755
2025-09-10 13:15:19 -05:00
Charlie Marsh 2de677b0d3
Bump version to v0.8.16 (#15761)
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-09 21:41:56 -04:00
konsti e691ac7c9a
Build backend error message style consistency (#15735)
Consistently omit backticks after a colon in build backend messages,
following
https://github.com/astral-sh/uv/pull/15733#discussion_r2330156783.

There's still 74 matches for `: {}"` and 183 matches for `: {[^{]*}"`,
but this PR clears all matches in the build backend.
2025-09-09 17:34:56 +00:00
Zsolt Dollenstein ae2dce6d25
auth: allow insecure http only on localhost (#15755)
## Summary

This is useful for testing purposes.

## Test Plan

I tested using testing purposes.
2025-09-09 17:21:14 +01:00
Charlie Marsh 5494645fba
Use token store credentials for `uv publish` (#15759)
## Summary

Running `uv publish` to pyx should re-use the already-stored token
rather than prompting for credentials.

Closes https://github.com/astral-sh/uv/issues/15758.
2025-09-09 16:13:31 +00:00
konsti cd49e1d11f
Use the `windows` crate facade consistently (#15737)
The initial motivation for this change was that we were using both the
`windows`, the `window_sys` and the `windows_core` crate in various
places. These crates have slightly unconventional versioning scheme
where there is a large workspace with the same version in general, but
only some crates get breaking releases when a new breaking release
happens, the others stay on the previous breaking version. The `windows`
crate is a shim for all three of them, with a single version. This
simplifies handling the versions.

Using `windows` over `windows_sys` has the advantage of a higher level
error interface, we now get a `Result` for all windows API calls instead
of C-style int-returns and get-last-error calls. This makes the
uv-keyring crate more resilient.

We keep using the `windows_registry` crate, which provides a higher
level interface to windows registry access.
2025-09-09 15:07:14 +00:00
konsti 12764df8b2
Show a dedicated error for venvs in source trees (#15748)
A user in the support chat had an error message for `uv build` with the
`uv_build` backend they didn't understand, which was caused by them
having a venv in their build directory. This PR adds a dedicated error
message when adding something to a distribution that looks like a venv.
2025-09-09 12:41:58 +00:00
Zanie Blue 9d3a3843c3
Ban empty usernames and passwords in `uv auth` (#15743)
Otherwise, you can get yourself in a weird state?
2025-09-09 06:23:33 -05:00
konsti d9b63dc547
Use workspace dependencies in uv-keyring (#15738)
It seems that this was during the vendoring of the keyring crate.
2025-09-09 09:05:43 +02:00
Yiğit Ö. Ünver 19ea0f4932
support `--no-project` in `uv format` (#15572)
When a user passes `--no-project` argument to `uv format` command,
instead of running the formatter in the context of the current project,
run it in the context of the current directory. This is useful when the
current directory is not a project.

Closes https://github.com/astral-sh/uv/issues/15462
2025-09-08 16:16:40 -05:00
renovate[bot] bd36952492
Update Rust crate toml to v0.9.5 (#15727)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [toml](https://redirect.github.com/toml-rs/toml) |
workspace.dependencies | patch | `0.9.2` -> `0.9.5` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>toml-rs/toml (toml)</summary>

###
[`v0.9.5`](https://redirect.github.com/toml-rs/toml/compare/toml-v0.9.4...toml-v0.9.5)

[Compare
Source](https://redirect.github.com/toml-rs/toml/compare/toml-v0.9.4...toml-v0.9.5)

###
[`v0.9.4`](https://redirect.github.com/toml-rs/toml/compare/toml-v0.9.3...toml-v0.9.4)

[Compare
Source](https://redirect.github.com/toml-rs/toml/compare/toml-v0.9.3...toml-v0.9.4)

###
[`v0.9.3`](https://redirect.github.com/toml-rs/toml/compare/toml-v0.9.2...toml-v0.9.3)

[Compare
Source](https://redirect.github.com/toml-rs/toml/compare/toml-v0.9.2...toml-v0.9.3)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuOTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-08 15:06:38 +00:00
konsti 39fe2d9eac
Error early for parent path in build backend (#15733)
Paths referencing above the directory of the `pyproject.toml`, such as
`module-root = ".."`, are not supported by the build backend. The check
that should catch was not working properly, so the source distribution
built successfully and only the wheel build failed. We now error early.
The same fix is applied to data includes.

Fix #15702
2025-09-08 13:53:16 +00:00
Zanie Blue 5f8c7181b9
Improve the CLI help for options that accept requirements files (#15706) 2025-09-08 08:23:52 -05:00
renovate[bot] 25ca424551
Update Rust crate mimalloc to v0.1.48 (#15724)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [mimalloc](https://redirect.github.com/purpleprotocol/mimalloc_rust) |
dependencies | patch | `0.1.47` -> `0.1.48` |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.

---

### Release Notes

<details>
<summary>purpleprotocol/mimalloc_rust (mimalloc)</summary>

###
[`v0.1.48`](https://redirect.github.com/purpleprotocol/mimalloc_rust/releases/tag/v0.1.48):
Version 0.1.48

[Compare
Source](https://redirect.github.com/purpleprotocol/mimalloc_rust/compare/v0.1.47...v0.1.48)

##### Changes

- Mimalloc `v3` feature flag. (credits
[@&#8203;gschulze](https://redirect.github.com/gschulze)).

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/astral-sh/uv).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS45MS4xIiwidXBkYXRlZEluVmVyIjoiNDEuOTEuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW50ZXJuYWwiXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-09-08 07:08:37 +00:00
Charlie Marsh 5012b4e831
Allow `--editable` to override `editable = false` annotations (#15712)
## Summary

We support `--no-editable` on the CLI, but now that workspace members
and path dependencies can be marked as `editable = false`, I think it
makes sense for `--editable` to override that.
2025-09-07 14:37:04 -04:00
Charlie Marsh e84c9231aa
Allow `editable = false` for workspace sources (#15708)
## Summary

This ended up being a bit more complex, similar to `package = false`,
because we need to understand the editable status _globally_ across the
workspace based on the packages that depend on it.

Closes https://github.com/astral-sh/uv/issues/15686.
2025-09-07 15:41:17 +00:00
konsti 97777cda66
Don't trace logs all architectures (#15710)
On my machine, this statement print over 500 lines for `uv python list
-vv` of evident statements.
2025-09-07 17:31:50 +02:00
Brendan cbcf51391f
fix: refresh activation scripts from upstream virtualenv (#15272)
## Summary
This refreshes the venv activation scripts from upstream `virtualenv`
project.
This was largely triggered by a problem in the activate.nu script (for
nushell):
- #14888 
- #14914 
- #14917 

I was careful to respect the git history going back to astral-sh/uv#3376
(the last time this was done).
Actually I looked at the complete history from back when this
`uv-virtualenv` crate was named after a Pokémon (⁉️), but I found
nothing (about activation scripts) from back then that hasn't been
overwritten since.

### Some post-processing was involved

- Retained license info at top of scripts
- Retained template vars (eg `{{ BIN_PATH }}`) to assure current support
toward relocatable venv
- Retained deviation from upstream in astral-sh/uv#5640. This seems to
be the only deviation that isn't in sync with upstream.

### Notable changes from upstream

- (omitted due to undesirable complexity) pypa/virtualenv#2928 and its
follow-up pypa/virtualenv#2940
- pypa/virtualenv#2910 (what prompted astral-sh/uv#14917 from
astral-sh/uv#14888)

## Test Plan

There was a request in #14917 to add unit tests to detect breakage or
errors.
I have added a CI job that runs the nushell activation script.
But I think it is better to have the CI test all/most supported shells.
See also #15294 

I have tested this locally using

- [x] nushell (v0.106.1)
- [x] cmd.exe (Microsoft Windows [Version 10.0.26100.4946])
- [x] bash in WSL (GNU bash, version 5.1.16(1)-release
(x86_64-pc-linux-gnu))
- [x] pwsh (PSVersion 5.1.26100.4768)
2025-09-05 16:12:37 -05:00
Jorge Hermo c59ead398d
Allow `uv format` in unmanaged projects (#15553)
Closes #15550

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-05 13:14:41 -05:00
Ahmed Ilyas 6eefde28e7
Support `--with-requirements script.py` and `-r script.py` to include inline dependency metadata from another script (#12763)
## Summary

Closes #6542 

## Test Plan

`cargo test`
2025-09-05 11:45:46 -05:00
Zanie Blue e136a51f3d
Skip Python interpreters that cannot be queried with permission errors (#15685)
Closes https://github.com/astral-sh/uv/issues/15651
2025-09-05 09:03:41 -05:00
konsti 549fb121ba
Support recursive requirements and constraints inclusion (#15657)
uv currently panics with a stack overflow when requirements or
constraints are recursively included. Instead, we ignore files we have
already seen. The one complexity here is that we have to track whether
we're in a requirements inclusion or in a constraints inclusion, to
allow including a file separately for requirements and for constraints,
and to handle `-r` inside or `-c` (which we treat as constraints too).

Fixes #15650
2025-09-05 11:20:12 +02:00
konsti 4a1813f228
Extract IO errors from h2 for streaming retries of Connection Reset (#15675)
Our streaming retries were missing connection reset errors as h2 was
shadowing IO errors (https://github.com/hyperium/h2/issues/862).

**Test plan**

In one terminal:

```
cargo python uninstall 3.12 && cargo run python install 3.12 -vv
```

In another:

```
sudo tcpkill -i wlp2s0 port 443
```

Output:

```
error: Failed to install cpython-3.12.11-linux-x86_64-gnu
  Caused by: Request failed after 3 retries
  Caused by: Failed to download https://github.com/astral-sh/python-build-standalone/releases/download/20250902/cpython-3.12.11%2B20250902-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz
  Caused by: error sending request for url (https://github.com/astral-sh/python-build-standalone/releases/download/20250902/cpython-3.12.11%2B20250902-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz)
  Caused by: client error (SendRequest)
  Caused by: connection error
  Caused by: connection reset
```

I don't know how to test that from inside Rust.

Fix #14171 (again, hopefully)
2025-09-04 14:45:00 +02:00
Charlie Marsh 580bc9d079
Avoid erroring when `match-runtime` target is optional (#15671)
## Summary

If the package that has the `match-runtime` dependency itself isn't
being installed, we should avoid erroring if the package it _depends on_
isn't in the resolution.

Closes https://github.com/astral-sh/uv/issues/15661.
2025-09-04 08:34:53 -04:00
github-actions[bot] 4162005df8
Sync latest Python releases (#15670)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-09-03 20:04:55 -05:00
timrid 330e56e778
Support iOS platform tags (#15640)
## Summary
This implements the iOS part of
https://github.com/astral-sh/uv/issues/8029

FYI: @freakboy3742

<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan
Create a venv with uv and run `cargo run pip install --python-platform
arm64-apple-ios pillow`. Then the iOS binary of pillow should be
installed inside the venv.
2025-09-03 18:24:48 -04:00
Zanie Blue 50bfa8a689
Add logging of incompatible tags on satisfies check (#15663)
I was trying to understand https://github.com/astral-sh/uv/issues/9559
and think we need more logs to see what's going on.
2025-09-03 11:45:49 -05:00
timrid d178e45368
Support Android platform tags (#15646)
## Summary
This implements the Android part of
https://github.com/astral-sh/uv/issues/8029

FYI: @freakboy3742 @mhsmith

<!-- What's the purpose of the change? What does it do, and why? -->

## Test Plan
Create a venv with uv and run `cargo run pip install --python-platform
aarch64-linux-android pybase64`. Then the Android binary of pybase64
should be installed inside the venv.
2025-09-03 10:24:33 -04:00
konsti a94f7d0847
Clarify that `uv auth` commands take a URL (#15664)
From the previous description I tried `uv auth token pyx`, which didn't
work.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-09-03 14:16:16 +00:00
Charlie Marsh 8473ecba11
Require HTTPS for CDN requests (#15660)
## Summary

This should arguably enforce same-realm (as the API), but this is a good
guardrail for now.
2025-09-03 13:32:12 +00:00
Charlie Marsh ad35d120d6
Make `uv auth dir` service-aware (#15649)
## Summary

This got lost when https://github.com/astral-sh/uv/pull/15637 was merged
into not-`main`.
2025-09-02 22:58:59 -04:00
Charlie Marsh 70cb0df7c2
Bump version to v0.8.15 (#15648) 2025-09-03 02:10:58 +00:00
Charlie Marsh 4e48d759c4
Add zstandard support for wheels (#15645)
## Summary

This PR allows pyx to send down hashes for zstandard-compressed
tarballs. If the hash is present, then the file is assumed to be present
at `${wheel_url}.tar.zst`, similar in design to PEP 658
`${wheel_metadata}.metadata` files. The intent here is that the index
must include the wheel (to support all clients and support
random-access), but can optionally include a zstandard-compressed
version alongside it.
2025-09-03 01:38:31 +00:00
Charlie Marsh 7606f1ad3c
Add `uv publish --dry-run` (#15638)
## Summary

`uv publish --dry-run` will perform the `--check-url` validation, and
hit the `/validate` endpoint if the registry is known to support
fast-path validation (like pyx). The `/validate` endpoint lets us
validate an upload without uploading the file _contents_, which lets you
skip the expensive step for common mistakes.

In the future, my hope is that the `/validate` step will deprecated in
favor of Upload API 2.0.
2025-09-02 21:24:31 -04:00
Charlie Marsh b57ad179b6
Allow registries to pre-provide core metadata (#15644)
## Summary

This PR adds support for the `application/vnd.pyx.simple.v1` content
type, similar to `application/vnd.pypi.simple.v1` with the exception
that it can also include core metadata for package-versions directly.
2025-09-03 00:56:29 +00:00
Charlie Marsh f88aaa8740
Add pyx support to `uv auth` commands (#15636)
## Summary

This PR adds support for pyx to `uv auth login`, `uv auth logout`, and
`uv auth token`. These are generic uv commands that can be used to store
credentials for arbitrary indexes and other URLs, but we include a
fast-path for pyx that initiates the appropriate login or logout flow.
2025-09-02 18:18:09 -04:00
Zanie Blue f9e98d1fb6
Allow providing the `uv auth login` password or token via stdin (#15642) 2025-09-02 16:59:58 -05:00
Zanie Blue 63b93a1db0
Add test cases for URL matching with the native keyring (#15641) 2025-09-02 16:56:40 -05:00
github-actions[bot] 8fcd88d2d4
Sync latest Python releases (#15631)
Update to python-build-standalone 20250902 mostly for SQLite 3.50.4/CVE-2025-6965.
2025-09-02 18:43:17 +00:00
Zanie Blue 45946b80b0 Allow storage of multiple usernames per service in the plaintext store (#15628)
We weren't keying our hash map with the username, which meant that only
one user could be used per service.
2025-09-02 13:16:52 -05:00
Zanie Blue 709e0ba238 Remove the native system store from the keyring providers (#15612)
We're not sure what the best way to expose the native store to users is
yet and it's a bit weird that you can use this in the `uv auth` commands
but can't use any of the other keyring provider options. The simplest
path forward is to just not expose it to users as a keyring provider,
and instead frame it as a preview alternative to the plaintext uv
credentials store. We can revisit the best way to expose configuration
before stabilization.

Note this pull request retains the _internal_ keyring provider
implementation — we can refactor it out later but I wanted to avoid a
bunch of churn here.
2025-09-02 13:16:52 -05:00
Zanie Blue bc1bbfb066 Respect usernames when finding matching credentials in the plaintext store (#15620)
We're not respecting the username when searching for a match, which is
no good!
2025-09-02 13:16:52 -05:00
Zanie Blue 7ac957af8f Lock the credentials store when reading or writing (#15610)
Adds locking of the credentials store for concurrency safety. It's
important to hold the lock from read -> write so credentials are not
dropped during concurrent writes.

I opted not to attach the lock to the store itself. Instead, I return
the lock on read and require it on write to encourage safe use. Maybe
attaching the source path to the store struct and adding a `lock(&self)`
method would make sense? but then you can forget to take the lock at the
right time. The main problem with the interface here is to write a _new_
store you have to take the lock yourself, and you could make a mistake
by taking a lock for the wrong path or something. The fix for that would
be to introduce a new `CredentialStoreHandle` type or something, but
that seems overzealous rn. We also don't eagerly drop the lock on token
read, although we could.
2025-09-02 13:16:52 -05:00
Zanie Blue 7d627b50ef Add `uv auth dir` (#15600) 2025-09-02 13:16:52 -05:00
Charlie Marsh e3cb13868d Use a dedicated wire type for credentials serialization (#15599)
This is a little closer to what we do elsewhere when we want to
encapsulate differences in the serialization format.
2025-09-02 13:16:52 -05:00
Charlie Marsh 7d9446450b Misc. tweaks 2025-09-02 13:16:52 -05:00
Zanie Blue a13fb3ec64 Respect `UV_CREDENTIALS_DIR` (#15598) 2025-09-02 13:16:52 -05:00
Zanie Blue 0b5180cb37 Strip the trailing `/simple` from index URLs provided to `uv auth login` (#15591)
I'm pretty sure we need to do this for robust lookups of URLs served by
indexes.
2025-09-02 13:16:52 -05:00
Zanie Blue ac5dc9be1f Add a plain text backend for credential storage (#15588)
Adds a default plain text storage mechanism to `uv auth`.

While we'd prefer to use the system store, the "native" keyring support
is experimental still and I don't want to ship an unusable interface.
@geofft also suggested that the story for secure credential storage is
much weaker on Linux than macOS and Windows and felt this approach would
be needed regardless.

We'll switch over to using the native keyring by default in the future.
On Linux, we can now fallback to a plaintext store the secret store is
not configured, which is a nice property.

Right now, we store credentials in a TOML file in the uv state
directory. I expect to also read from the uv config directory in the
future, but we don't need it immediately.
2025-09-02 13:16:52 -05:00
Zanie Blue ddf2f5ed8c Remove unused dependencies from `uv auth` preview refactor (#15589) 2025-09-02 13:16:52 -05:00
Zanie Blue 7162085846 Update messaging for `uv auth` (#15573)
To clarify that we are not validating the credentials
2025-09-02 13:16:52 -05:00
Zanie Blue a68007aa61 Update `uv auth` snapshots 2025-09-02 13:16:52 -05:00
Zanie Blue f9e974c1f9 Only allow HTTPS services in login for now (#15559) 2025-09-02 13:16:52 -05:00
Zanie Blue a1cc12af2b Add support for credentials in URLs to `uv auth` (#15554)
Allows cases like `uv auth login https://username:password@example.com`
for coherence with the rest of our interfaces.
2025-09-02 13:16:52 -05:00
Zanie Blue 4ad5ae5e6f Add preview warnings to `native-keyring` usage (#15555)
The refactor here was all done by Claude Code.
2025-09-02 13:16:52 -05:00
Zanie Blue 460ea6e9eb Add `uv auth` commands (`login`, `logout`, and `token`) (#15539)
Picks up the work from

- #14559
- https://github.com/astral-sh/uv/pull/14896

There are some high-level changes from those pull requests

1. We do not stash seen credentials in the keyring automatically
2. We use `auth login` and `auth logout` (for future consistency)
3. We add a `token` command for showing the credential that will be used

As well as many smaller changes to API, messaging, testing, etc.

---------

Co-authored-by: John Mumm <jtfmumm@gmail.com>
2025-09-02 13:16:52 -05:00
Jo Shields f76e0fe5e6
Add `--python-platform riscv64-unknown-linux` to various commands (#15630)
## Summary

We (and I'm sure many others) are currently doing a lot of RISC-V work
in QEMU. It is possible to significantly improve the speed of
Python-related builds by taking care of the environment setup using an
AMD64 `uv` binary (bypassing binfmt/qemu-system emulation).

Some approx numbers from local testing in riscv64 Ubuntu in QEMU:

| Resolver arch | Command | Time |
| --- | --- | --- |
| riscv64 | `pip install --upgrade --break-system-packages
--index-url=https://gitlab.com/api/v4/projects/riseproject%2Fpython%2Fwheel_builder/packages/pypi/simple
openai-harmony` | 15s |
| riscv64 | `uv pip install --upgrade --system --break-system-packages
--index-url=https://gitlab.com/api/v4/projects/riseproject%2Fpython%2Fwheel_builder/packages/pypi/simple
openai-harmony` | 5s |
| amd64 | `uv pip install --python-platform=riscv64-unknown-linux
--upgrade --system --break-system-packages
--index-url=https://gitlab.com/api/v4/projects/riseproject%2Fpython%2Fwheel_builder/packages/pypi/simple
openai-harmony` | 4s |

The numbers from some larger internal packages with deeper dependency
trees are much more pronounced - 3m6 vs 43s vs 8s, in one example.

Manylinux 2.39 is specified, as it's the first (only?) RISC-V manylinux

## Test Plan

Locally, in QEMU.

`$ docker run --platform linux/riscv64 -it ubuntu:latest`, get amd64
libc into LD_LIBRARY_PATH, tests as above
2025-09-02 13:17:30 -04:00
github-actions[bot] 35ce8e1dae
Sync latest Python releases (#15578)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-09-02 14:24:39 +00:00
Michał Górny 4aaf71a38a
Fix `python_module` test failures w/ system Python and installed uv (#15611)
## Summary

Override `sys.base_prefix` when performing `python_module` tests, in
order to prevent `find_uv_bin()` from finding `uv` installed alongside
system Python, and therefore fix test failures on Gentoo.

Fixes #15368

## Test Plan

```
cargo test --profile=fast-build --features git --features pypi --features python --no-default-features --test it python_module
```

Signed-off-by: Michał Górny <mgorny@gentoo.org>
2025-09-02 08:45:14 -05:00
konsti d5bcc0535a
Add test case for status code retries (#15617)
When migrating from the `reqwest_retry` crate, we want to ensure that
the status codes we retry stay the same. This also helps us to
intentionally migrate to a different list later, by enumerating the list
of status codes that are retried.
2025-09-02 15:41:54 +02:00
konsti 19e19d5795
Add error trace to invalid package format (#15626)
In https://github.com/astral-sh/uv/issues/11636, we're getting reports
for installation flakes that report an invalid package format for what
appears to be a network problem. Since we're cutting the error reporting
to the first error message in the chain, we're not reporting the actual
network error underneath it.

This PR displays the whole error chain for invalid package format
errors, so we can debug and eventually catch-and-retry
https://github.com/astral-sh/uv/issues/11636.
2025-09-02 15:22:42 +02:00
Charlie Marsh d70ea34d45
Fix settings rendering for `extra-build-dependencies` (#15622)
## Summary

This was fixed in https://github.com/astral-sh/uv/pull/15161, then
reverted as it regressed the error handling. I've re-applied the change
here, but moved the error handling to the runtime, rather than
parse-time. I think this is slightly worse in that we no longer include
the originating source code snippet, but it at least gives us the
expected behavior :(

Closes https://github.com/astral-sh/uv/issues/15124.
2025-09-02 09:06:21 -04:00
adamnemecek 9be016f3f8
refactored IndexUrl (#15613) 2025-09-01 09:28:42 +02:00
adamnemecek 36216363eb
Refactored Refresh::combine (#15609) 2025-08-31 12:18:58 -05:00
konsti 22f80ca00d
Retry streaming Python and bin download errors (#15567)
When there is an error during the streaming download and unpack for
Python interpreter and bin installs, we would previously fail, causing a
lot of CI flakes on GitHub Actions.

The problem was that the error is not one of the extended IO errors we
were previously handling, but a regular reqwest error, nested below
layers of errors of other crates processing the stream, including some
IO errors. We now handle nested reqwest errors, too.

This surfaced another problem: Our manual retry loop couldn't inform the
retry middleware that it already performed the limit of retries, and
that the middleware should not retry anymore. While too many retries are
more a problem for debugging than for the user, this causes confusing
error output. To work around this, we disable the retries in the client
and handle all retry errors in our loop.

Fixes https://github.com/astral-sh/uv/issues/14171

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2025-08-31 15:07:22 +00:00
Charlie Marsh 01e5195ef3
Skip non-existent directories in bytecode compilation (#15608)
## Summary

Closes https://github.com/astral-sh/uv/issues/15577.
2025-08-31 14:53:00 +00:00
Zsolt Dollenstein c2c713e5d2
fix ecosystem::transformers test (#15605)
## Summary
This test is broken because faiss-1.8.0.post1's sdist was deleted(?)
from [pypi](https://pypi.org/project/faiss-cpu/1.8.0.post1/#files).
2025-08-31 11:55:59 +01:00
konsti 289ed86e63
Use a global `BaseClientBuilder` (#15548)
Alternative to #15105

Instead of building a `BaseClientBuilder` from `NetworkSettings` each
time we need a client, we instead build a single `BaseClientBuilder` and
pass it around. The `RegistryClientBuilder` then uses
`BaseClientBuilder` exclusively for configuration. This removes a chunk
of copy-and-paste code, and also moves the fallible `retries_from_env`
into a single place

Borrow vs. clone is mostly ad-hoc, we can change it in either direction
if it matters.

Closes #15105
2025-08-29 13:30:51 -05:00
konsti 882c9d9482
Make `cache_index_credentials()` misuse resistant (#15546)
https://github.com/astral-sh/uv/issues/11836#issuecomment-3022735011 was
caused by a missing `cache_index_credentials()` call. This call was
always preceding a registry client builder. We can improve this
situation by caching index credentials in the registry client builder.
2025-08-29 15:11:54 +00:00
Harsh Pratap Singh d877899920
Add `uv tree --show-sizes` to show package sizes (#15531)
<!--
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

Adds the enhancement proposed in #15470. Each package in the dependency
tree now shows its compressed wheel file size, reading the wheel sizes
directly from the lockfile (uv.lock). Doesn't break existing tree
formatting or options. If no wheel size is available, nothing is added.

Now, developers can identify large packages in their dependency tree. 

The tree still shows extras exactly as before, and then appends a size
for the package.

## Test Plan

Manually tested :
```
harsh@fcr-node:~/uv/test-uv-tree-sizes$ ../target/debug/uv tree
Using CPython 3.13.7
warning: No `requires-python` value found in the workspace. Defaulting to `>=3.13`.
Resolved 4 packages in 6ms
pure-python v0.1.0
├── click v8.2.1
└── six v1.17.0
harsh@fcr-node:~/uv/test-uv-tree-sizes$ ../target/debug/uv tree --show-sizes
Using CPython 3.13.7
warning: No `requires-python` value found in the workspace. Defaulting to `>=3.13`.
Resolved 4 packages in 6ms
pure-python v0.1.0
├── click v8.2.1 (99.8KiB)
└── six v1.17.0 (10.8KiB)
```
2025-08-29 08:31:46 -05:00
Charlie Marsh 4168d9b320
Add `--python-platform` to `uv run` and `uv tool` (#15515)
## Summary

Closes https://github.com/astral-sh/uv/issues/11120.
2025-08-29 00:51:39 +00:00
Zanie Blue af856fb883
Bump version to 0.8.14 (#15576) 2025-08-28 21:25:02 +00:00
github-actions[bot] f461438611
Add managed Python distributions for aarch64-musl (#15574)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-08-28 15:44:51 -05:00
Zanie Blue 2fd2e19ce3
Use `thiserror` for keyring error type (#15561) 2025-08-28 08:09:11 -05:00
Zanie Blue 17a86d83ca
Ensure we get the last error from Windows on the same thread (#15564)
Reverts #15552
Closes https://github.com/astral-sh/uv/pull/15562
Closes https://github.com/astral-sh/uv/issues/15558

The `GetLastError` calls must be on the same thread, or we can pull the
wrong last error!
2025-08-27 21:42:37 +00:00
konsti 7d49571336
Rename `Dev` to `Group` internally (#15557)
The "dev" naming is a pre-PEP 735 artifact.
2025-08-27 18:35:43 +00:00
Zanie Blue 9b1328af3d
Lock during installs in `uv format` to prevent races (#15551)
Closes https://github.com/astral-sh/uv/issues/15513
2025-08-27 11:42:39 -05:00
konsti 0bde9e4b8f
Read index credentials from env for `uv publish` (#15545)
We were previously missing the
`index_locations.cache_index_credentials()` call in `uv publish` to load
index credentials from the env.

See https://github.com/astral-sh/uv/issues/11836#issuecomment-3022735011
Fixes #11836
2025-08-27 11:19:10 -05:00
Zanie Blue bce30be3a5
Treat a 203 error on credential removal as a missing entry on Windows (#15552)
Attempting to address the failure at
https://github.com/astral-sh/uv/actions/runs/17269216842/job/49009070733?pr=15539
2025-08-27 10:48:12 -05:00
Zsolt Dollenstein 83e42fdd13
Stop setting `CLICOLOR_FORCE=1` when calling build backends (#15472)
## Summary

`CLICOLOR_FORCE` changes the output of underlying build commands, which
messes with wrapper tools trying to parse their output.

Closes #12564, closes #15415.
2025-08-27 16:28:02 +01:00
Charlie Marsh 9108b04642
Support file or directory removal for Windows symlinks (#15543)
## Summary

Similar to https://github.com/rust-lang/cargo/pull/13910.

I think this should close https://github.com/astral-sh/uv/issues/15541
since we're indiscriminately calling `remove_dir` on that dangling
symlink.
2025-08-27 07:43:03 -04:00
konsti db4dfb4cf9
Add logging to the uv build backend (#15533)
Add support for `RUST_LOG` to the uv build backend. While we were
previously using logging statements in the uv build backend, they could
only be shown when when using the direct build fast path through uv, as
there was no tracing subscriber to write log messages out. This means no
debug logging when using the build backend through pip, `python -m
build`, an incompatible version of uv, or any other build frontend; No
option to figure why includes and excludes behave the way they do.

This PR closes this gap by adding a tracing subscriber. The only option
to enable it is `RUST_LOG`, as we don't have a CLI. The formatting style
is the same as for uv, and color is also support in the same way, albeit
only through anstream's support for TTYs and environment variables. We
recommend only `RUST_LOG=uv=debug` and `RUST_LOG=uv=verbose` in the
docs, but this can be used to debug into crates such as `glob`, too.

<img width="1008" height="325" alt="image"
src="https://github.com/user-attachments/assets/d33df219-750b-46a2-b3b4-8895aa137ab9"
/>

**Before**

```
$ pip wheel . -v [...]
Looking in links: /home/konsti/projects/uv/target/wheels/
Processing /home/konsti/projects/uv/scripts/packages/built-by-uv
  Running command pip subprocess to install build dependencies
  Looking in links: /home/konsti/projects/uv/target/wheels/
  Processing /home/konsti/projects/uv/target/wheels/uv_build-0.8.13-py3-none-manylinux_2_39_x86_64.whl
  Installing collected packages: uv_build
  Successfully installed uv_build-0.8.13
  Installing build dependencies ... done
  Running command Getting requirements to build wheel
  Getting requirements to build wheel ... done
  Running command Preparing metadata (pyproject.toml)
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: built-by-uv
  Running command Building wheel for built-by-uv (pyproject.toml)
  Error: Unsupported glob expression in: `tool.uv.build-backend.*-exclude`

  Caused by:
      Invalid character `!` at position 10 in glob: `**/build-*!$§%!½¼²¼³¬!§%$§%.h`. hint: Characters can be escaped with a backslash
  error: subprocess-exited-with-error

  × Building wheel for built-by-uv (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
  full command: /usr/bin/python3 /usr/lib/python3/dist-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py build_wheel /tmp/tmpow1illc9
  cwd: /home/konsti/projects/uv/scripts/packages/built-by-uv
  Building wheel for built-by-uv (pyproject.toml) ... error
  ERROR: Failed building wheel for built-by-uv
Failed to build built-by-uv
ERROR: Failed to build one or more wheels
```

**After**

```
$ RUST_LOG=uv=debug pip wheel . -v [...]
Looking in links: /home/konsti/projects/uv/target/wheels/
Processing /home/konsti/projects/uv/scripts/packages/built-by-uv
  Running command pip subprocess to install build dependencies
  Looking in links: /home/konsti/projects/uv/target/wheels/
  Processing /home/konsti/projects/uv/target/wheels/uv_build-0.8.13-py3-none-manylinux_2_39_x86_64.whl
  Installing collected packages: uv_build
  Successfully installed uv_build-0.8.13
  Installing build dependencies ... done
  Running command Getting requirements to build wheel
  Getting requirements to build wheel ... done
  Running command Preparing metadata (pyproject.toml)
  DEBUG Writing metadata files to /tmp/pip-modern-metadata-l_kh78cj
  DEBUG Found PEP 639 license declarations, using METADATA 2.4
  DEBUG License files match: `LICENSE-APACHE`
  DEBUG License files match: `LICENSE-MIT`
  DEBUG License files match: `third-party-licenses/PEP-401.txt`
  Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: built-by-uv
  Running command Building wheel for built-by-uv (pyproject.toml)
  DEBUG Checking metadata directory /tmp/pip-modern-metadata-l_kh78cj/built_by_uv-0.1.0.dist-info
  DEBUG Found PEP 639 license declarations, using METADATA 2.4
  DEBUG License files match: `LICENSE-APACHE`
  DEBUG License files match: `LICENSE-MIT`
  DEBUG License files match: `third-party-licenses/PEP-401.txt`
  DEBUG Writing wheel at /tmp/pip-wheel-bu6to9i7/built_by_uv-0.1.0-py3-none-any.whl
  DEBUG Wheel excludes: ["__pycache__", "*.pyc", "*.pyo", "build-*!$§%!½¼²¼³¬!§%$§%.h", "/src/built_by_uv/not-packaged.txt"]
  Error: Unsupported glob expression in: `tool.uv.build-backend.*-exclude`

  Caused by:
      Invalid character `!` at position 10 in glob: `**/build-*!$§%!½¼²¼³¬!§%$§%.h`. hint: Characters can be escaped with a backslash
  error: subprocess-exited-with-error

  × Building wheel for built-by-uv (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> See above for output.

  note: This error originates from a subprocess, and is likely not a problem with pip.
  full command: /usr/bin/python3 /usr/lib/python3/dist-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py build_wheel /tmp/tmpjrxou13a
  cwd: /home/konsti/projects/uv/scripts/packages/built-by-uv
  Building wheel for built-by-uv (pyproject.toml) ... error
  ERROR: Failed building wheel for built-by-uv
Failed to build built-by-uv
ERROR: Failed to build one or more wheels
```

(There is no color in the above uv log statements, as pip doesn't
register as a TTY)

Fixes #12723
2025-08-27 09:14:00 +02:00
Charlie Marsh 2eb1c725aa
Fix failing virtualenv test on Windows (#15542)
Closes https://github.com/astral-sh/uv/issues/15540.
2025-08-26 23:14:13 -04:00
Charlie Marsh 9eb5fc240c
Refuse to remove non-virtual environments in `uv venv` (#15538)
## Summary

Closes https://github.com/astral-sh/uv/issues/15474.
2025-08-26 13:26:20 -04:00
Charlie Marsh 0c674619b2
Avoid erroring when creating `venv` in current working directory (#15537)
## Summary

A strange use-case, but the current behavior is definitely a bug.

Part of https://github.com/astral-sh/uv/issues/15474.
2025-08-26 12:43:29 -04:00
Charlie Marsh b2c8f5ef68
Add `rkyv` implementation for Core Metadata (#15532)
## Summary

Enables us to store Core Metadata in zero-copy format.
2025-08-26 10:22:50 -04:00
Charlie Marsh 615e076beb
Rename some Simple API structs (#15530)
## Summary

For clarity.
2025-08-26 13:55:58 +00:00
konsti 439395dadf
Fix unused code warning around `entry_from_constructor` (#15525) 2025-08-26 13:30:46 +02:00
Harsh Pratap Singh 39537f4372
format {version} on failure (#15527)
<!--
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

Fixes #15512 

## Test Plan

Manually tested :
```
~/uv/target/release/uv format --version 999.999.999 --preview-features format
error: Failed to install ruff 999.999.999
  Caused by: Failed to download from: https://github.com/astral-sh/ruff/releases/download/999.999.999/ruff-x86_64-unknown-linux-gnu.tar.gz
  Caused by: HTTP status client error (404 Not Found) for url (https://github.com/astral-sh/ruff/releases/download/999.999.999/ruff-x86_64-unknown-linux-gnu.tar.gz)
  ```
2025-08-26 11:26:10 +00:00
github-actions[bot] 75741082f7
Update Pyodide build number to 0.28.2 (#15523)
Automated update for Python releases.

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
2025-08-26 00:58:20 +00:00
Charlie Marsh b723129c7c
Clear discovered interpreters when creating virtual environment (#15522)
## Summary

Closes https://github.com/astral-sh/uv/issues/15518.
2025-08-25 20:24:24 -04:00
Zanie Blue 9b8d6989d4
Allow pinning managed Python versions to specific build versions (#15314)
Allows pinning the Python build version via environment variables, e.g.,
`UV_PYTHON_CPYTHON_BUILD=...`. Each variable is implementation specific,
because they use different versioning schemes.

Updates the Python download metadata to include a `build` string, so we
can filter downloads by the pin. Writes the build version to a file in
the managed install, e.g., `cpython-3.10.18-macos-aarch64-none/BUILD`,
so we can filter installed versions by the pin.

Some important follow-up here:

- Include the build version in not found errors (when pinned)
- Automatically use a remote list of Python downloads to satisfy build
versions not present in the latest embedded download metadata

Some less important follow-ups to consider:

- Allow using ranges for build version pins
2025-08-25 16:25:05 -05:00
Charlie Marsh b6f1fb7d3f
Respect `[pip]` settings for `uv pip check` (#15514)
## Summary

Oversight from #15486.
2025-08-25 13:47:30 +00:00
Charlie Marsh ef9a332364
Cache `WHEEL` and `METADATA` reads in installed distributions (#15489)
## Summary

Uses interior mutability to cache the reads. This follows the pattern we
use for reading the platform tags in `Interpreter::tags`.
2025-08-25 13:40:20 +00:00
Charlie Marsh be4d5b72aa
Reject already-installed wheels that don't match the target platform (#15484)
## Summary

We've received several requests to validate that installed wheels match
the current Python platform. This isn't _super_ common, since it
requires that your platform changes in some meaningful way (e.g., you
switch from x86 to ARM), though in practice, it sounds like it _can_
happen in HPC environments. This seems like a good thing to do
regardless, so we now validate that the tags (as recoded in `WHEEL`) are
consistent with the current platform during installs.

Closes https://github.com/astral-sh/uv/issues/15035.
2025-08-25 09:20:54 -04:00
Pepe Osca 6e802873cc
fix(tests): Refactor uv format tests (#15468)
Closes #15458

## Summary

Refactor uv format tests to reduce noise.
2025-08-25 07:40:20 -05:00
Charlie Marsh 7f1a464216
Remove redundant STOPSHIPs (#15511)
## Summary

I accidentally merged these from a partial refactor.
2025-08-25 08:34:47 -04:00
Charlie Marsh d19d0e26aa
Add `--python-platform` to `uv pip check` (#15486)
## Summary

I want this to facilitate some testing for
https://github.com/astral-sh/uv/issues/15035.
2025-08-24 14:14:42 -04:00
Charlie Marsh 99f1f4fee4
Move wheel tag methods to `WheelTag` (#15487)
## Summary

Lowering these out of `WheelFilename`.
2025-08-24 14:00:08 -04:00
Charlie Marsh 6d874b1a25
Move WHEEL file parsing into a struct (#15483)
## Summary

No functional changes, but I need to add more behavior here for
https://github.com/astral-sh/uv/issues/15035, so seems nice to do this
separately.
2025-08-24 15:53:12 +00:00
Charlie Marsh f16760e10a
Cache PyTorch wheels by default (#15481)
## Summary

After chatting with the PyTorch team, it looks like some number of
wheels were accidentally uploaded with
`no-cache,no-store,must-revalidate` due to
https://github.com/pytorch/pytorch/pull/149218. They're going to correct
this for the respective wheels. I've encouraged them to set an immutable
caching header for these files, and it might happen. But even if this
isn't set, by default we only allow these wheels to be cached for 600s,
since the other wheels don't include a `Cache-Control` header at all
(but do include a `Last-Modified`, so we cache based on our heuristic:
`Freshness lifetime heuristically assumed because of presence of
last-modified header: 600s`). This probably leads to tons of unnecessary
downloads for users over time. Andrey from the PyTorch team agreed that
we should do this.

Closes https://github.com/astral-sh/uv/issues/15480.
2025-08-24 11:41:17 -04:00
Charlie Marsh ac84f5aedc
Move preview features into a dedicated crate (#15482)
## Summary

This is causing some cyclic dependencies issues for me, because these
can be used in virtually _any_ crate (like `uv-install-wheel`), which
then means that all of `uv-configuration` becomes a dependency, etc. I
think this should be a leaf crate so that we can safely depend on it
anywhere.
2025-08-24 09:55:30 -04:00
Jorge Hermo e6def43110
Run the formatter in the project root instead of the working directory (#15440)
Closes https://github.com/astral-sh/uv/issues/15430

This PR is a branch from https://github.com/astral-sh/uv/pull/15438,
opening it as a draft until that is merged to main and I'll merge main
with this branch to have a cleaner diff

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-08-22 15:09:42 -05:00
Xavi Simpson 6e2fbbc30f
Add `--no-install-local` option to `uv sync`, `uv add` and `uv export` (#15328)
<!--
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

<!-- What's the purpose of the change? What does it do, and why? -->

Closes #14866. Adds a `no-install-local` flag to the sync and export
commands that excludes locally defined packages from being installed.

This helps with if you're caching your virtual environment. You can
exclude local packages since they're more likely to change between
builds.

## Test Plan

snapshot test: `sync::no_install_local`
CI

## Notes
I made an `InstallOptions` struct to avoid a crate isolation issue I was
running into while implementing.

Thanks for maintaining this project!
2025-08-22 11:31:52 -05:00