summaryrefslogtreecommitdiff
path: root/setuptools/_importlib.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2022-07-14 12:37:31 -0400
committerJason R. Coombs <jaraco@jaraco.com>2022-07-14 12:38:56 -0400
commitc28caa6ef4dfbb4fe8061e1fc64e520a41213cbd (patch)
tree93564994aa4d947eb5e3441ba86ad290d731809d /setuptools/_importlib.py
parent8c9cf2f0e5ce5b6630e38a5fd1105fcfb2252348 (diff)
downloadpython-setuptools-git-bugfix/3452-warn.tar.gz
Emit a warning when an older version of importlib_metadata is detected to give users better guidance when this condition is present. Ref #3452.bugfix/3452-warn
Diffstat (limited to 'setuptools/_importlib.py')
-rw-r--r--setuptools/_importlib.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/setuptools/_importlib.py b/setuptools/_importlib.py
index 819bf5d3..d1970bdc 100644
--- a/setuptools/_importlib.py
+++ b/setuptools/_importlib.py
@@ -34,11 +34,38 @@ def disable_importlib_metadata_finder(metadata):
sys.meta_path.remove(item)
+def check_old_importlib_metadata(metadata):
+ """
+ Warn the user if an old importlib_metadata is present and might
+ cause problems.
+
+ Workaround for #3452. Remove this check after 2022-12-31.
+ """
+ try:
+ version = metadata.version('importlib_metadata')
+ parsed = tuple(map(int, version.split('.')))
+ except Exception:
+ return
+
+ if parsed > (4, 3):
+ return
+
+ msg = (
+ "`importlib_metadata` version is incompatible with the stdlib "
+ "importlib.metadata and may cause problems if plugins import "
+ "importlib_metadata. See pypa/setuptools#3452 for details. "
+ "Consider updating to importlib_metadata 4.3 or later."
+ )
+ import warnings
+ warnings.warn(msg)
+
+
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
+ check_old_importlib_metadata(metadata)
if sys.version_info < (3, 9):