From 0ee7f8568845c5988d786a93b27a6a61b53a1a49 Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Tue, 3 Jan 2023 08:03:50 +0800 Subject: [PATCH] Silently ignore pkg_resources override on 3.12+ This customization is generally provided by the distributor, and the user can do nothing if the environment is configured incorrectly. So instead of breaking pip entirely, we silently ignore the customization and let the distributor correct the situation. --- src/pip/_internal/metadata/__init__.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/pip/_internal/metadata/__init__.py b/src/pip/_internal/metadata/__init__.py index 20c1b705226..8ab78a3065b 100644 --- a/src/pip/_internal/metadata/__init__.py +++ b/src/pip/_internal/metadata/__init__.py @@ -4,7 +4,6 @@ import sys from typing import TYPE_CHECKING, List, Optional, Type, cast -from pip._internal.exceptions import PipError from pip._internal.utils.misc import strtobool from .base import BaseDistribution, BaseEnvironment, FilesystemWheel, MemoryWheel, Wheel @@ -31,7 +30,8 @@ def _should_use_importlib_metadata() -> bool: """Whether to use the ``importlib.metadata`` or ``pkg_resources`` backend. By default, pip uses ``importlib.metadata`` on Python 3.11+, and - ``pkg_resourcess`` otherwise. This can be overridden by a couple of ways: + ``pkg_resources`` otherwise. On Python versions prior to 3.12, this can be + overridden by a couple of ways for transitional purposes: * If environment variable ``_PIP_USE_IMPORTLIB_METADATA`` is set, it dictates whether ``importlib.metadata`` is used, regardless of Python @@ -41,6 +41,8 @@ def _should_use_importlib_metadata() -> bool: makes pip use ``pkg_resources`` (unless the user set the aforementioned environment variable to *True*). """ + if sys.version_info >= (3, 12): + return True with contextlib.suppress(KeyError, ValueError): return bool(strtobool(os.environ["_PIP_USE_IMPORTLIB_METADATA"])) if sys.version_info < (3, 11): @@ -61,11 +63,6 @@ def select_backend() -> Backend: from . import importlib return cast(Backend, importlib) - - if sys.version_info >= (3, 12): - message = "Cannot use pkg_resources as metadata backend on Python 3.12+" - raise PipError(message) - from . import pkg_resources return cast(Backend, pkg_resources)