diff options
-rw-r--r-- | _distutils_hack/__init__.py | 29 | ||||
-rw-r--r-- | changelog.d/2993.misc.rst | 1 |
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. |