aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/py27compat.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2019-10-27 19:50:53 -0400
committerJason R. Coombs <jaraco@jaraco.com>2019-10-27 20:25:17 -0400
commit85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a (patch)
treec1755a1d2a8e6d41231705efee5254786a9401f5 /setuptools/py27compat.py
parentf430e585d84a5c63bb3b52e17af2f1b40fec8b71 (diff)
downloadexternal_python_setuptools-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.tar.gz
external_python_setuptools-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.tar.bz2
external_python_setuptools-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.zip
Extract 'imp' re-implementation to setuptools._imp and wrap it in py27compat for compatibility.
Diffstat (limited to 'setuptools/py27compat.py')
-rw-r--r--setuptools/py27compat.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/setuptools/py27compat.py b/setuptools/py27compat.py
index 2985011b..cf5fb33e 100644
--- a/setuptools/py27compat.py
+++ b/setuptools/py27compat.py
@@ -2,6 +2,7 @@
Compatibility Support for Python 2.7 and earlier
"""
+import sys
import platform
from setuptools.extern import six
@@ -26,3 +27,34 @@ linux_py2_ascii = (
rmtree_safe = str if linux_py2_ascii else lambda x: x
"""Workaround for http://bugs.python.org/issue24672"""
+
+
+try:
+ from ._imp import find_module, PY_COMPILED, PY_FROZEN, PY_SOURCE
+ from ._imp import get_frozen_object, get_module
+except ImportError:
+ import imp
+ from imp import PY_COMPILED, PY_FROZEN, PY_SOURCE # noqa
+
+ def find_module(module, paths=None):
+ """Just like 'imp.find_module()', but with package support"""
+ parts = module.split('.')
+ while parts:
+ part = parts.pop(0)
+ f, path, (suffix, mode, kind) = info = imp.find_module(part, paths)
+
+ if kind == imp.PKG_DIRECTORY:
+ parts = parts or ['__init__']
+ paths = [path]
+
+ elif parts:
+ raise ImportError("Can't find %r in %s" % (parts, module))
+
+ return info
+
+ def get_frozen_object(module, paths):
+ return imp.get_frozen_object(module)
+
+ def get_module(module, paths, info):
+ imp.load_module(*info)
+ return sys.modules[module]