summaryrefslogtreecommitdiff
path: root/setuptools/depends.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/depends.py
parentf430e585d84a5c63bb3b52e17af2f1b40fec8b71 (diff)
downloadpython-setuptools-git-85a9ca5e75abf00e0dde55dde4e2b0a11f93c04a.tar.gz
Extract 'imp' re-implementation to setuptools._imp and wrap it in py27compat for compatibility.
Diffstat (limited to 'setuptools/depends.py')
-rw-r--r--setuptools/depends.py95
1 files changed, 8 insertions, 87 deletions
diff --git a/setuptools/depends.py b/setuptools/depends.py
index 97f0ed9d..eed4913a 100644
--- a/setuptools/depends.py
+++ b/setuptools/depends.py
@@ -1,22 +1,11 @@
import sys
import marshal
from distutils.version import StrictVersion
-from setuptools.extern import six
from .py33compat import Bytecode
-if six.PY2:
- import imp
- from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN
-else:
- import os.path
- from importlib.util import find_spec, spec_from_loader
- from importlib.machinery import SOURCE_SUFFIXES, BYTECODE_SUFFIXES, EXTENSION_SUFFIXES, BuiltinImporter, FrozenImporter
- PY_SOURCE = 1
- PY_COMPILED = 2
- C_EXTENSION = 3
- C_BUILTIN = 6
- PY_FROZEN = 7
+from .py27compat import find_module, PY_COMPILED, PY_FROZEN, PY_SOURCE
+from . import py27compat
__all__ = [
@@ -27,7 +16,8 @@ __all__ = [
class Require:
"""A prerequisite to building or installing a distribution"""
- def __init__(self, name, requested_version, module, homepage='',
+ def __init__(
+ self, name, requested_version, module, homepage='',
attribute=None, format=None):
if format is None and requested_version is not None:
@@ -91,63 +81,6 @@ class Require:
return self.version_ok(version)
-def find_module(module, paths=None):
- """Just like 'imp.find_module()', but with package support"""
- if six.PY3:
- spec = find_spec(module, paths)
- if spec is None:
- raise ImportError("Can't find %s" % module)
- if not spec.has_location and hasattr(spec, 'submodule_search_locations'):
- spec = spec_from_loader('__init__.py', spec.loader)
-
- kind = -1
- file = None
- static = isinstance(spec.loader, type)
- if spec.origin == 'frozen' or static and issubclass(spec.loader, FrozenImporter):
- kind = PY_FROZEN
- path = None # imp compabilty
- suffix = mode = '' # imp compability
- elif spec.origin == 'built-in' or static and issubclass(spec.loader, BuiltinImporter):
- kind = C_BUILTIN
- path = None # imp compabilty
- suffix = mode = '' # imp compability
- elif spec.has_location:
- frozen = False
- path = spec.origin
- suffix = os.path.splitext(path)[1]
- mode = 'r' if suffix in SOURCE_SUFFIXES else 'rb'
-
- if suffix in SOURCE_SUFFIXES:
- kind = PY_SOURCE
- elif suffix in BYTECODE_SUFFIXES:
- kind = PY_COMPILED
- elif suffix in EXTENSION_SUFFIXES:
- kind = C_EXTENSION
-
- if kind in {PY_SOURCE, PY_COMPILED}:
- file = open(path, mode)
- else:
- path = None
- suffix = mode= ''
-
- return file, path, (suffix, mode, kind)
-
- else:
- parts = module.split('.')
- while parts:
- part = parts.pop(0)
- f, path, (suffix, mode, kind) = info = imp.find_module(part, paths)
-
- if kind == PKG_DIRECTORY:
- parts = parts or ['__init__']
- paths = [path]
-
- elif parts:
- raise ImportError("Can't find %r in %s" % (parts, module))
-
- return info
-
-
def get_module_constant(module, symbol, default=-1, paths=None):
"""Find 'module' by searching 'paths', and extract 'symbol'
@@ -156,35 +89,23 @@ def get_module_constant(module, symbol, default=-1, paths=None):
constant. Otherwise, return 'default'."""
try:
- f, path, (suffix, mode, kind) = find_module(module, paths)
+ f, path, (suffix, mode, kind) = info = find_module(module, paths)
except ImportError:
# Module doesn't exist
return None
- if six.PY3:
- spec = find_spec(module, paths)
- if hasattr(spec, 'submodule_search_locations'):
- spec = spec_from_loader('__init__.py', spec.loader)
-
try:
if kind == PY_COMPILED:
f.read(8) # skip magic & date
code = marshal.load(f)
elif kind == PY_FROZEN:
- if six.PY2:
- code = imp.get_frozen_object(module)
- else:
- code = spec.loader.get_code(module)
+ code = py27compat.get_frozen_object(module, paths)
elif kind == PY_SOURCE:
code = compile(f.read(), path, 'exec')
else:
# Not something we can parse; we'll have to import it. :(
- if module not in sys.modules:
- if six.PY2:
- imp.load_module(module, f, path, (suffix, mode, kind))
- else:
- sys.modules[module] = module_from_spec(spec)
- return getattr(sys.modules[module], symbol, None)
+ imported = py27compat.get_module(module, paths, info)
+ return getattr(imported, symbol, None)
finally:
if f: