summaryrefslogtreecommitdiff
path: root/pkg_resources.py
diff options
context:
space:
mode:
Diffstat (limited to 'pkg_resources.py')
-rw-r--r--pkg_resources.py118
1 files changed, 17 insertions, 101 deletions
diff --git a/pkg_resources.py b/pkg_resources.py
index 02976016..36a7b306 100644
--- a/pkg_resources.py
+++ b/pkg_resources.py
@@ -22,6 +22,10 @@ import zipfile
import zipimport
import warnings
import stat
+import functools
+import pkgutil
+from pkgutil import get_importer
+
try:
from urlparse import urlparse, urlunparse
except ImportError:
@@ -35,28 +39,15 @@ try:
basestring
next = lambda o: o.next()
from cStringIO import StringIO as BytesIO
- def exec_(code, globs=None, locs=None):
- if globs is None:
- frame = sys._getframe(1)
- globs = frame.f_globals
- if locs is None:
- locs = frame.f_locals
- del frame
- elif locs is None:
- locs = globs
- exec("""exec code in globs, locs""")
except NameError:
basestring = str
from io import BytesIO
- exec_ = eval("exec")
def execfile(fn, globs=None, locs=None):
if globs is None:
globs = globals()
if locs is None:
locs = globs
- exec_(compile(open(fn).read(), fn, 'exec'), globs, locs)
- import functools
- reduce = functools.reduce
+ exec(compile(open(fn).read(), fn, 'exec'), globs, locs)
# capture these to bypass sandboxing
from os import utime
@@ -716,7 +707,7 @@ class Environment(object):
`platform` is an optional string specifying the name of the platform
that platform-specific distributions must be compatible with. If
unspecified, it defaults to the current platform. `python` is an
- optional string naming the desired version of Python (e.g. ``'2.4'``);
+ optional string naming the desired version of Python (e.g. ``'3.3'``);
it defaults to the current version.
You may explicitly set `platform` (and/or `python`) to ``None`` if you
@@ -1189,11 +1180,11 @@ def evaluate_marker(text, extra=None, _ops={}):
def and_test(nodelist):
# MUST NOT short-circuit evaluation, or invalid syntax can be skipped!
- return reduce(operator.and_, [interpret(nodelist[i]) for i in range(1,len(nodelist),2)])
+ return functools.reduce(operator.and_, [interpret(nodelist[i]) for i in range(1,len(nodelist),2)])
def test(nodelist):
# MUST NOT short-circuit evaluation, or invalid syntax can be skipped!
- return reduce(operator.or_, [interpret(nodelist[i]) for i in range(1,len(nodelist),2)])
+ return functools.reduce(operator.or_, [interpret(nodelist[i]) for i in range(1,len(nodelist),2)])
def atom(nodelist):
t = nodelist[1][0]
@@ -1354,7 +1345,7 @@ class NullProvider:
len(script_text), 0, script_text.split('\n'), script_filename
)
script_code = compile(script_text,script_filename,'exec')
- exec_(script_code, namespace, namespace)
+ exec(script_code, namespace, namespace)
def _has(self, path):
raise NotImplementedError(
@@ -1712,83 +1703,6 @@ class EggMetadata(ZipProvider):
self.module_path = importer.archive
self._setup_prefix()
-
-class ImpWrapper:
- """PEP 302 Importer that wraps Python's "normal" import algorithm"""
-
- def __init__(self, path=None):
- self.path = path
-
- def find_module(self, fullname, path=None):
- subname = fullname.split(".")[-1]
- if subname != fullname and self.path is None:
- return None
- if self.path is None:
- path = None
- else:
- path = [self.path]
- try:
- file, filename, etc = imp.find_module(subname, path)
- except ImportError:
- return None
- return ImpLoader(file, filename, etc)
-
-
-class ImpLoader:
- """PEP 302 Loader that wraps Python's "normal" import algorithm"""
-
- def __init__(self, file, filename, etc):
- self.file = file
- self.filename = filename
- self.etc = etc
-
- def load_module(self, fullname):
- try:
- mod = imp.load_module(fullname, self.file, self.filename, self.etc)
- finally:
- if self.file: self.file.close()
- # Note: we don't set __loader__ because we want the module to look
- # normal; i.e. this is just a wrapper for standard import machinery
- return mod
-
-
-def get_importer(path_item):
- """Retrieve a PEP 302 "importer" for the given path item
-
- If there is no importer, this returns a wrapper around the builtin import
- machinery. The returned importer is only cached if it was created by a
- path hook.
- """
- try:
- importer = sys.path_importer_cache[path_item]
- except KeyError:
- for hook in sys.path_hooks:
- try:
- importer = hook(path_item)
- except ImportError:
- pass
- else:
- break
- else:
- importer = None
-
- sys.path_importer_cache.setdefault(path_item,importer)
- if importer is None:
- try:
- importer = ImpWrapper(path_item)
- except ImportError:
- pass
- return importer
-
-try:
- from pkgutil import get_importer, ImpImporter
-except ImportError:
- pass # Python 2.3 or 2.4, use our own implementation
-else:
- ImpWrapper = ImpImporter # Python 2.5, use pkgutil's implementation
- del ImpLoader, ImpImporter
-
-
_declare_state('dict', _distribution_finders = {})
def register_finder(importer_type, distribution_finder):
@@ -1865,7 +1779,7 @@ def find_on_path(importer, path_item, only=False):
for item in find_distributions(os.path.join(path_item,line.rstrip())):
yield item
break
-register_finder(ImpWrapper,find_on_path)
+register_finder(pkgutil.ImpImporter,find_on_path)
if importlib_bootstrap is not None:
register_finder(importlib_bootstrap.FileFinder, find_on_path)
@@ -1902,14 +1816,17 @@ def _handle_ns(packageName, path_item):
module = sys.modules.get(packageName)
if module is None:
module = sys.modules[packageName] = imp.new_module(packageName)
- module.__path__ = []; _set_parent_ns(packageName)
+ module.__path__ = []
+ _set_parent_ns(packageName)
elif not hasattr(module,'__path__'):
raise TypeError("Not a package:", packageName)
handler = _find_adapter(_namespace_handlers, importer)
subpath = handler(importer,path_item,packageName,module)
if subpath is not None:
- path = module.__path__; path.append(subpath)
- loader.load_module(packageName); module.__path__ = path
+ path = module.__path__
+ path.append(subpath)
+ loader.load_module(packageName)
+ module.__path__ = path
return subpath
def declare_namespace(packageName):
@@ -1966,7 +1883,7 @@ def file_ns_handler(importer, path_item, packageName, module):
# Only return the path if it's not already there
return subpath
-register_namespace_handler(ImpWrapper,file_ns_handler)
+register_namespace_handler(pkgutil.ImpImporter,file_ns_handler)
register_namespace_handler(zipimport.zipimporter,file_ns_handler)
if importlib_bootstrap is not None:
@@ -2420,7 +2337,6 @@ class Distribution(object):
bdir = os.path.dirname(nloc)
npath= [(p and _normalize_cached(p) or p) for p in path]
- bp = None
for p, item in enumerate(npath):
if item==nloc:
break