From 336e136e16fedaf4eb1c3fcdce0dc620912cd957 Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Mon, 10 Jan 2022 17:16:25 -0500 Subject: [PATCH] Instead of detecting 'get-pip' during the import of pip, detect the attempt to 'import setuptools' during 'get-pip', and in that case, stub the import to signal the presence of setuptools. Ref #3022. Fixes #2993. --- _distutils_hack/__init__.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/_distutils_hack/__init__.py b/_distutils_hack/__init__.py index ab462f95086..0108d854828 100644 --- a/_distutils_hack/__init__.py +++ b/_distutils_hack/__init__.py @@ -136,11 +136,36 @@ def spec_for_pip(self): """ 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): """