Commit Graph

4309 Commits

Author SHA1 Message Date
Charlie Marsh c0bde88f6c
Remove TOCTOU errors in Git clone (#10758)
## Summary

We should try to remove, then fail gracefully, rather than checking
existence.
2025-01-19 20:31:15 -05:00
Charlie Marsh 23e892011c
Remove URL conversions in Git path (#10757)
## Summary

We convert from `Url` to `&str` back to `Url`.
2025-01-19 23:00:42 +00:00
Charlie Marsh 5e5cb8797d
Remove unused Git resolver methods (#10754) 2025-01-19 17:02:53 +00:00
Charlie Marsh c306e46e1d
Remove trailing commas before brackets (#10740) 2025-01-18 19:56:46 +00:00
Charlie Marsh ae366ccd0e
Remove unnecessary clone on package name (#10741) 2025-01-18 19:45:19 +00:00
Charlie Marsh 35aec8863e
Use colors for lock errors (#10736)
## Summary

These now better match the errors we show when failing to resolve.
2025-01-18 18:50:20 +00:00
Charlie Marsh 3fe4e7168b
Use short-form for platform tag checks (#10737) 2025-01-18 18:22:09 +00:00
Charlie Marsh 1bfa7230fc
Correct documentation for wheel tag hints (#10735)
These were copy-pasted by accident.
2025-01-18 18:13:21 +00:00
Charlie Marsh ddff891397
Use iterators rather than eagerly collecting tags (#10734) 2025-01-18 13:11:48 -05:00
Charlie Marsh 4f807473d3
Avoid using NumPy, Pandas, etc. in tool tests (#10725)
## Summary

Closes https://github.com/astral-sh/uv/issues/10645.
2025-01-17 18:20:26 -05:00
Charlie Marsh 3478c068bb
Bump version to v0.5.21 (#10723) 2025-01-17 20:53:36 +00:00
Charlie Marsh a7f67e877c
Avoid attempting to patch macOS dylib for non-macOS installs (#10721)
## Summary

For example, `cargo run python install
cpython-3.12.8-linux-x86_64_v3-gnu` (on macOS) shouldn't attempt to
patch the dylib. At present, it leads to this warning:

```
warning: Failed to patch the install name of the dynamic library for /Users/crmarsh/.local/share/uv/python/cpython-3.12.8-linux-x86_64_v3-gnu/bin/python3.12. This may cause issues when building Python native extensions.
Underlying error: Failed to update the install name of the Python dynamic library located at `/Users/crmarsh/.local/share/uv/python/cpython-3.12.8-linux-x86_64_v3-gnu/lib/libpython3.12.dylib`
```
2025-01-17 19:21:32 +00:00
Charlie Marsh 08da17d035
Respect environment variable credentials for indexes outside root (#10688)
## Summary

We now respect environment variable-based authentication when the
explicit index is defined outside of the workspace root. This applies to
both local and Git-based projects.

Closes https://github.com/astral-sh/uv/issues/10680.
2025-01-17 13:55:09 -05:00
Zanie Blue e2da86ae09
Fix typo (#10720) 2025-01-17 12:54:14 -06:00
Zanie Blue 48140feacb
Add `MACOSX_DEPLOYMENT_TARGET` to the `--python-platform` documentation (#10698) 2025-01-17 18:49:00 +00:00
Henry Schreiner 5e86e0bf4f
fix: ignore permission errors too when looking for user file (#10697)
<!--
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 new ARM runners report a permission error:

```
Run uvx twine check wheelhouse/*
error: failed to open file `/home/runneradmin/.config/uv/uv.toml`: Permission denied (os error 13)
```

In this PR, a PermissionsError is treated like not finding the file.

I reworked the structure just a bit to avoid calling `err.kind()`
multiple times.

## Test Plan

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

Added a UNIX only test where I set the permissions of the folder
containing the file and try to find it.

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2025-01-17 12:28:00 -05:00
Charlie Marsh e02a7bb75d
Sort preferences by environment, then index (#10700)
## Summary

This has a few effects:

1. We only call `preferences` once, which should be more efficient.
2. We collect `preferences` into a vector when there are multiple. Less
efficient, but pretty rare?
3. We now correctly prefer preferences from the same index.
2025-01-17 17:27:44 +00:00
Charlie Marsh 1f29165796
Add `UV_VENV_SEED` environment variable (#10715)
## Summary

Closes https://github.com/astral-sh/uv/issues/7655.
2025-01-17 12:08:55 -05:00
Charlie Marsh 8111650100
Avoid returning `Some` for narrowing no-ops (#10705)
The net effect here is (I think) just that we end up logging more
"narrowing" outcomes than we have in practice.
2025-01-17 16:41:17 +00:00
Charlie Marsh bc8002e26e
Avoid narrowing `requires-python` marker with disjunctions (#10704)
## Summary

A bug in `requires_python` (which infers the Python requirement from a
marker) was leading us to break an invariant around the relationship
between the marker environment and the Python requirement. This, in
turn, was leading us to drop parts of the environment space when
solving.

Specifically, in the linked example, we generated a fork for
`python_full_version < '3.10' or platform_python_implementation !=
'CPython'`, which was later split into `python_full_version == '3.8.*'`
and `python_full_version == '3.9.*'`, losing the
`platform_python_implementation != 'CPython'` portion.

Closes https://github.com/astral-sh/uv/issues/10669.
2025-01-17 16:25:32 +00:00
Charlie Marsh dce7b9da13
Store unsupported tags in wheel filename (#10665)
## Summary

We can retain the small-size advantage of our new tags by moving the
"unknown tag" case into `WheelTagLarge`. This ensures that we can still
represent unknown tags, but avoid paying the cost for them.
2025-01-17 04:41:53 +00:00
Charlie Marsh 80bdb3a997
Avoid building dynamic versions when validating lockfile (#10703)
## Summary

Closes #10689.
2025-01-17 04:27:46 +00:00
Charlie Marsh 45455b33c0
Respect preferences for explicit index dependencies from `requirements.txt` (#10690)
## Summary

Closes: https://github.com/astral-sh/uv/issues/10383.
2025-01-16 18:10:00 +00:00
Zanie Blue 50c6465ad8
Add feature-gate to ecosystem tests and disable on Windows CI (#10649)
These tests should be platform independent and are particularly
expensive to run
2025-01-16 16:02:06 +00:00
Zanie Blue 11f2882211
Simplify `valid_link` determination in `python install` (#10642)
Addresses review feedback at
https://github.com/astral-sh/uv/pull/10639#discussion_r1917263236
2025-01-16 09:53:07 -06:00
Daniel Hollas 6c572db056
Make running uv version error clearer (#10676)
The existing error for when the installed uv version does not match the
required version might be confusing, hopefully this makes it clearer.
2025-01-16 10:13:24 -05:00
konsti 8b1d3de4fc
Log source file on compile timeout (#10672)
Log the file that failed to bytecode compile when encountering a timeout
for debugging #6105 better.

[sysinfo](https://lib.rs/crates/sysinfo) would give us the option to
report memory usage too, but i'm hesitant to add a dependency just for
the error path.
2025-01-16 10:01:23 -05:00
Mathieu Kniewallner b46c6db317
docs: fix a few typos (#10675)
## Summary

Fixing a few typos found in the documentation and in comments.
2025-01-16 09:53:59 -05:00
Zanie Blue 73cade1386
Drop expensive packages `numpy` and `boltons` from `sync_editable` test (#10647)
These were introduced in https://github.com/astral-sh/uv/pull/587 but
are now showing up in our slow test list (#878) and we previously pared
down the `poetry_editable` test case dependencies — I think these were
just missed.
2025-01-15 17:33:27 -06:00
Charlie Marsh ee6ba41d46
Add support for `pypy_73`-style tags (#10660)
## Summary

I'm inferring that these are like... the older tag format? See, e.g.:

```
soxbindings-0.0.1-pp27-pypy_73-macosx_10_9_x86_64.whl
soxbindings-0.0.1-pp27-pypy_73-manylinux2010_x86_64.whl
soxbindings-0.0.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl
soxbindings-0.0.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl
```
2025-01-15 23:27:17 +00:00
Charlie Marsh 1c17662b37
Bump version to v0.5.20 (#10659) 2025-01-15 23:18:06 +00:00
Charlie Marsh 64e6e7c4f9
Add `win_ia64` tag (#10658)
## Summary

No practical effect, but it is a valid tag.
2025-01-15 23:14:49 +00:00
Charlie Marsh ed34d37e3c
Avoid failing when deserializing unknown tags (#10655)
## Summary

Closes
https://github.com/astral-sh/uv/issues/10654#issuecomment-2594022975.
2025-01-15 18:03:28 -05:00
Zanie Blue 37e31c38cb
Drop expensive package `boltons` from `tool_uv_sources` test (#10652) 2025-01-15 16:42:30 -06:00
Zanie Blue 3d48e1ea4c
Fix outdated comment in `Cargo.toml` for `performance` feature (#10650)
It really does not look like this turns on self-update
2025-01-15 16:42:24 -06:00
Zanie Blue a7f13e0e0b
Bump version to 0.5.19 (#10643) 2025-01-15 20:56:43 +00:00
Zanie Blue 250b77e972
Avoid reading symlinks during `uv python install` on Windows (#10639)
Closes #10633
2025-01-15 14:17:07 -06:00
Luca Palmieri 1af02ce8f2
Patch embedded install path for Python dylib on macOS during `python install` (#10629)
## Summary

Fixes #10598 

## Test Plan

Looking for input here @zanieb. How/where would you include tests for
this?
More broadly: do we want a failure to perform the rename to be a hard
error? Or should it start out as a warning?

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-01-15 20:11:54 +00:00
Charlie Marsh 04fc36f066
Show target Python version in error messages (#10582)
## Summary

See: https://github.com/astral-sh/uv/pull/10527#discussion_r1913593405

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-01-15 20:08:39 +00:00
Stefan Tatschner 1480f28f93
Silence log message to debug for uv run (#10588)
## Summary

This log message is shown every time a script including a uv
shebang is run. After installing all dependencies, printing this log
message every time does not add any relevant information for the user. I
would say it could even be misleading and motivate the user to debug his
own program searching for this log message.

As a consequence, reduce the log level of this message to debug.

## Test Plan

uv run was called with default settings and the log message didn't show
up.
cargo test was run and I tried to fix the issues.
2025-01-15 13:04:51 -06:00
github-actions[bot] ea0ae5e1c6
Sync latest Python releases (#10637)
See
https://github.com/astral-sh/python-build-standalone/releases/tag/20250115

---------

Co-authored-by: zanieb <2586601+zanieb@users.noreply.github.com>
Co-authored-by: Zanie Blue <contact@zanie.dev>
2025-01-15 12:55:31 -06:00
Taneli Hukkinen ad075c3751
Remove `import re` from entrypoint wrapper scripts (#10627) 2025-01-15 19:45:32 +01:00
Charlie Marsh 0617fd5da6
Omit dynamic versions from the lockfile (#10622)
## Summary

This PR modifies the lockfile to omit versions for source trees that use
`dynamic` versioning, thereby enabling projects to use dynamic
versioning with `uv.lock`.

Prior to this change, dynamic versioning was largely incompatible with
locking, especially for popular tools like `setuptools_scm` -- in that
case, every commit bumps the version, so every commit invalidates the
committed lockfile.

Closes https://github.com/astral-sh/uv/issues/7533.
2025-01-15 11:54:32 -05:00
Charlie Marsh d20a48a5b4
Use `memchr` for wheel parsing (#10620)
## Summary

Before:

```
wheelname_parsing/numpy-compatible
                        time:   [106.90 ns 107.86 ns 108.86 ns]
                        thrpt:  [402.97 MiB/s 406.71 MiB/s 410.39 MiB/s]
                 change:
                        time:   [-4.5360% -3.7694% -2.9179%] (p = 0.00 < 0.05)
                        thrpt:  [+3.0056% +3.9170% +4.7515%]
                        Performance has improved.
wheelname_parsing/flyte-short-incompatible
                        time:   [81.439 ns 82.209 ns 83.015 ns]
                        thrpt:  [390.59 MiB/s 394.42 MiB/s 398.15 MiB/s]
                 change:
                        time:   [+6.2344% +7.5385% +8.8928%] (p = 0.00 < 0.05)
                        thrpt:  [-8.1666% -7.0101% -5.8685%]
                        Performance has regressed.
wheelname_parsing/flyte-short-compatible
                        time:   [78.909 ns 79.456 ns 80.031 ns]
                        thrpt:  [357.49 MiB/s 360.08 MiB/s 362.57 MiB/s]
                 change:
                        time:   [+3.2653% +4.1733% +5.1062%] (p = 0.00 < 0.05)
                        thrpt:  [-4.8582% -4.0061% -3.1620%]
                        Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
wheelname_parsing/flyte-long-incompatible
                        time:   [353.35 ns 357.49 ns 361.77 ns]
                        thrpt:  [340.06 MiB/s 344.13 MiB/s 348.17 MiB/s]
                 change:
                        time:   [+1.4846% +2.0228% +2.6504%] (p = 0.00 < 0.05)
                        thrpt:  [-2.5820% -1.9827% -1.4629%]
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  5 (5.00%) high mild
  5 (5.00%) high severe
wheelname_parsing/flyte-long-compatible
                        time:   [256.47 ns 258.12 ns 260.17 ns]
                        thrpt:  [417.88 MiB/s 421.20 MiB/s 423.90 MiB/s]
                 change:
                        time:   [+0.4079% +1.8252% +3.6270%] (p = 0.02 < 0.05)
                        thrpt:  [-3.5001% -1.7925% -0.4063%]
                        Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe
```

After:

```
wheelname_parsing_fastest/numpy-compatible
                        time:   [61.500 ns 61.904 ns 62.350 ns]
                        thrpt:  [703.60 MiB/s 708.66 MiB/s 713.32 MiB/s]
                 change:
                        time:   [+0.9879% +1.4542% +1.9311%] (p = 0.00 < 0.05)
                        thrpt:  [-1.8945% -1.4334% -0.9782%]
                        Change within noise threshold.
Found 8 outliers among 100 measurements (8.00%)
  6 (6.00%) high mild
  2 (2.00%) high severe
wheelname_parsing_fastest/flyte-short-incompatible
                        time:   [49.341 ns 49.538 ns 49.769 ns]
                        thrpt:  [651.50 MiB/s 654.54 MiB/s 657.16 MiB/s]
                 change:
                        time:   [+5.8750% +6.3656% +6.8338%] (p = 0.00 < 0.05)
                        thrpt:  [-6.3967% -5.9847% -5.5490%]
                        Performance has regressed.
Found 17 outliers among 100 measurements (17.00%)
  5 (5.00%) low severe
  1 (1.00%) low mild
  6 (6.00%) high mild
  5 (5.00%) high severe
wheelname_parsing_fastest/flyte-short-compatible
                        time:   [49.425 ns 49.789 ns 50.193 ns]
                        thrpt:  [570.01 MiB/s 574.63 MiB/s 578.86 MiB/s]
                 change:
                        time:   [+5.1267% +5.7418% +6.3476%] (p = 0.00 < 0.05)
                        thrpt:  [-5.9687% -5.4300% -4.8767%]
                        Performance has regressed.
Found 7 outliers among 100 measurements (7.00%)
  7 (7.00%) high mild
wheelname_parsing_fastest/flyte-long-incompatible
                        time:   [295.81 ns 298.01 ns 301.04 ns]
                        thrpt:  [408.66 MiB/s 412.82 MiB/s 415.89 MiB/s]
                 change:
                        time:   [+0.5553% +1.0842% +1.7059%] (p = 0.00 < 0.05)
                        thrpt:  [-1.6772% -1.0726% -0.5523%]
                        Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
wheelname_parsing_fastest/flyte-long-compatible
                        time:   [214.80 ns 216.10 ns 217.50 ns]
                        thrpt:  [499.87 MiB/s 503.10 MiB/s 506.15 MiB/s]
                 change:
                        time:   [+0.9003% +1.3207% +1.8268%] (p = 0.00 < 0.05)
                        thrpt:  [-1.7940% -1.3035% -0.8923%]
                        Change within noise threshold.
Found 8 outliers among 100 measurements (8.00%)
  7 (7.00%) high mild
  1 (1.00%) high severe
```

(Ignore the percent changes; they're not relative to one another.)

So it's like >40% faster for the small case and >15% faster for the
large case.
2025-01-15 11:39:25 -05:00
Charlie Marsh 82c08b83d9
Make `version` an optional field on installable distribution type (#10623)
## Summary

I previously made this required, but we now need to be able to create
these from a lockfile that _omits_ versions for dynamic source trees.
They should still be present in most cases, but it's best-effort.
2025-01-15 11:31:39 -05:00
Aria Desires 80ac8db7db
Always spawn a main2 thread to normalize main stack size issues (#10479)
Also removes UV_STACK_SIZE and uses RUST_MIN_STACK instead, tweaking
docs to reflect the differences.

Fixes #10367
2025-01-14 22:35:17 -05:00
Charlie Marsh a7fe84aa03
Avoid allocating when stripping source distribution extension (#10625) 2025-01-15 03:29:08 +00:00
Charlie Marsh a49c3f1262
Show resolver hints for packages with markers (#10607)
## Summary

Closes https://github.com/astral-sh/uv/issues/10606.
2025-01-14 13:17:26 -05:00
Charlie Marsh 325b060829
Recommend `--native-tls` on SSL errors (#10605)
## Summary

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

## Test Plan

```
❯ SSL_CERT_FILE=a cargo run pip install flask -n
   Compiling uv v0.5.18 (/Users/crmarsh/workspace/uv/crates/uv)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.33s
     Running `target/debug/uv pip install flask -n`
⠦ Resolving dependencies...                                                                                                                                                                                                                     × Failed to fetch: `https://pypi.org/simple/flask/`
  ├─▶ Request failed after 3 retries
  ├─▶ error sending request for url (https://pypi.org/simple/flask/)
  ├─▶ client error (Connect)
  ╰─▶ invalid peer certificate: UnknownIssuer
  help: Consider enabling native TLS support via the `--native-tls` command-line flag
```
2025-01-14 13:17:19 -05:00
Charlie Marsh e1e9b0447c
Reduce distribution size to 200 bytes (#10601)
## Summary

The last of these optimizations. The limit is now `RegistryBuiltDist`
which includes `sdist: Option<RegistrySourceDist>`.
2025-01-14 11:53:46 -05:00