Catch broken mac_ver() (#11396)

A user reported a homebrew Python that would raise an exception in the
interpreter probing script because `platform.mac_ver()` returned `('',
('', '', ''), '')` on his installation due to
https://github.com/Homebrew/homebrew-core/issues/206778

This is easy enough to catch and show a proper error message instead of
the Python backtrace.
This commit is contained in:
konsti 2025-02-10 22:49:16 +01:00 committed by GitHub
parent ca49495e4b
commit ddbc6e3150
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 2 deletions

View file

@ -482,6 +482,10 @@ def get_operating_system_and_architecture():
# https://github.com/astral-sh/uv/issues/2450
version, _, architecture = platform.mac_ver()
if not version or not architecture:
print(json.dumps({"result": "error", "kind": "broken_mac_ver"}))
sys.exit(0)
# https://github.com/pypa/packaging/blob/cc938f984bbbe43c5734b9656c9837ab3a28191f/src/packaging/tags.py#L356-L363
is_32bit = struct.calcsize("P") == 4
if is_32bit:
@ -559,7 +563,7 @@ def main() -> None:
use_sysconfig_scheme = bool(
getattr(sysconfig, "_PIP_USE_SYSCONFIG", sys.version_info >= (3, 10))
)
# If we're not using sysconfig, make sure distutils is available.
if not use_sysconfig_scheme:
try:
@ -575,7 +579,7 @@ def main() -> None:
__import__("_distutils_hack").remove_shim()
except (ImportError, AttributeError):
pass
import distutils.dist
except ImportError:
# We require distutils, but it's not installed; this is fairly

View file

@ -698,6 +698,8 @@ enum InterpreterInfoResult {
pub enum InterpreterInfoError {
#[error("Could not detect a glibc or a musl libc (while running on Linux)")]
LibcNotFound,
#[error("Broken Python installation, `platform.mac_ver()` returned an empty value, please reinstall Python")]
BrokenMacVer,
#[error("Unknown operating system: `{operating_system}`")]
UnknownOperatingSystem { operating_system: String },
#[error("Python {python_version} is not supported. Please use Python 3.8 or newer.")]