From 48196907ea789225269c52a898b3edcb76feb28f Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 14 Feb 2022 19:03:50 -0500 Subject: [PATCH] Prevent vendored importlib_metadata from loading distributions from older importlib_metadata. Fixes #3102. --- changelog.d/3102.misc.rst | 1 + setuptools/_importlib.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 changelog.d/3102.misc.rst diff --git a/changelog.d/3102.misc.rst b/changelog.d/3102.misc.rst new file mode 100644 index 0000000000..2aa4d73a14 --- /dev/null +++ b/changelog.d/3102.misc.rst @@ -0,0 +1 @@ +Prevent vendored importlib_metadata from loading distributions from older importlib_metadata. diff --git a/setuptools/_importlib.py b/setuptools/_importlib.py index c529ccd332..c1ac137e11 100644 --- a/setuptools/_importlib.py +++ b/setuptools/_importlib.py @@ -1,8 +1,31 @@ import sys +def disable_importlib_metadata_finder(metadata): + """ + Ensure importlib_metadata doesn't provide older, incompatible + Distributions. + + Workaround for #3102. + """ + try: + import importlib_metadata + except ImportError: + return + if importlib_metadata is metadata: + return + to_remove = [ + ob + for ob in sys.meta_path + if isinstance(ob, importlib_metadata.MetadataPathFinder) + ] + for item in to_remove: + sys.meta_path.remove(item) + + if sys.version_info < (3, 10): from setuptools.extern import importlib_metadata as metadata + disable_importlib_metadata_finder(metadata) else: import importlib.metadata as metadata # noqa: F401