diff --git a/crates/uv-interpreter/src/get_interpreter_info.py b/crates/uv-interpreter/src/get_interpreter_info.py index 4d4b4f2b4..0b1d6fe96 100644 --- a/crates/uv-interpreter/src/get_interpreter_info.py +++ b/crates/uv-interpreter/src/get_interpreter_info.py @@ -169,6 +169,19 @@ def get_virtualenv(): "data": expand_path(sysconfig_paths["data"]), } else: + # Disable the use of the setuptools shim, if it's injected. Per pip: + # + # > If pip's going to use distutils, it should not be using the copy that setuptools + # > might have injected into the environment. This is done by removing the injected + # > shim, if it's injected. + # + # > See https://github.com/pypa/pip/issues/8761 for the original discussion and + # > rationale for why this is done within pip. + try: + __import__("_distutils_hack").remove_shim() + except (ImportError, AttributeError): + pass + # Use distutils primarily because that's what pip does. # https://github.com/pypa/pip/blob/ae5fff36b0aad6e5e0037884927eaa29163c0611/src/pip/_internal/locations/__init__.py#L249 import warnings @@ -317,6 +330,19 @@ def get_scheme(): Based on (with default arguments): https://github.com/pypa/pip/blob/ae5fff36b0aad6e5e0037884927eaa29163c0611/src/pip/_internal/locations/_distutils.py#L115 """ + # Disable the use of the setuptools shim, if it's injected. Per pip: + # + # > If pip's going to use distutils, it should not be using the copy that setuptools + # > might have injected into the environment. This is done by removing the injected + # > shim, if it's injected. + # + # > See https://github.com/pypa/pip/issues/8761 for the original discussion and + # > rationale for why this is done within pip. + try: + __import__("_distutils_hack").remove_shim() + except (ImportError, AttributeError): + pass + import warnings with warnings.catch_warnings(): # disable warning for PEP-632