Commit Graph

7983 Commits

Author SHA1 Message Date
Zanie Blue 82f96903ba
Fix header level of "Conflicting dependencies" page (#9330) 2024-11-21 11:44:22 -06:00
Zanie Blue 8149e636c3
Add aliases for build backend requests (#9294)
I found it surprising we did not accept names like `hatchling` or
`scikit-build`
2024-11-21 14:51:18 +00:00
Zanie Blue 83c5eae1f3
Avoid referencing `scikit-build` (#9320)
It is different than `scikit-buid-core`
2024-11-21 08:42:47 -06:00
Charlie Marsh b9e9b60232
Remove `Option` from preference marker (#9304)
## Summary

This... _should_ be equivalent?
2024-11-21 09:36:24 -05:00
Charlie Marsh 40844048af
Remove `--upgrade`, `--no-upgrade`, and `--upgrade-package` from `uv tool upgrade` (#9318)
## Summary

`--upgrade` isn't useful, since it's the default. So it's now hidden,
but continues to warn if you enable it.

`--no-upgrade` isn't useful, since it panics. So it's now removed
entirely. This isn't breaking, since it already didn't work.

`--upgrade-package` actually _is_ useful, because it turns out it allows
things like: `uv tool upgrade babel --upgrade-package "babel<0.2.14"` to
constrain the upgrade.

I left this in place but hid it... I think we should provide a better
workflow for this, like `uv tool upgrade "babel<0.2.14"`? It's strange
to specify the package twice, and that `uv tool upgrade` has an
`--upgrade-package` flag.

Closes https://github.com/astral-sh/uv/issues/9317.
2024-11-21 09:35:57 -05:00
Zanie Blue d391961fa5
Touchup the extension module guide (#9293)
Co-authored-by: pantheraleo-7 <159872817+pantheraleo-7@users.noreply.github.com>
2024-11-21 14:24:21 +00:00
konsti de2e9cd0ff
Increase UV_STACK_SIZE to 3MB (#9311)
We're seeing CI failures on windows
2024-11-21 11:46:33 +00:00
Skyler Hawthorne 91c3ebc6f7
Fix Python interpreter discovery on non-glibc hosts (#9005)
## Summary

On Termux, uv currently fails to find any interpreter because it can't
find a glibc version, because there isn't one. But the Python
interpreter is still functional nonetheless.

So, when glibc cannot be found, simply return 0 for the version numbers
and mark the interpreter as being incompatible with manylinux

I really don't know if this is the right way to address this, but I can
attest that manual testing shows uv appears to be fully functional, at
least for pip and virtualenvs.

Fixes #7373

## Test Plan

I tried running the test suite, and after some tweaks, a good portion of
the test suite passes as well. A significant number of tests fail, but
this appears to be due to minor differences in output, like warnings
about hard links not working (hard links are completely disallowed on
Android), differences in the number of files removed, etc. The test
suite seems to be very sensitive to minor variations in output.
2024-11-21 12:35:02 +01:00
konsti e49ecd868d
Improve build backend excludes (#9281)
This PR contains three smaller improvements:
* Improve the include/exclude logging. We're still showing the current
directory as empty backticks, not sure what to do about that
* Add early stopping to license file globbing, so we don't traverse the
whole directory recursively when license files can only be in few places
* Support explicit wheel excludes. These are still not entirely right,
but at least we're correctly excluding compiled python files now. The
next step is to make sure that the wheel excludes contain all pattern
from source dist excludes, to make sure source tree -> wheel can't have
more files than source tree -> source dist -> wheel.
2024-11-21 12:20:29 +01:00
Charlie Marsh 3143494ddb
Make marker enums `Copy` (#9305) 2024-11-21 04:45:25 +00:00
Charlie Marsh 5e48819dbb
Only respect preferences across the same indexes (#9302)
## Summary

The issue here is fairly complex. Consider the following:

```toml
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
dependencies = []

[project.optional-dependencies]
cpu = [
  "torch>=2.5.1",
  "torchvision>=0.20.1",
]
cu124 = [
  "torch>=2.5.1",
  "torchvision>=0.20.1",
]

[tool.uv]
conflicts = [
  [
    { extra = "cpu" },
    { extra = "cu124" },
  ],
]

[tool.uv.sources]
torch = [
  { index = "pytorch-cpu", extra = "cpu", marker = "platform_system != 'Darwin'" },
]
torchvision = [
  { index = "pytorch-cpu", extra = "cpu", marker = "platform_system != 'Darwin'" },
]

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
```

When solving this project, we first pick a PyTorch version from PyPI, to
solve the `cu124` extra, selecting `2.5.1`.

Later, we try to solve the `cpu` extra. In solving that extra, we look
at the PyTorch CPU index. Ideally, we'd select `2.5.1+cpu`... But
`2.5.1` is already a preference. So we choose that.

Now, we only respect preferences for explicit indexes if they came from
the same index.

Closes https://github.com/astral-sh/uv/issues/9295.
2024-11-20 22:26:43 -05:00
Charlie Marsh c6482dd038
Remove dev dependencies in `--all-groups --no-dev` (#9300)
## Summary

Closes https://github.com/astral-sh/uv/issues/9297.
2024-11-20 20:06:05 -05:00
Jon Åslund 98c96b718f
Fix example pyproject.toml in project concept documentation (#9298)
The snippet out of context looks like a valid minimal pyproject.toml
which it is not without name and version. The line worked in layout.md
before when it was just under the minimal config.

---------

Co-authored-by: Zanie Blue <contact@zanie.dev>
2024-11-21 00:39:39 +00:00
Charlie Marsh c62c83c37a
Bump version to v0.5.4 (#9290) 2024-11-20 16:01:24 -05:00
Charlie Marsh 829eed8e35
Strip `--index` and `--default-index` from command header (#9288)
## Summary

The new `--index` and `--default-index` flags are being omitted in the
`uv pip compile` header, unintentionally.

Closes https://github.com/astral-sh/uv/issues/9287.
2024-11-20 19:10:32 +00:00
Charlie Marsh b19ccb6b97
Add a progress bar to `uv tree --outdated` and `uv pip list --outdated` (#9284)
## Summary

Closes https://github.com/astral-sh/uv/issues/9282.
2024-11-20 17:29:57 +00:00
Charlie Marsh a0de83001c
Parallelize network requests in `uv tree --outdated` (#9280)
## Summary

Closes https://github.com/astral-sh/uv/issues/9266.
2024-11-20 16:45:14 +00:00
Jo 23cc9b0322
Add `--all-groups` to `uv sync|run|export|tree` (#8892)
## Summary

Closes #8594

---------

Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-11-20 16:07:36 +00:00
Charlie Marsh 2ed180ea6b
Accept either singular or plural for CLI constraints (#9196)
## Summary

I find myself messing this up with `--build-constraint` vs.
`--build-constraints`, and it turns out our own CLI isn't fully
consistent here either.
2024-11-20 15:31:23 +00:00
konsti 2f5a64a8b3
Unify cargo features (#9267)
When building only a single crate in the workspace to run its tests, we
often recompile a lot of other, unrelated crates. Whenever cargo has a
different set of crate features, it needs to recompile. By moving some
features (non-exhaustive for now) to the workspace level, we always
activate them an avoid recompiling.

The cargo docs mismatch the behavior of cargo around default-deps, so I
filed that upstream and left most `default-features` mismatches:
https://github.com/rust-lang/cargo/issues/14841.

Reference script:

```python
import tomllib
from collections import defaultdict
from pathlib import Path

uv = Path("/home/konsti/projects/uv")
skip_list = ["uv-trampoline", "uv-dev", "uv-performance-flate2-backend", "uv-performance-memory-allocator"]

root_feature_map = defaultdict(set)
root_default_features = defaultdict(bool)
cargo_toml = tomllib.loads(uv.joinpath("Cargo.toml").read_text())
for dep, declaration in cargo_toml["workspace"]["dependencies"].items():
    root_default_features[dep] = root_default_features[dep] or declaration.get("default-features", True)
    root_feature_map[dep].update(declaration.get("features", []))

feature_map = defaultdict(set)
default_features = defaultdict(bool)
for crate in uv.joinpath("crates").iterdir():
    if crate.name in skip_list:
        continue
    if not crate.joinpath("Cargo.toml").is_file():
        continue
    cargo_toml = tomllib.loads(crate.joinpath("Cargo.toml").read_text())
    for dep, declaration in cargo_toml.get("dependencies", {}).items():
        # If any item uses default features, they are used everywhere
        default_features[dep] = default_features[dep] or declaration.get("default-features", True)
        feature_map[dep].update(declaration.get("features", []))

for dep, features in sorted(feature_map.items()):
    features = features - root_feature_map.get(dep, set())
    if not features and default_features[dep] == root_default_features[dep]:
        continue
    print(dep, default_features[dep], sorted(features))
```
2024-11-20 16:11:24 +01:00
Charlie Marsh 8ca8de8eaa
Use exponential backoff for publish retries (#9276)
## Summary

Just trying to unify the retry handling, as in
https://github.com/astral-sh/uv/pull/9274 and elsewhere. Right now, the
publish handler doesn't use any backoff and always retries three times
regardless of settings.
2024-11-20 15:02:33 +00:00
Zanie Blue 110c38e549
Improve the project creation documentation (#9236) 2024-11-20 08:50:14 -06:00
Zanie Blue 4f65a69ebf
Move the integration guides into the "Guides" section as a collapsed group (#9245)
Let's have all the guides together!
2024-11-20 08:50:02 -06:00
Zanie Blue 20eccc157c
Improve content on project configuration (#9235) 2024-11-20 08:49:51 -06:00
Charlie Marsh 1b13036674
Add retries for Python downloads (#9274)
## Summary

This uses the same approach as in the rest of uv, but with another
dedicated method for retries.

Closes https://github.com/astral-sh/uv/issues/8525.
2024-11-20 09:42:42 -05:00
Charlie Marsh 289771e311
Avoid validating extra and group sources in `build-system.requires` (#9273)
## Summary

This was an oversight in the initial implementation. We shouldn't
validate sources for the `build-system.requires` field, since extras and
groups can _never_ be active.

Closes https://github.com/astral-sh/uv/issues/9259.
2024-11-20 09:05:50 -05:00
Charlie Marsh ccc0962cbd
Use `zlib-rs` on all platforms (#9264) 2024-11-20 00:01:58 -05:00
Zanie Blue dab55dddde
Watch for changes to the template file during documentation serve (#9244)
Fixes this really annoying behavior where the served documentation would
not reflect changes to the mkdocs template file (where we store all of
our actual configuration)

ref https://github.com/mkdocs/mkdocs/pull/2642
2024-11-19 22:39:38 -06:00
Zanie Blue 78df14e7a8
Add support for anchor redirects with client-side js (#9212)
The redirect plugin doesn't support this, and it's not feasible to do
server-side so we need to do the redirect client-side with some
javascript.
2024-11-19 22:32:43 -06:00
Zanie Blue 2ff705fba0
Add breadcrumbs to the documentation (#9242)
<img width="815" alt="Screenshot 2024-11-19 at 2 10 10 PM"
src="https://github.com/user-attachments/assets/49e645d2-1648-40b4-8bb4-ba5d6545a353">
<img width="815" alt="Screenshot 2024-11-19 at 2 10 25 PM"
src="https://github.com/user-attachments/assets/854d7bee-dc16-4429-ae11-789f50d1c6a4">
2024-11-19 22:31:43 -06:00
Ben Beasley 80ab562f9f
In uv-globfilter, use the workspace fs-err in dev-dependencies (#9262)
<!--
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

In uv-globfilter, use the workspace `fs-err` in `dev-dependencies`.

This fixes an unnecessary dev-dependency on `fs-err` 2.x even after the
workspace fs-err was updated to 3.x in
https://github.com/astral-sh/uv/pull/8625.

The `Cargo.lock` file still has `fs-err v2.11.0` after this PR, but it
is via `tracing-durations-export v0.3.0` rather than directly required
by any `uv` crate.

## Test Plan

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

```
$ cd crates/uv-globfilter/
$ cargo test
```
2024-11-20 03:59:37 +00:00
Zanie Blue 7c4c15b879
Add trace logs to `is_extended_transient_error` (#9248)
Co-authored-by: Charlie Marsh <charlie.r.marsh@gmail.com>
2024-11-19 22:24:05 -05:00
Charlie Marsh f4799d2346
Add dedicated warning for empty stdin (#9256)
## Summary

I ran into this in practice:

![Screenshot 2024-11-19 at 4 20
37 PM](https://github.com/user-attachments/assets/d89aa9f1-828a-492e-af5a-3434e277580e)
2024-11-19 17:52:41 -05:00
Charlie Marsh 9fb7f81738
Catch retries with wrapped `reqwest` errors (#9253)
## Summary

It turns out that `WrappedReqwestError` skips the `reqwest::Error`
itself in order to hack the display. This PR adds it to the list of
variants we check when retrying transient errors.

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


## Test Plan

Patched `reqwest` locally to return an error in `bytes()`. Verified that
it was _not_ caught prior to this PR, but was caught afterwards.
2024-11-19 17:08:48 -05:00
konsti 8e0389e2fd
Build backend: Build editable (#9230)
Support for editable installs. This is a simple PEP 660 implementation.
2024-11-19 21:52:11 +00:00
konsti 0913382aa5
Better WrappedReqwestError docs (#9251)
Document the hack with which we insert a hint message for offline cases.
2024-11-19 16:51:58 -05:00
Charlie Marsh c188b11b0a
Fix typo in PyTorch docs (#9249)
## Summary

Raised at https://x.com/stefanofusai/status/1858981714942718163/photo/1.
2024-11-19 15:41:30 -06:00
Charlie Marsh b09d5fcdd9
Add minimum version to PyTorch guide (#9247)
## Summary

Closes https://github.com/astral-sh/uv/issues/9224.
2024-11-19 15:21:43 -06:00
Zanie Blue 6eeb515a8a
Use larger runners for bottleneck builds of release artifacts (#9239)
Uses a different runner for builds that take >15m.

Most of the builds finish in ~10 minutes.
2024-11-19 14:35:59 -06:00
Ed Morley 62e0ee7f67
Fix grammar in missing platform marker error message (#9240)
`s/a platform markers/a platform marker/`
2024-11-19 20:03:52 +00:00
Ahmed Ilyas 0454c3b3ec
Sort hashes in `uv export` output (#9237)
## Summary

Closes #9225 

## Test Plan

`cargo test`
2024-11-19 19:54:27 +00:00
Zanie Blue 189cf6ead2
Use the full screen height for the main content to stabilize the nav (#9153)
On large screens, we require scrolling below the fold for the next page
/ prev page navigation footer. This dramatically improves visibility of
the left nav when looking at small pages like section overviews.
Critically, this stops the height of the navigation from jumping around
depending on the page you're on. On small screens, the positioning is
unchanged since the nav is in a hamburger menu and it'd be annoying to
scroll.

Eventually, we could move the next / prev nav out of the footer and into
the content, e.g., as in
https://github.com/astral-sh/uv/pull/9121#issuecomment-2479282706.

These images don't quite do the change in experience justice. It's the
consistency when changing pages that feels the most different.

Before

<img width="1484" alt="Screenshot 2024-11-15 at 10 16 30 AM"
src="https://github.com/user-attachments/assets/e0729691-31ea-46cc-9679-636fb144eab7">

After

<img width="1474" alt="Screenshot 2024-11-15 at 10 15 26 AM"
src="https://github.com/user-attachments/assets/d01ae5cd-1347-45de-a294-fbd56b2d6fb5">
2024-11-19 19:53:25 +00:00
Zanie Blue ca9aaf1c48
Reorganize the project concept documentation (#9121)
- Adds a collapsible section for the project concept
- Splits the project concept document into several child documents.
- Moves the workspace and dependencies documents to under the project
section
- Adds a mkdocs plugin for redirects, so links to the moved documents
still work

I attempted to make the minimum required changes to the contents of the
documents here. There is a lot of room for improvement on the content of
each new child document. For review purposes, I want to do that work
separately. I'd prefer if the review focused on this structure and idea
rather than the content of the files.

I expect to do this to other documentation pages that would otherwise be
very nested.

The project concept landing page and nav (collapsed by default) looks
like this now:

<img width="1507" alt="Screenshot 2024-11-14 at 11 28 45 AM"
src="https://github.com/user-attachments/assets/88288b09-8463-49d4-84ba-ee27144b62a5">
2024-11-19 13:52:12 -06:00
Charlie Marsh 45eeae61ff
Use existing index field in PEP 723 scripts (#9238)
## Summary

Purely internal, this setting already exists.
2024-11-19 14:45:12 -05:00
Hristo Filaretov f49230471c
Add manylinux target triples up to glibc 2.40 (#9234)
<!--
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? -->

PR #4965 added `*-manylinux_2_31` as a target triple, and issue #4966
described the need for a more general solution.

In lieu of a general solution, this PR adds further explicit manylinux
target triples for different glibc version up to the one used by the
latest Ubuntu release (glibc 2.40 used in Ubuntu 24.10).

## Test Plan

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

Local, manual testing with a Python wheel targeting
`x86_64-manylinux_2_35`.
2024-11-19 14:37:43 -05:00
Charlie Marsh 56d3622087
Bump version to v0.5.3 (#9229) 2024-11-19 18:53:54 +00:00
renovate[bot] dae630ae50
Update Rust crate fs-err to v3 (#8625) 2024-11-19 15:09:00 +00:00
konsti 07806c404a
Update generate-all (#9223) 2024-11-19 12:45:30 +00:00
konsti 6d5c708082
Typo (#9222) 2024-11-19 12:01:17 +00:00
konsti 9460398371
Build backend: Support data files (#9197)
Allow including data files in wheels, configured through
`pyproject.toml`. This configuration is currently only read in the build
backend. We'd only start using it in the frontend when we're adding a
fast path.

Each data entry is a directory, whose contents are copied to the
matching directory in the wheel in
`<name>-<version>.data/(purelib|platlib|headers|scripts|data)`. Upon
installation, this data is moved to its target location, as defined by
<https://docs.python.org/3.12/library/sysconfig.html#installation-paths>:
- `data`: Installed over the virtualenv environment root. Warning: This
may override existing files!
- `scripts`: Installed to the directory for executables, `<venv>/bin` on
Unix or `<venv>\Scripts` on Windows. This directory is added to PATH
when the virtual environment is activated or when using `uv run`, so
this data type can be used to install additional binaries. Consider
using `project.scripts` instead for starting Python code.
- `headers`: Installed to the include directory, where compilers
building Python packages with this package as built requirement will
search for header files.
- `purelib` and `platlib`: Installed to the `site-packages` directory.
It is not recommended to uses these two options.

For simplicity, for now we're just defining a directory to be copied for
each data directory, while using the glob based include mechanism in the
background. We thereby introduce a third mechanism next to the main
includes and the PEP 639 mechanism, which is not what we should finalize
on.
2024-11-19 12:59:59 +01:00