From 0257c9422f7bb99a6f319b54f808a5c50339be6c Mon Sep 17 00:00:00 2001 From: John Sirois Date: Fri, 5 Jan 2024 10:35:07 -0800 Subject: [PATCH 1/2] Prep removal of `importlib.resources.open_text`. The `importlib.resources.open_text` was deprecated in Python 3.11 and is removed in 3.13. --- ...96da0-5535-40c4-ad79-3feb7f694ec2.trivial.rst | 0 src/pip/_internal/commands/debug.py | 4 ++-- src/pip/_internal/utils/compat.py | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 news/23f96da0-5535-40c4-ad79-3feb7f694ec2.trivial.rst diff --git a/news/23f96da0-5535-40c4-ad79-3feb7f694ec2.trivial.rst b/news/23f96da0-5535-40c4-ad79-3feb7f694ec2.trivial.rst new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/pip/_internal/commands/debug.py b/src/pip/_internal/commands/debug.py index 7e5271c9886..567ca967e5b 100644 --- a/src/pip/_internal/commands/debug.py +++ b/src/pip/_internal/commands/debug.py @@ -1,4 +1,3 @@ -import importlib.resources import locale import logging import os @@ -17,6 +16,7 @@ from pip._internal.cli.status_codes import SUCCESS from pip._internal.configuration import Configuration from pip._internal.metadata import get_environment +from pip._internal.utils.compat import open_text_resource from pip._internal.utils.logging import indent_log from pip._internal.utils.misc import get_pip_version @@ -35,7 +35,7 @@ def show_sys_implementation() -> None: def create_vendor_txt_map() -> Dict[str, str]: - with importlib.resources.open_text("pip._vendor", "vendor.txt") as f: + with open_text_resource("pip._vendor", "vendor.txt") as f: # Purge non version specifying lines. # Also, remove any space prefix or suffixes (including comments). lines = [ diff --git a/src/pip/_internal/utils/compat.py b/src/pip/_internal/utils/compat.py index 3f4d300cef0..ea5e9592462 100644 --- a/src/pip/_internal/utils/compat.py +++ b/src/pip/_internal/utils/compat.py @@ -1,9 +1,11 @@ """Stuff that differs in different Python versions and platform distributions.""" +import importlib.resources import logging import os import sys +from typing import TextIO __all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] @@ -51,6 +53,20 @@ def get_path_uid(path: str) -> int: return file_uid +# The importlib.resources.open_text function was deprecated in 3.11 with suggested +# replacement we use below. +if sys.version_info < (3, 11): + open_text_resource = importlib.resources.open_text +else: + + def open_text_resource( + package: str, resource: str, encoding: str = "utf-8", errors: str = "strict" + ) -> TextIO: + return (importlib.resources.files(package) / resource).open( + "r", encoding=encoding, errors=errors + ) + + # packages in the stdlib that may have installation metadata, but should not be # considered 'installed'. this theoretically could be determined based on # dist.location (py27:`sysconfig.get_paths()['stdlib']`, From 23ab8572e5e6a51b30053ac6093d6d44834aacc9 Mon Sep 17 00:00:00 2001 From: John Sirois Date: Mon, 5 Feb 2024 12:52:12 -0800 Subject: [PATCH 2/2] Fix open_text_resource typing. --- src/pip/_internal/utils/compat.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pip/_internal/utils/compat.py b/src/pip/_internal/utils/compat.py index ea5e9592462..d8b54e4ee51 100644 --- a/src/pip/_internal/utils/compat.py +++ b/src/pip/_internal/utils/compat.py @@ -5,7 +5,7 @@ import logging import os import sys -from typing import TextIO +from typing import IO __all__ = ["get_path_uid", "stdlib_pkgs", "WINDOWS"] @@ -61,7 +61,7 @@ def get_path_uid(path: str) -> int: def open_text_resource( package: str, resource: str, encoding: str = "utf-8", errors: str = "strict" - ) -> TextIO: + ) -> IO[str]: return (importlib.resources.files(package) / resource).open( "r", encoding=encoding, errors=errors )