diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2020-07-12 11:39:51 -0400 |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2020-07-12 11:41:04 -0400 |
commit | 36df1d74933ef18a4099f4e82dbe55c00e45709e (patch) | |
tree | 55f15c34af86db91fd0b4f803d4e84c974a93333 | |
parent | 6ecd778888512de5be198ffa4bb6ea33ee6f841f (diff) | |
download | python-setuptools-git-36df1d74933ef18a4099f4e82dbe55c00e45709e.tar.gz |
Warn the user when distutils is present to discourage this usage and direct users to the recommended usage. Closes #2230.
-rw-r--r-- | changelog.d/2230.change.rst | 1 | ||||
-rw-r--r-- | setuptools/distutils_patch.py | 19 |
2 files changed, 19 insertions, 1 deletions
diff --git a/changelog.d/2230.change.rst b/changelog.d/2230.change.rst new file mode 100644 index 00000000..1719f497 --- /dev/null +++ b/changelog.d/2230.change.rst @@ -0,0 +1 @@ +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. diff --git a/setuptools/distutils_patch.py b/setuptools/distutils_patch.py index c5f273dd..33f1e7f9 100644 --- a/setuptools/distutils_patch.py +++ b/setuptools/distutils_patch.py @@ -12,10 +12,26 @@ import importlib 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(): if 'distutils' not in sys.modules: 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)] for name in mods: del sys.modules[name] @@ -40,5 +56,6 @@ def ensure_local_distutils(): assert '_distutils' in core.__file__, core.__file__ +warn_distutils_present() if enabled(): ensure_local_distutils() |