Allow discovery of x86-64 managed Python builds on macOS (#13722)

Replacement for https://github.com/astral-sh/uv/pull/13474 (clobbered by
a changed base)

Once these are explicitly installed, they should be discoverable and
usable. Currently, they are not.
This commit is contained in:
Zanie Blue
2025-05-29 17:55:21 -05:00
committed by GitHub
parent 0c5ae1f25c
commit 4cc5291c08
2 changed files with 76 additions and 1 deletions
+6 -1
View File
@@ -143,7 +143,12 @@ impl Arch {
// TODO: Implement `variant` support checks
// Windows ARM64 runs emulated x86_64 binaries transparently
if cfg!(windows) && matches!(self.family, target_lexicon::Architecture::Aarch64(_)) {
// Similarly, macOS aarch64 runs emulated x86_64 binaries transparently if you have Rosetta
// installed. We don't try to be clever and check if that's the case here, we just assume
// that if x86_64 distributions are available, they're usable.
if (cfg!(windows) || cfg!(target_os = "macos"))
&& matches!(self.family, target_lexicon::Architecture::Aarch64(_))
{
return other.family == target_lexicon::Architecture::X86_64;
}
+70
View File
@@ -1416,3 +1416,73 @@ fn python_install_cached() {
Caused by: An offline Python installation was requested, but cpython-3.12.10[DATE]-[PLATFORM].tar.gz) is missing in python-cache
");
}
#[cfg(target_os = "macos")]
#[test]
fn python_install_emulated_macos() {
let context: TestContext = TestContext::new_with_versions(&[])
.with_filtered_exe_suffix()
.with_managed_python_dirs();
// Before installation, `uv python list` should not show the x86_64 download
uv_snapshot!(context.filters(), context.python_list().arg("3.13"), @r"
success: true
exit_code: 0
----- stdout -----
cpython-3.13.3-macos-aarch64-none <download available>
----- stderr -----
");
// Install an x86_64 version (assuming an aarch64 host)
uv_snapshot!(context.filters(), context.python_install().arg("cpython-3.13-macos-x86_64"), @r"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
Installed Python 3.13.3 in [TIME]
+ cpython-3.13.3-macos-x86_64-none
");
// It should be discoverable with `uv python find`
uv_snapshot!(context.filters(), context.python_find().arg("3.13"), @r"
success: true
exit_code: 0
----- stdout -----
[TEMP_DIR]/managed/cpython-3.13.3-macos-x86_64-none/bin/python3.13
----- stderr -----
");
// And included in `uv python list`
uv_snapshot!(context.filters(), context.python_list().arg("3.13"), @r"
success: true
exit_code: 0
----- stdout -----
cpython-3.13.3-macos-aarch64-none <download available>
cpython-3.13.3-macos-x86_64-none managed/cpython-3.13.3-macos-x86_64-none/bin/python3.13
----- stderr -----
");
uv_snapshot!(context.filters(), context.python_install().arg("cpython-3.13-macos-aarch64"), @r"
success: true
exit_code: 0
----- stdout -----
----- stderr -----
Installed Python 3.13.3 in [TIME]
+ cpython-3.13.3-macos-aarch64-none
");
// Once we've installed the native version, it should be preferred over x86_64
uv_snapshot!(context.filters(), context.python_find().arg("3.13"), @r"
success: true
exit_code: 0
----- stdout -----
[TEMP_DIR]/managed/cpython-3.13.3-macos-aarch64-none/bin/python3.13
----- stderr -----
");
}