### Summary The new `--active` flag (#11189) is a great addition and I think it goes some way to allow `uv` and `pyenv` to work better together (see #6204). Would it be possible to add a new environment variable to make that flag the default? For example, the PR suggested something like `UV_PROJECT_ENVIRONMENT=ACTIVE` but could also be `UV_ACTIVE=1`. Or mayb
### Summary I was a little surprised/confused when migrating to `uv` that the default `uv sync` did not enforce that the project was synced exactly to `uv.lock` or else error if not. When reading through the docs, I found some references to `--frozen` - https://docs.astral.sh/uv/guides/integration/docker/#installing-a-project And then other references that u
### Summary My team would like to leverage uv in a similar way to pip, one of the important pieces for us is to append additional information in our user agent for internal tracking. uv does not yet support this, like `pip` does. I would like to see uv have this functionality to maintain parity with pip. per https://pip.pypa.io/en/stable/user_guide/#using-a-
## Summary Prior to this change, extracted wheels were persisted in `archive-v0` under randomly generated IDs. As a result, we might store the same wheel multiple times when reached through different cache entries. We now compute a deterministic directory hash while extracting ZIP wheels and use a 24-character, lowercase base-36 encoding as the archive ID. T
### Summary A `--find-links` line with a relative path inside a requirements.in/requirements.txt file fails to resolve, regardless of whether the path has a `./` prefix, no prefix, or is passed to `uv pip compile` or `uv pip install -r`: ``` error: Invalid URL in `requirements.in` at position N: `./private_wheels/` Caused by: relative URL without a base ```
### Summary i have an issue with PEP 723, when you have a blank space at the end of the `# ///` `uv` doesn't properly parse the closing tag. it tells you that there is an error: ``` error: An opening tag (`# /// script`) was found without a closing tag (`# ///`). Ensure that every line between the opening and closing tags (including empty lines) starts with
### Summary I'm reporting this as a bug because I see this as an unexpected behavior. The introduction of `--system-certs` introduces an impossible to solve migration dilemma for our use cases. We have: - uv latest version globally installed - uv in pinned virtual environments for reproducibility with different versions - one global uv.toml for both cases So
### Summary My company has a private package index that I can only access when on the network. To accommodate scenarios where I am offsite and not on VPN, I have the following entry in my user pip.ini. ``` [install] extra-index-url = <https://pipindex.company.com> retries = 0 ``` Could something equivalent be implemented for uv? It's pretty handy for seamles
### Summary uv tree do not respect the `--group` arg ```toml [dependency-groups] dev = [ "ruff==0.16.2", ] airflow = [ "a2wsgi==1.10.10", "aiofiles==25.1.0", "aiohappyeyeballs==2.7.1", ... ] ``` running ```shell uv tree --group airflow --depth 1 ``` it show all dependencies of the groups airflow and dev ### Platform Linux 7.0.0-28-generic x86_64 GNU/Linux ##
### Summary Since uv 0.10.10 (PR #18176), relative path dependencies declared in `[tool.uv.sources]` are written as absolute paths in `uv.lock`. This makes lockfiles non-portable across machines and unsuitable for version control. I'm using this in a monorepo-style repository where I do not want a shared workspace or workspace-level lockfile because our CI/C
### Summary `uv run --project <dir> <console-script>` can execute the console-script file physically sitting in a **different, unrelated, already-deleted** project checkout's `.venv/bin/` instead of the requested project's own — because a stale `Interpreter` query result for that other checkout got cached (apparently keyed correctly, since the cache key is `
### Summary I frequently work with Python projects where uv is locked by [mise](https://mise.jdx.dev/). A dummy project with mise + uv + configuration scaffolding is [here](https://github.com/manselmi/yospos). Given that 1. [mise locks the uv version](https://github.com/manselmi/yospos/blob/019a251385da23e3ad74254141e156d627ae4074/mise.lock#L22-L42), and 2.
### Summary I tried using uv with an old project that creates its own venv using a python version that isn't the system deafult python. The system default /usr/bin/python3, used by default by uv, is python3.9 ```sh % uv run python --version Python 3.9.25 ``` `uv run --with some_dependency` breaks inside venvs that use a different python. Minimal reproduction
### Summary When `.venv` folder exists, not empty, and not considered a virtual environment by `uv`, `uv lock` will fail to find a suitable python executable to use and raise an error. I have the following folder structure for managing multiple virtual environments of different python versions for a specific project. They are all created from `uv venv -p <ve
### Summary I have a `pyproject.toml` file that has an author field that looks like this: ```toml [project] # ... author = [{name = "rzuckerm"}] # ... ``` The above is allowed in TOML 1.0 since I can load my `pyproject.toml` file using the old [toml](https://pypi.org/project/toml) package, and that package only supports TOML 1.0. However, when I do `uv build
### Summary My project has extension modules that are heavy to build and require external non-Python dependencies. I do have *.pyi files for these extensions. I've setup `ty` such that I can install Python dependencies in .venv with `uv sync --no-install-project` and run `ty check` afterwards. I would like to use `astral-sh/ty-pre-commit` hook, however I can
## Summary Implement #13974. This PR makes `uv ... --index name` attempt to look up the index by name in filesystem configuration (workspace `pyproject.toml` or adjacent `uv.toml` (for project commands), then user config, then system config). The only difference is that the index will be passed with `explicit` and `default` set to `false` for that invocation
### Summary When running the command `uv version --bump foo` with an invalid argument to the `--bump` option an error occurs. Unfortunately the error does not seem to be formatted or printed the same way as most other errors. As of `v0.12.3` of `uv` the error messages lack color and a newline character at the end, resulting in a misformatted terminal prompt.
## Summary Relative local indexes declared in a PEP 723 script are resolved against the directory where `uv run` is invoked, rather than the directory containing the script. So the same script can work when ran from its own directory but fail when ran by path from somewhere else ## Reproduction ```console $ tmpdir="$(mktemp -d)" $ mkdir -p "$tmpdir/scripts/l
> ℹ️ **Note** > > This PR body was truncated due to platform limits. This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.<br>[View this repository on the Mend.io Web Portal](https://developer.mend.io/github/astral-sh/uv). ## Abandoned Dependencie
## Summary That behavior is actually problematic. Neither pypa `virtualenv` nor cpython `venv` does it anymore. `platlibdir` directory will be created if necessary based on sysconfig. ## Test Plan Added to `crates/uv/tests/python/venv.rs`.
## Summary This adds a new `cargo dev coverage` subcommand, which invokes nextest under our new coverage pesudo-profile. This profile in turn enables `-C instrument-coverage`. `cargo dev coverage` also takes care of merging raw profiling samples into profdata and LCOV reports for us, which our new `coverage-html-report.py` script can turn into a readable (bu
## Summary Closes #10918. When a PEP 723 block is closed with `# ///` that has trailing whitespace (e.g. `# /// `), uv can't find the closing tag and returns the generic "opening tag without a closing tag" error, which doesn't point at the real cause. Per the discussion on the issue, we still want to reject trailing whitespace to stay consistent with the PEP
Publishing smoke tests can fail when TestPyPI briefly serves inconsistent simple-index responses after an upload. `wait_for_index` previously accepted the first response containing both artifacts, while concurrent runs could also make its unpinned lookup select a newer release. Resolve the exact uploaded version, require consecutive refreshed index responses
`uv lock` fails when `.venv` is a non-empty directory without a Python executable, even though locking only needs an interpreter. Ignore unusable project environments during interpreter discovery while preserving validation before creating an environment, so `uv sync` still refuses to replace unrelated directories. Fixes astral-sh/uv#19832; stacked on astral
Stacked pull request bases can advance while a conflicted pull request is being rebased, causing the isolated publisher to reject its artifact even though the ancestry guard is behaving correctly. Record the exact base commit used for the rebase and skip artifacts when that base changes before import, preserving the existing ancestry check and avoiding token
`PYTHONEXECUTABLE` changes the interpreter metadata reported for a requested Python executable, but the interpreter cache currently ignores that override. Reproduce the resulting cache pollution directly with `uv python find`: after the override is removed, looking up the same executable still returns the overridden interpreter. The relationship to astral-sh
`uv sync --no-editable` leaves local projects and workspace members stale after source-only changes because their cached wheels are keyed only by build metadata. Capture the existing behavior for both reused and fresh environments in a regression test for astral-sh/uv#15224.
The existing interpreter-cache invalidation test reports a `sys.executable` that does not match its mock executable, so interpreter metadata is never cached and the test passes without exercising cache reuse or invalidation. Point the fixture at the actual mock executable and assert that interpreter metadata is cached, reused without another interpreter quer
## Summary Prior to this change, content-addressed wheel archives could only deduplicate complete extracted trees. Different wheels containing the same native library still stored separate copies of that `.so`, `.pyd`, `.dll`, or `.dylib` payload in each archive. This PR moves native library payloads into a separate content-addressed `archive-files-v0` bucke
## Summary Fixes #20672. Lookahead previously skipped registry-form requirements such as `target[feature]`, even when the same package was already associated with a path source. As a result, dependencies exposed only by the transitive extra were not visited and were later rejected as undeclared URL dependencies. The fix tracks known non-registry sources by p
## Summary - Reject conflicts between a package and one of its own extras, since selecting the extra always selects the package too. - Check this during conflict validation, before resolution starts or a lockfile is written. - Remove `lock_conflicting_workspace_members_depends_direct_extra`. It used this exact conflict as a resolver workaround, so its lock a
An unbounded `uv_build` requirement currently triggers a warning while building wheels, editable wheels, and metadata even though those artifacts do not distribute build-system requirements. Restrict the missing-upper-bound warning to source-distribution build. I think our warning here is a bit overzealous for people who do not intend to distribute a source
## Summary This PR enables PGO for uv releases, starting with Linux x86-64. ### Design The release pipeline is modified as follows: - We build instrumented `uv` and `uvx` release binaries inside the existing manylinux container. - We train directly on eleven shared `test/ecosystem` fixtures: cibuildwheel, Cookiecutter, Flask, HTTPX, LLM, the OpenAI Python SD
## Summary This PR enables PGO for uv's Windows x86-64 releases, following the approach outlined in https://github.com/astral-sh/uv/pull/21001. The existing static-CRT configuration is preserved.
## Summary This PR enables PGO for uv's Linux ARM64 releases, following the approach outlined in https://github.com/astral-sh/uv/pull/21001. (To enable PGO, we also move to a native ARM64 runner.)
Changing requirements-file `--find-links` URL parsing to improve missing-directory errors can break two uncommon but currently supported inputs: uppercase URL schemes such as `FILE://` and `HTTP://`, and existing local directories whose names resemble URL schemes, such as `https:links`. Cover both classifications before changing the diagnostic. See astral-sh
Interpreter metadata can remain stale when a Python launcher loads a different `libpython` without its executable timestamp changing. For a project without an existing environment, the first `uv run` can select the stale cached base interpreter, create `.venv` with incorrect `pyvenv.cfg` metadata, and evaluate `requires-python` against the wrong Python versi
`PYTHONEXECUTABLE` and `__PYVENV_LAUNCHER__` can change the executable and virtual environment reported by a Python interpreter, but interpreter metadata was cached using only the absolute and canonical paths of the requested executable. Include both launcher overrides in the interpreter cache key so metadata from one launcher context cannot be reused in ano
Invalid `uv version --bump` values currently produce unstyled errors without a trailing newline. The custom parser introduced in astral-sh/uv#16555 returned raw, unformatted `clap` errors; construct command-aware errors instead so malformed bump values use the standard styling, usage guidance, and line termination. Fixes astral-sh/uv#21063.
This extends our automations for issue triage to take reproducible bugs with a regression-test and attempt to generate a PR fixing the issue. - Context from the issue triage and reproduction are carried over into the job to attempt to fix the bug - The issue branch is updated with details on the fix attempt and result - If a fix is proposed, a draft PR is op
## Summary Previously, uv tracked Git metadata incorrectly in several cases: - Linked worktrees watched their entire worktree metadata directory, so staging an unrelated file invalidated the build even when the commit had not changed. - Branch references updated outside the worktree were not watched, potentially leaving embedded commit hashes, dates, tags, a