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

Use a stable directory for (local) script virtual environments #11347

Merged
merged 1 commit into from
Feb 12, 2025

Conversation

charliermarsh
Copy link
Member

Summary

Today, scripts use CachedEnvironment, which results in a different virtual environment path every time the interpreter changes or the project requirements change. This makes it impossible to provide users with a stable path to the script that they can use for (e.g.) directing their editor.

This PR modifies uv run to use a stable path for local scripts (we continue to use CachedEnvironment for remote scripts and scripts from stdin). The logic now looks a lot more like it does for projects: we get_or_init an environment, etc.

For now, the path to the script is like: environments-v1/4485801245a4732f, where 4485801245a4732f is a SHA of the absolute path to the script. But I'm not picky on that :)

@charliermarsh charliermarsh added the enhancement New feature or improvement to existing functionality label Feb 9, 2025
@charliermarsh charliermarsh marked this pull request as draft February 9, 2025 02:47
@charliermarsh
Copy link
Member Author

As a second PR, I'll add uv sync --script using these stable paths.

@charliermarsh charliermarsh force-pushed the charlie/stable-dir branch 4 times, most recently from c4b7d7c to 8e6f8ed Compare February 9, 2025 03:21
@charliermarsh charliermarsh marked this pull request as ready for review February 9, 2025 03:21
@charliermarsh charliermarsh force-pushed the charlie/stable-dir branch 4 times, most recently from f91124d to 8614745 Compare February 12, 2025 00:29
@charliermarsh charliermarsh enabled auto-merge (squash) February 12, 2025 00:37
@charliermarsh charliermarsh merged commit 79ad7a1 into main Feb 12, 2025
73 checks passed
@charliermarsh charliermarsh deleted the charlie/stable-dir branch February 12, 2025 00:45
charliermarsh added a commit that referenced this pull request Feb 12, 2025

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
## Summary

This is a follow-on to #11347 to use a stable directory for remote and
stdin scripts. The annoying piece here was figuring out what to use as
the cache key. For remote scripts, I'm using the URL; for stdin scripts,
there isn't any identifying information, so I'm just using a hash of the
metadata.
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Feb 13, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.5.30` -> `0.5.31` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.5.31`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0531)

[Compare Source](astral-sh/uv@0.5.30...0.5.31)

##### Enhancements

-   Add `uv sync --script` ([#&#8203;11361](astral-sh/uv#11361))
-   Allow PEP 508 requirements in tool requests ([#&#8203;11337](astral-sh/uv#11337))
-   Allow source distributions to produce wheels with `+local` suffixes ([#&#8203;11429](astral-sh/uv#11429))
-   Bring parity to `uvx` and `uv tool install` requests ([#&#8203;11345](astral-sh/uv#11345))
-   Use a stable directory for local, remote, and stdin script virtual environments ([#&#8203;11347](astral-sh/uv#11347), [#&#8203;11364](astral-sh/uv#11364))
-   Detect infinite recursion in `uv run` ([#&#8203;11386](astral-sh/uv#11386))

##### Python

The managed Python distributions have been updated, including:

-   CPython 3.14.0a5, which includes a new [tail calling interpreter](https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-tail-call) for a significant performance improvement
-   The bundled OpenSSL version was updated from 3.0.15 to 3.0.16 which fixes a [security advisory](https://openssl-library.org/news/secadv/20241016.txt)

See the [`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250212) for more details.

##### Bug fixes

-   Fix cross-drive script installation ([#&#8203;11167](astral-sh/uv#11167))
-   Add indexes in priority order ([#&#8203;11451](astral-sh/uv#11451))
-   Allow `--python <dir>` requests to match existing environments if `sys.executable` is the same file ([#&#8203;11290](astral-sh/uv#11290))
-   Avoid comparing to system site packages in `--dry-run` mode ([#&#8203;11427](astral-sh/uv#11427))
-   Prefer running executables in the environment with `<name>` over `<name>/__main__.py` ([#&#8203;11431](astral-sh/uv#11431))
-   Retry local clones without hardlinks if they fail ([#&#8203;11421](astral-sh/uv#11421))

##### Documentation

-   Update alternative-indexes.md to use `UV_INDEX` instead of `UV_EXTRA_INDEX_URL` ([#&#8203;11381](astral-sh/uv#11381))
-   Update scripts guide to include using package indexes ([#&#8203;11443](astral-sh/uv#11443))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xNjYuMSIsInVwZGF0ZWRJblZlciI6IjM5LjE2Ni4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
loic-lescoat pushed a commit to loic-lescoat/uv that referenced this pull request Mar 2, 2025
…l-sh#11347)

## Summary

Today, scripts use `CachedEnvironment`, which results in a different
virtual environment path every time the interpreter changes _or_ the
project requirements change. This makes it impossible to provide users
with a stable path to the script that they can use for (e.g.) directing
their editor.

This PR modifies `uv run` to use a stable path for local scripts (we
continue to use `CachedEnvironment` for remote scripts and scripts from
`stdin`). The logic now looks a lot more like it does for projects: we
`get_or_init` an environment, etc.

For now, the path to the script is like:
`environments-v1/4485801245a4732f`, where `4485801245a4732f` is a SHA of
the absolute path to the script. But I'm not picky on that :)
loic-lescoat pushed a commit to loic-lescoat/uv that referenced this pull request Mar 2, 2025
## Summary

This is a follow-on to astral-sh#11347 to use a stable directory for remote and
stdin scripts. The annoying piece here was figuring out what to use as
the cache key. For remote scripts, I'm using the URL; for stdin scripts,
there isn't any identifying information, so I'm just using a hash of the
metadata.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or improvement to existing functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants