aboutsummaryrefslogtreecommitdiffstats
path: root/_distutils_hack
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2020-07-26 10:59:11 -0400
committerJason R. Coombs <jaraco@jaraco.com>2020-07-26 12:51:58 -0400
commit6c6d69e0213c4012caa36f0087f1fe54bac62c89 (patch)
tree5a6caebde4c5de0d1d3b92005f18a6d2dc524cf5 /_distutils_hack
parent1251a231ad75fa649da700645690eb3c0a348f08 (diff)
downloadexternal_python_setuptools-6c6d69e0213c4012caa36f0087f1fe54bac62c89.tar.gz
external_python_setuptools-6c6d69e0213c4012caa36f0087f1fe54bac62c89.tar.bz2
external_python_setuptools-6c6d69e0213c4012caa36f0087f1fe54bac62c89.zip
Move all but a small shim in override into _distutils_hack
Diffstat (limited to '_distutils_hack')
-rw-r--r--_distutils_hack/__init__.py51
-rw-r--r--_distutils_hack/override.py55
2 files changed, 52 insertions, 54 deletions
diff --git a/_distutils_hack/__init__.py b/_distutils_hack/__init__.py
index 3ad70100..a8638344 100644
--- a/_distutils_hack/__init__.py
+++ b/_distutils_hack/__init__.py
@@ -1,5 +1,11 @@
import sys
import os
+import re
+import importlib
+import warnings
+
+
+is_pypy = '__pypy__' in sys.builtin_module_names
def enabled():
@@ -10,6 +16,51 @@ def enabled():
return which == 'local'
+def warn_distutils_present():
+ if 'distutils' not in sys.modules:
+ return
+ if is_pypy and sys.version_info < (3, 7):
+ # PyPy for 3.6 unconditionally imports distutils, so bypass the warning
+ # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
+ return
+ warnings.warn(
+ "Distutils was imported before Setuptools. This usage is discouraged "
+ "and may exhibit undesirable behaviors or errors. Please use "
+ "Setuptools' objects directly or at least import Setuptools first.")
+
+
+def clear_distutils():
+ if 'distutils' not in sys.modules:
+ return
+ warnings.warn("Setuptools is replacing distutils.")
+ mods = [name for name in sys.modules if re.match(r'distutils\b', name)]
+ for name in mods:
+ del sys.modules[name]
+
+
+def ensure_local_distutils():
+ clear_distutils()
+ distutils = importlib.import_module('setuptools._distutils')
+ distutils.__name__ = 'distutils'
+ sys.modules['distutils'] = distutils
+
+ # sanity check that submodules load as expected
+ core = importlib.import_module('distutils.core')
+ assert '_distutils' in core.__file__, core.__file__
+
+
+def do_override():
+ """
+ Ensure that the local copy of distutils is preferred over stdlib.
+
+ See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
+ for more motivation.
+ """
+ warn_distutils_present()
+ if enabled():
+ ensure_local_distutils()
+
+
class DistutilsMetaFinder:
def find_spec(self, fullname, path, target=None):
if path is not None or fullname != "distutils":
diff --git a/_distutils_hack/override.py b/_distutils_hack/override.py
index 523139bb..2cc433a4 100644
--- a/_distutils_hack/override.py
+++ b/_distutils_hack/override.py
@@ -1,54 +1 @@
-"""
-Ensure that the local copy of distutils is preferred over stdlib.
-
-See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
-for more motivation.
-"""
-
-import sys
-import re
-import importlib
-import warnings
-
-from . import enabled
-
-
-is_pypy = '__pypy__' in sys.builtin_module_names
-
-
-def warn_distutils_present():
- if 'distutils' not in sys.modules:
- return
- if is_pypy and sys.version_info < (3, 7):
- # PyPy for 3.6 unconditionally imports distutils, so bypass the warning
- # https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
- return
- warnings.warn(
- "Distutils was imported before Setuptools. This usage is discouraged "
- "and may exhibit undesirable behaviors or errors. Please use "
- "Setuptools' objects directly or at least import Setuptools first.")
-
-
-def clear_distutils():
- if 'distutils' not in sys.modules:
- return
- warnings.warn("Setuptools is replacing distutils.")
- mods = [name for name in sys.modules if re.match(r'distutils\b', name)]
- for name in mods:
- del sys.modules[name]
-
-
-def ensure_local_distutils():
- clear_distutils()
- distutils = importlib.import_module('setuptools._distutils')
- distutils.__name__ = 'distutils'
- sys.modules['distutils'] = distutils
-
- # sanity check that submodules load as expected
- core = importlib.import_module('distutils.core')
- assert '_distutils' in core.__file__, core.__file__
-
-
-warn_distutils_present()
-if enabled():
- ensure_local_distutils()
+__import__('_distutils_hack').do_override()