Skip to content

Disable transparent Python upgrades in projects when a patch version is requested via .python-version#19102

Merged
zanieb merged 2 commits intoastral-sh:mainfrom
zaniebot:claude/fix-uv-issue-19100-48OrI
Apr 21, 2026
Merged

Disable transparent Python upgrades in projects when a patch version is requested via .python-version#19102
zanieb merged 2 commits intoastral-sh:mainfrom
zaniebot:claude/fix-uv-issue-19100-48OrI

Conversation

@zanieb
Copy link
Copy Markdown
Member

@zanieb zanieb commented Apr 21, 2026

Fixes #19100

This was an underlying bug surfaced outside of preview by #18961

We were not computing the resolved Python version request, so we were not taking into account .python-version values.

@zanieb zanieb changed the title Disable transparent Python upgrades in projects when a patch version is requested Disable transparent Python upgrades in projects when a patch version is requested via .python-version Apr 21, 2026
Comment thread crates/uv/src/commands/project/mod.rs Outdated
zanieb added a commit that referenced this pull request Apr 21, 2026
…er` (#19103)

Claude actually did fine on the commit here ("hoist" is my new favorite
refactor term)

> `ProjectInterpreter::discover` previously called
`WorkspacePython::from_request`
internally, so `ProjectEnvironment::get_or_init` had to either resolve
the
request a second time to decide upgradeability or accept a stale check
against
the CLI argument only.
> 
> Make callers resolve `WorkspacePython` once and pass it in. `discover`
now takes
the resolved struct directly and no longer needs `project_dir` or
`no_config`.

Needed for
#19102 (comment)

Co-authored-by: Claude <noreply@anthropic.com>
@zanieb zanieb force-pushed the claude/fix-uv-issue-19100-48OrI branch from be58c7a to 9f853b8 Compare April 21, 2026 17:46
Comment thread crates/uv/src/commands/project/mod.rs Outdated
When creating a new project virtual environment, `ProjectEnvironment::get_or_init`
checked whether the user requested a specific patch version only against the
`--python` CLI argument. A patch version pinned via `.python-version` (or
`requires-python`) was ignored, so the resulting venv was always marked
upgradeable and symlinked to the mutable minor-version directory. A subsequent
`uv python install` of a newer patch then silently upgraded the environment.

Resolve the effective Python request via `WorkspacePython::from_request` before
determining upgradeability, matching the logic already used in `uv venv`.

Fixes astral-sh#19100.
@zanieb zanieb force-pushed the claude/fix-uv-issue-19100-48OrI branch from 9f853b8 to 23f71bc Compare April 21, 2026 18:30
Comment thread crates/uv/src/commands/project/mod.rs Outdated
@zanieb zanieb marked this pull request as ready for review April 21, 2026 18:32
@zanieb zanieb enabled auto-merge (squash) April 21, 2026 18:32
)?;

// Install an earlier patch version
uv_snapshot!(context.filters(), context.python_install().arg("3.10.17"), @r"
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible to reuse a version here to avoid downloading and installing another version?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What do you mean by reuse? It requires a managed install operation to cover the transparent upgrade behavior.

@zanieb zanieb disabled auto-merge April 21, 2026 18:37
@zanieb zanieb enabled auto-merge (squash) April 21, 2026 18:39
@zanieb zanieb merged commit 1f749a1 into astral-sh:main Apr 21, 2026
53 checks passed
@zsol zsol added the bug Something isn't working label Apr 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

uv python pin does not successfully pin you to a patch version

4 participants