Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatically install Python version needed for tool #7827

Closed
wants to merge 6 commits into from
Closed

Automatically install Python version needed for tool #7827

wants to merge 6 commits into from

Conversation

tfsingh
Copy link
Contributor

@tfsingh tfsingh commented Oct 1, 2024

This PR adds support for automatically installing the Python version required for a given tool, should it not already be installed.

(Tests I added fails, working on it)

Closes #6381

@tfsingh
Copy link
Contributor Author

tfsingh commented Oct 1, 2024

@zanieb Is there precedent for installing Python versions via an override of UV_PYTHON_DOWNLOADS/UV_PYTHON_PREFERENCE in tests? I think it might be unnecessary to write formal tests for this as it's more of an enhancement, and a test that does a Python installation might worsen already long CI times. What do you think?

@zanieb
Copy link
Member

zanieb commented Oct 1, 2024

Yeah we need to figure out a testing strategy for that but haven't yet. The idea is to setup UV_PYTHON_INSTALL_MIRROR to a local cache of fake interpreters or something.

@tfsingh
Copy link
Contributor Author

tfsingh commented Oct 1, 2024

Got it, that makes a lot of sense — thanks again for the feedback!

@tfsingh tfsingh marked this pull request as ready for review October 1, 2024 22:00
@tfsingh tfsingh requested a review from zanieb October 1, 2024 22:34
@tfsingh tfsingh closed this by deleting the head repository Dec 2, 2024
charliermarsh added a commit that referenced this pull request Jan 8, 2025
## Summary

This PR revives #7827 to improve
tool resolutions such that, if the resolution fails, and the selected
interpreter doesn't match the required Python version from the solve, we
attempt to re-solve with a newly-discovered interpreter that _does_
match the required Python version.

For now, we attempt to choose a Python interpreter that's greater than
the inferred `requires-python`, but compatible with the same Python
minor. This helps avoid successive failures for cases like Posting,
where choosing Python 3.13 fails because it has a dependency that lacks
source distributions and doesn't publish any Python 3.13 wheels. We
should further improve the strategy to solve _that_ case too, but this
is at least the more conservative option...

In short, if you do `uv tool instal posting`, and we find Python 3.8 on
your machine, we'll detect that `requires-python: >=3.11`, then search
for the latest Python 3.11 interpreter and re-resolve.

Closes #6381.
Closes #10282.

## Test Plan

The following should succeed:

```
cargo run python uninstall --all
cargo run python install 3.8
cargo run tool install posting
```

In the logs, we see:

```
...
DEBUG No compatible version found for: posting
DEBUG Refining interpreter with: Python >=3.11, <3.12
DEBUG Searching for Python >=3.11, <3.12 in managed installations or search path
DEBUG Searching for managed installations at `/Users/crmarsh/.local/share/uv/python`
DEBUG Skipping incompatible managed installation `cpython-3.8.20-macos-aarch64-none`
DEBUG Found `cpython-3.13.1-macos-aarch64-none` at `/opt/homebrew/bin/python3` (search path)
DEBUG Skipping interpreter at `/opt/homebrew/opt/python@3.13/bin/python3.13` from search path: does not satisfy request `>=3.11, <3.12`
DEBUG Found `cpython-3.11.7-macos-aarch64-none` at `/opt/homebrew/bin/python3.11` (search path)
DEBUG Re-resolving with Python 3.11.7
DEBUG Using request timeout of 30s
DEBUG Solving with installed Python version: 3.11.7
DEBUG Solving with target Python version: >=3.11.7
DEBUG Adding direct dependency: posting*
DEBUG Searching for a compatible version of posting (*)
...
```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

uv tool install posting failed with Python version conflict
2 participants