summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_distutils_hack/__init__.py29
-rw-r--r--changelog.d/2993.misc.rst1
2 files changed, 28 insertions, 2 deletions
diff --git a/_distutils_hack/__init__.py b/_distutils_hack/__init__.py
index ab462f95..0108d854 100644
--- a/_distutils_hack/__init__.py
+++ b/_distutils_hack/__init__.py
@@ -136,11 +136,36 @@ class DistutilsMetaFinder:
"""
if self.pip_imported_during_build():
return
- if self.is_get_pip():
- return
clear_distutils()
self.spec_for_distutils = lambda: None
+ def spec_for_setuptools(self):
+ """
+ get-pip imports setuptools solely for the purpose of
+ determining if it's installed. In this case, provide
+ a stubbed spec to represent setuptools being present
+ without invoking any behavior.
+
+ Workaround for pypa/get-pip#137.
+ """
+ if not self.is_get_pip():
+ return
+
+ import importlib
+
+ class StubbedLoader(importlib.abc.Loader):
+
+ def create_module(self, spec):
+ import types
+ return types.ModuleType('setuptools')
+
+ def exec_module(self, module):
+ pass
+
+ return importlib.util.spec_from_loader(
+ 'setuptools', StubbedLoader(),
+ )
+
@classmethod
def pip_imported_during_build(cls):
"""
diff --git a/changelog.d/2993.misc.rst b/changelog.d/2993.misc.rst
new file mode 100644
index 00000000..c1d294d6
--- /dev/null
+++ b/changelog.d/2993.misc.rst
@@ -0,0 +1 @@
+In _distutils_hack, for get-pip, simulate existence of setuptools.