Allow pinning managed Python versions to specific build versions#15314
Allow pinning managed Python versions to specific build versions#15314
Conversation
f12bae7 to
3212cb3
Compare
a0cd585 to
6a8d153
Compare
ec1816c to
b145177
Compare
b145177 to
96a2dbd
Compare
1767aee to
4c1c479
Compare
4c1c479 to
9a34dcd
Compare
9a34dcd to
5115bd6
Compare
5115bd6 to
39f569d
Compare
39f569d to
58c88e7
Compare
58c88e7 to
a5291b7
Compare
a5291b7 to
97825d0
Compare
97825d0 to
e193380
Compare
| @@ -220,28 +220,32 @@ impl TestContext { | |||
| /// and `.exe` suffixes. | |||
| #[must_use] | |||
| pub fn with_filtered_python_names(mut self) -> Self { | |||
There was a problem hiding this comment.
Absolutely nightmarish to get the filters working on Windows and Unix. Hopefully this makes them more robust elsewhere.
| /// A wrapper type to display a `ManagedPythonDownload` with its build information. | ||
| pub struct ManagedPythonDownloadWithBuild<'a>(&'a ManagedPythonDownload); | ||
|
|
||
| impl Display for ManagedPythonDownloadWithBuild<'_> { | ||
| fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { | ||
| if let Some(build) = self.0.build { | ||
| write!(f, "{}+{}", self.0.key, build) | ||
| } else { | ||
| write!(f, "{}", self.0.key) | ||
| } | ||
| } | ||
| } |
There was a problem hiding this comment.
I want to make use of this for some error messages to avoid confusion when this is in a request. I'm not sure what the best way to do so is yet though.
| ) -> Result<Option<String>, BuildVersionError> { | ||
| let variable = python_build_version_variable(implementation); | ||
|
|
||
| let Some(build_os) = env::var_os(variable) else { |
There was a problem hiding this comment.
We should use env::var here, this also avoids using our own error type
There was a problem hiding this comment.
I don't want to use env::var here, it will error if not present and I want that to have different behavior. I also want the dedicated error type for when we perform further validation of these values in the future, e.g., we know what a well formed build version looks like.
There was a problem hiding this comment.
It makes sense if we add our own validation logic on top.
| } | ||
|
|
||
| /// Get the environment variable name for the build constraint for a given implementation. | ||
| pub(crate) fn python_build_version_variable(implementation: ImplementationName) -> &'static str { |
There was a problem hiding this comment.
Should this be a method on implementation name?
There was a problem hiding this comment.
It could be 🤔 I wanted to keep all this logic together but I don't feel strongly.
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.8.13` -> `0.8.14` | 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.8.14`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0814) [Compare Source](astral-sh/uv@0.8.13...0.8.14) ##### Python - Add managed CPython distributions for aarch64 musl ##### Enhancements - Add `--python-platform` to `uv pip check` ([#​15486](astral-sh/uv#15486)) - Add an environment variable for `UV_ISOLATED` ([#​15428](astral-sh/uv#15428)) - Add logging to the uv build backend ([#​15533](astral-sh/uv#15533)) - Allow more trailing null bytes in zip files ([#​15452](astral-sh/uv#15452)) - Allow pinning managed Python versions to specific build versions ([#​15314](astral-sh/uv#15314)) - Cache PyTorch wheels by default ([#​15481](astral-sh/uv#15481)) - Reject already-installed wheels that don't match the target platform ([#​15484](astral-sh/uv#15484)) - Add `--no-install-local` option to `uv sync`, `uv add` and `uv export` ([#​15328](astral-sh/uv#15328)) - Include cycle error message in `uv pip` CLI ([#​15453](astral-sh/uv#15453)) ##### Preview features - Fix format of `{version}` on `uv format` failure ([#​15527](astral-sh/uv#15527)) - Lock during installs in `uv format` to prevent races ([#​15551](astral-sh/uv#15551)) - Respect `--project` in `uv format` ([#​15438](astral-sh/uv#15438)) - Run `uv format` in the project root ([#​15440](astral-sh/uv#15440)) ##### Configuration - Add file-to-CLI overrides for build isolation configuration ([#​15437](astral-sh/uv#15437)) - Add file-to-CLI overrides for reinstall configuration ([#​15426](astral-sh/uv#15426)) ##### Performance - Cache `WHEEL` and `METADATA` reads in installed distributions ([#​15489](astral-sh/uv#15489)) ##### Bug fixes - Avoid erroring when creating `venv` in current working directory ([#​15537](astral-sh/uv#15537)) - Avoid introducing unnecessary system dependency on CUDA ([#​15449](astral-sh/uv#15449)) - Clear discovered site packages when creating virtual environment ([#​15522](astral-sh/uv#15522)) - Read index credentials from the environment during `uv publish` checks ([#​15545](astral-sh/uv#15545)) - Refuse to remove non-virtual environments in `uv venv` ([#​15538](astral-sh/uv#15538)) - Stop setting `CLICOLOR_FORCE=1` when calling build backends ([#​15472](astral-sh/uv#15472)) - Support file or directory removal for Windows symlinks ([#​15543](astral-sh/uv#15543)) ##### Documentation - Fix GitHub guide highlight lines ([#​15443](astral-sh/uv#15443)) - Move Resolver to new Internals section in the Reference ([#​15465](astral-sh/uv#15465)) - Split the "Authentication" page into sections ([#​15575](astral-sh/uv#15575)) - Update uninstall docs to mention `uvw.exe` needs to be removed ([#​15536](astral-sh/uv#15536)) </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:eyJjcmVhdGVkSW5WZXIiOiI0MS44OC4wIiwidXBkYXRlZEluVmVyIjoiNDEuODguMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Allows pinning the Python build version via environment variables, e.g.,
UV_PYTHON_CPYTHON_BUILD=.... Each variable is implementation specific, because they use different versioning schemes.Updates the Python download metadata to include a
buildstring, so we can filter downloads by the pin. Writes the build version to a file in the managed install, e.g.,cpython-3.10.18-macos-aarch64-none/BUILD, so we can filter installed versions by the pin.Some important follow-up here:
Some less important follow-ups to consider: