Commit Graph

4717 Commits

Author SHA1 Message Date
renovate[bot]
ce14207e2e Update Rust crate anyhow to v1.0.93 (#8996) 2024-11-11 02:13:34 +00:00
renovate[bot]
5832076e65 Update Rust crate anstream to v0.6.18 (#8995) 2024-11-11 02:12:27 +00:00
Charlie Marsh
f52bb1b25d Consistent colon usage in build failure errors (#8994) 2024-11-11 02:00:03 +00:00
Charlie Marsh
ac9ce853cf Remove some unused public methods (#8993)
## Summary

Notice these in an unrelated refactor.
2024-11-10 22:55:22 +00:00
Charlie Marsh
744a9091a2 Allow default indexes to be marked as explicit (#8990)
## Summary

Closes https://github.com/astral-sh/uv/issues/8985.
2024-11-10 18:05:39 +00:00
Charlie Marsh
13c3a70ab1 Use [N] in lieu of exact prune counts (#8992)
## Summary

These can seemingly vary.
2024-11-10 12:54:40 -05:00
konsti
874aa29b57 Pin publish test to 3.12 (#8951)
The bump to 3.13 broke the test
2024-11-10 15:43:47 +01:00
konsti
249089c96a Fix prune unzipped snapshot (#8987)
Fixes the tests on main, cause unknown.
2024-11-10 13:52:58 +01:00
Charlie Marsh
a2e90b74bc Avoid creating .venv in uv add --frozen and uv add --no-sync` (#8980)
## Summary

Closes https://github.com/astral-sh/uv/issues/8977.
2024-11-10 02:21:12 +00:00
Charlie Marsh
73ad9f9a07 Remove use of resolution_environment from uv add (#8979)
## Summary

This should only be used in the pip commands; not clear how it ended up
here.
2024-11-10 01:59:00 +00:00
Zanie Blue
dac8c41af6 Some minor copy-edits for the 0.5.0 introduction (#8975) 2024-11-09 11:32:27 -06:00
Mathieu Kniewallner
ecb3e98da0 ci: validate project metadata (#8973)
## Summary

As per https://github.com/astral-sh/uv/pull/8943#discussion_r1835065562,
adding a CI step to validate project metadata. Documentation for the
tool: https://validate-pyproject.readthedocs.io/en/stable/readme.html.
`store` is an extra that uses [this
package](https://github.com/henryiii/validate-pyproject-schema-store) to
get a weekly update of the schema in SchemaStore.

## Test Plan

Step passes on CI, and testing the same command locally while
voluntarily using a wrong classifier fails:
```console
$ uvx --from 'validate-pyproject[all,store]' validate-pyproject pyproject.toml
Invalid file: pyproject.toml
[ERROR] `project.classifiers[5]` must be trove-classifier
```
2024-11-09 08:48:45 -06:00
Charlie Marsh
8a3e5d43e6 Fix references to --resolution-strategy in error message output (#8971)
Closes https://github.com/astral-sh/uv/issues/8967.
2024-11-09 13:54:49 +00:00
Kasper Zutterman
f508ef038c Fix reference to --resolution in docs (#8968)
<!--
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? -->
Update `resolution` to `--resolution`, so it's aligned with the rest of
the resolution documentation, and copy-pastable for usage.

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-11-09 13:43:53 +00:00
Zanie Blue
65e2f955f1 Update uv development status classifier to "Stable" on PyPI (#8943)
Closes https://github.com/astral-sh/uv/issues/8941
2024-11-08 21:21:00 -05:00
Charlie Marsh
363c589f76 Prefer compatible to incompatible distributions when packages exist on multiple indexes (#8961)
## Summary

At time of writing, `markupsafe==3.0.2` exists on the PyTorch index, but
there's
only a single wheel:


`MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl`

Meanwhile, there are a large number of wheels on PyPI for the same
version. If the
user is on Python 3.12, and we return the incompatible PyTorch wheel
without
considering the PyPI wheels, PubGrub will mark 3.0.2 as an incompatible
version,
even though there are compatible wheels on PyPI.

Closes https://github.com/astral-sh/uv/issues/8922.
2024-11-08 19:48:48 -05:00
Charlie Marsh
75c26229a2 Support multiple extras in universal pip compile output (#8960)
## Summary

We were making some incorrect assumptions in the extra-merging code for
universal `pip compile`. This PR corrects those assumptions and adds a
bunch of additional tests.

Closes https://github.com/astral-sh/uv/issues/8915.
2024-11-08 18:22:29 -05:00
Zanie Blue
f399a52719 Bump to 0.5.1 (#8959) 0.5.1 2024-11-08 17:15:28 -06:00
Zanie Blue
7f9ab17577 Upgrade to cargo-dist 0.25.2-prerelease.3 (#8958)
Gets us the upstream fix
(https://github.com/axodotdev/cargo-dist/pull/1538Z) for
https://github.com/axodotdev/axoupdater/issues/210 so we don't need to
patch releases manually for self update to work.

Includes a few other changes, i.e., they validate checksums now.
2024-11-08 17:08:23 -06:00
Zanie Blue
ccfc49e7c8 Move "from PyPI" install message to above the relevant code block (#8906)
A minor follow-up to https://github.com/astral-sh/uv/pull/8853

I also included `pipx`, if anyone is opposed I'm happy to drop it.
2024-11-08 17:06:41 -06:00
Charlie Marsh
b5a3d09958 Respect comma-separated extras in --with (#8946)
## Summary

We need to treat `flask,anyio` as two requirements, but
`psycopg[binary,pool]` as a single requirement.

Closes #8918.
2024-11-08 20:13:30 +00:00
Charlie Marsh
0b5a06194b Compute superset of existing and required hashes when healing cache (#8955)
## Summary

The basic issue here is that `uv add` will compute and store a hash for
each package. But if you later run `uv pip install` _after_ `uv cache
prune --ci`, we need to re-download the source distribution. After
re-downloading, we compare the hashes before and after. But `uv pip
install` doesn't compute any hashes by default. So the hashes "differ"
and we error.

Instead, we need to compute a superset of the already-existing and
newly-requested hashes when performing this re-download. (In practice,
this will always be SHA-256.)

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

## Test Plan

```shell
export UV_CACHE_DIR="$PWD/cache"

rm -rf "$UV_CACHE_DIR" .venv .venv-2 pyproject.toml uv.lock

echo $(uv --version)

uv init --name uv-cache-issue
cargo run add --python 3.13 "pycairo"

uv cache prune --ci

rm -rf .venv .venv-2

uv venv --python python3.11 .venv-2
. .venv-2/bin/activate
cargo run pip install "pycairo"
```
2024-11-08 15:12:15 -05:00
konsti
f29634bbaa Wait longer for index updates in publish test (#8950)
Increasing the timeout for
https://github.com/astral-sh/uv/actions/runs/11745370474/job/32722897436
2024-11-08 16:49:38 +00:00
Mark Ryan
a11d27b502 Allow installation of manylinux wheels on riscv64 (#8934)
<!--
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

auditwheel is capable of generating riscv64 wheels for manylinux_2_31
and above. Here we modify uv-platform-tags so that those wheels can be
installed using uv.

Fixes: #8889

## Test Plan

- ran `cargo nextest run` locally on an x86 machine
- also ran `cargo nextest run` locally on a riscv64 VM but there were a
fair few failures (with and without this patch)
- built a riscv64 uv wheel, installed it on a riscv64 VM and checked
that I could use the newly built version of uv to install
manylinux_2_35_riscv64 wheels.
2024-11-08 16:57:51 +01:00
Charlie Marsh
04c445a3db Respect --index-url in uv pip list (#8942)
## Summary

As an oversight, these arguments weren't being respected from the CLI or
elsewhere -- we always hit PyPI, ignored `--exclude-newer`, etc. It has
to do with the way that the `PipOptions` are setup -- there's a global
struct that we pass around everywhere and fill in with defaults, so
there's no type safety to guarantee that we provide whatever it is we
need to use in the command. The newer APIs are much better about this.

Closes #8927.
2024-11-08 09:52:32 -05:00
Charlie Marsh
0b4e5cffa6 Allow non-registry dependencies in uv pip list --outdated (#8939)
## Summary

Closes https://github.com/astral-sh/uv/issues/8926.
2024-11-08 14:12:25 +00:00
Zanie Blue
7835ce0c4e Fix prune_unzipped test on main (#8938) 2024-11-08 13:40:27 +00:00
Zanie Blue
980d25a801 Remove some missed references to ~/.cargo/bin (#8936) 2024-11-08 07:29:32 -06:00
Zanie Blue
d05297230a Add uninstall note for previous versions (#8937) 2024-11-08 07:28:38 -06:00
Charlie Marsh
0db38844d9 Enable uv to replace and delete itself on Windows (#8914)
## Summary

On Windows, we can't delete the currently-running executable -- at
least, not trivially. But the
[`self_replace`](https://docs.rs/self-replace/latest/self_replace/)
crate can help us here.

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

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

## Test Plan

On my Windows machine:

- `maturin build`
- `python -m venv .venv`
- `.venv/Scripts/activate`
- `pip install /path/to/uv.whl`
- `uv pip install /path/to/uv.whl`
- `uv pip uninstall uv`
2024-11-07 21:57:38 -05:00
Charlie Marsh
9cd51c8a57 Add dedicated cache method for creating build directories (#8910)
## Summary

Based on feedback from
https://github.com/astral-sh/uv/pull/8905/files#r1833531812.
2024-11-08 00:50:55 +00:00
Charlie Marsh
88033610b5 Remove source distribution filename from cache (#8907)
## Summary

In the example outlined in https://github.com/astral-sh/uv/issues/8884,
this removes an unnecessary `jupyter_contrib_nbextensions-0.7.0.tar.gz`
segment (replacing it with `src`), thereby saving 39 characters and
getting that build working on my Windows machine.

This should _not_ require a version bump because we already have logic
in place to "heal" partial cache entries that lack an unzipped
distribution.

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

Closes https://github.com/astral-sh/uv/issues/7376.
2024-11-08 00:50:06 +00:00
Charlie Marsh
8a1b581d07 Build source distributions at top-level of cache (#8905)
## Summary

See: https://github.com/astral-sh/uv/issues/8884. We build in a
directory that's deep within the cache; to help with file name length
limits, we should build at the top-level of the cache.
2024-11-08 00:20:24 +00:00
Carol Willing
705b6cd2a4 [UX] Split README's install code block into 3 (#8853)
- Broke up the large code block into 3 blocks so that copy paste icon
works

Howdy Astral friends! This is a small PR which is a small user
experience improvement for smooth installs.
2024-11-07 18:13:35 -06:00
Zanie Blue
8d665267cd Bump version to 0.5.0 (#8899)
Co-authored-by: Ed Morley <501702+edmorley@users.noreply.github.com>
0.5.0
2024-11-07 22:38:25 +00:00
Zanie Blue
9a04b7fbeb Add project boundary note (#8900) 2024-11-07 15:49:14 -06:00
Zanie Blue
daa929a96e Add docs for .python-version file discovery (#8898) 2024-11-07 14:29:54 -06:00
Zanie Blue
8047d8484a Only write .python-version files during uv init for workspace members if the version differs (#8897)
We'll read these from the workspace root anyway!
2024-11-07 14:29:54 -06:00
Zanie Blue
73cd1c8fd8 Create .python-version files in projects even if one exists outside of it (#8896) 2024-11-07 14:29:54 -06:00
Zanie Blue
c134ac2eab Only report Python pins as updated if its the same file (#8894) 2024-11-07 14:29:54 -06:00
Charlie Marsh
4d760ac1f9 Add dedicated tests for the max local version sentinel (#8869) 2024-11-07 14:29:54 -06:00
Charlie Marsh
a80b6f51b0 Use a + for the visual max local (#8844)
We don't actually want users to see this, but we should be stripping it
anyway. Without this change, we show ranges in the debug logs that look
like `>=1.0.0, <1.0.0`, which is more confusing than helpful. (We may
want to post-process those debug ranges to remove these.)
2024-11-07 14:29:54 -06:00
Charlie Marsh
70f8377928 Incorporate [max] local version into VersionSmall (#8843)
See discussion in https://github.com/astral-sh/uv/pull/8797.
2024-11-07 14:29:54 -06:00
Charlie Marsh
90653e1f5e Remove all special-casing for local version identifiers (#8818)
After https://github.com/astral-sh/uv/pull/8797, we have spec-compliant
handling for local version identifiers and can completely remove all the
special-casing around it.
2024-11-07 14:29:54 -06:00
Eric Mark Martin
c49c7bdf97 Implement PEP 440-compliant local version semantics (#8797)
Implement a full working version of local version semantics. The (AFAIA)
major move towards this was implemented in #2430. This added support
such that the version specifier `torch==2.1.0+cpu` would install
`torch@2.1.0+cpu` and consider `torch@2.1.0+cpu` a valid way to satisfy
the requirement `torch==2.1.0` in further dependency resolution.

In this feature, we more fully support local version semantics. Namely,
we now allow `torch==2.1.0` to install `torch@2.1.0+cpu` regardless of
whether `torch@2.1.0` (no local tag) actually exists.

We do this by adding an internal-only `Max` value to local versions that
compare greater to all other local versions. Then we can translate
`torch==2.1.0` into bounds: greater than 2.1.0 with no local tag and
less than 2.1.0 with the `Max` local tag.

Depends on https://github.com/astral-sh/packse/pull/227.
2024-11-07 14:29:54 -06:00
Zanie Blue
8ef5949294 Discover and respect .python-version files in parent directories (#6370)
Uses #6369 for test coverage.

Updates version file discovery to search up into parent directories.
Also refactors Python request determination to avoid duplicating the
user request / version file / workspace lookup logic in every command
(this supersedes the work started in
https://github.com/astral-sh/uv/pull/6372).

There is a bit of remaining work here, mostly around documentation.
There are some edge-cases where we don't use the refactored request
utility, like `uv build` — I'm not sure how I'm going to handle that yet
as it needs a separate root directory.
2024-11-07 14:29:54 -06:00
Zanie Blue
fb89b64acf Make --allow-insecure-host a global option (#8476)
Not verifying the certificates of certain hosts should be supported for
all kinds of HTTPS connections, so we're making it a global option, just
like native tls. This fixes the remaining places using a client but were
not configuring allow insecure host.

Fixes #6983 (i think)
Closes #6983

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-11-07 14:29:54 -06:00
Charlie Marsh
633467576b Use base executable to set virtualenv Python path (#8481)
See extensive discussion in
https://github.com/astral-sh/uv/pull/8433#issuecomment-2430472849.

This PR brings us into alignment with the standard library by using
`sys._base_executable` rather than canonicalizing the executable path.

The benefits are primarily for Homebrew, where we'll now resolve to
paths like `/opt/homebrew/opt/python@3.12/bin` instead of the
undesirable
`/opt/homebrew/Cellar/python@3.9/3.9.19_1/Frameworks/Python.framework/Versions/3.9/bin`.

Most other users should see no change, though in some cases, nested
virtual environments now have slightly different behavior -- namely,
they _sometimes_ resolve to the virtual environment Python (at least for
Homebrew; not for rtx or uv Pythons though). See
[here](https://docs.google.com/spreadsheets/d/1Vw5ClYEjgrBJJhQiwa3cCenIA1GbcRyudYN9NwQaEcM/edit?gid=0#gid=0)
for a breakdown.

Closes https://github.com/astral-sh/uv/issues/1640.
Closes https://github.com/astral-sh/uv/issues/1795.
2024-11-07 14:29:54 -06:00
Zanie Blue
b6c531f4dd Error when disallowed settings are defined in uv.toml (#8550)
These settings can only be defined in `pyproject.toml`, since they're
project-centric, and not _configuration_.

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

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
Co-authored-by: konsti <konstin@mailbox.org>
2024-11-07 14:29:54 -06:00
Zanie Blue
383d4e774b Use XDG (i.e. ~/.local/bin) instead of the Cargo home directory in the installer (#8420)
Reviving https://github.com/astral-sh/uv/pull/2236

Basically implements https://github.com/axodotdev/cargo-dist/issues/287
2024-11-07 14:29:54 -06:00