Commit a4945970 authored by Jason R. Coombs's avatar Jason R. Coombs Committed by GitHub

Merge pull request #2256 from pypa/bugfix/2230-warn-distutils-present

Warn the user when distutils is present
parents 6ecd7788 36df1d74
Now warn the user when setuptools is imported after distutils modules have been loaded (exempting PyPy for 3.6), directing the users of packages to import setuptools first.
...@@ -12,10 +12,26 @@ import importlib ...@@ -12,10 +12,26 @@ import importlib
import warnings import warnings
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(): def clear_distutils():
if 'distutils' not in sys.modules: if 'distutils' not in sys.modules:
return return
warnings.warn("Setuptools is replacing distutils") warnings.warn("Setuptools is replacing distutils.")
mods = [name for name in sys.modules if re.match(r'distutils\b', name)] mods = [name for name in sys.modules if re.match(r'distutils\b', name)]
for name in mods: for name in mods:
del sys.modules[name] del sys.modules[name]
...@@ -40,5 +56,6 @@ def ensure_local_distutils(): ...@@ -40,5 +56,6 @@ def ensure_local_distutils():
assert '_distutils' in core.__file__, core.__file__ assert '_distutils' in core.__file__, core.__file__
warn_distutils_present()
if enabled(): if enabled():
ensure_local_distutils() ensure_local_distutils()
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment