summaryrefslogtreecommitdiff
path: root/pkg_resources/extern/packaging/__init__.py
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2016-01-01 21:22:29 -0500
committerJason R. Coombs <jaraco@jaraco.com>2016-01-01 21:22:29 -0500
commit9a531b50020849193a55262b3f9cfc375ad3f37c (patch)
tree9e7a3407f2e4222eab85b0366c9ac04dbb0c3fc2 /pkg_resources/extern/packaging/__init__.py
parent9b985a9112d9be396adca6a1948076378c70cc34 (diff)
downloadpython-setuptools-git-9a531b50020849193a55262b3f9cfc375ad3f37c.tar.gz
Move extern.packaging into a package to enable package-relative imports to resolve propertly. Ref #229.
--HG-- branch : feature/issue-229
Diffstat (limited to 'pkg_resources/extern/packaging/__init__.py')
-rw-r--r--pkg_resources/extern/packaging/__init__.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/pkg_resources/extern/packaging/__init__.py b/pkg_resources/extern/packaging/__init__.py
new file mode 100644
index 00000000..47f58eab
--- /dev/null
+++ b/pkg_resources/extern/packaging/__init__.py
@@ -0,0 +1,45 @@
+"""
+Handle loading a package from system or from the bundled copy
+"""
+
+import imp
+
+
+_SEARCH_PATH = ['pkg_resources._vendor.packaging', 'packaging']
+
+
+def _find_module(name, path=None):
+ """
+ Alternative to `imp.find_module` that can also search in subpackages.
+ """
+
+ parts = name.split('.')
+
+ for part in parts:
+ if path is not None:
+ path = [path]
+
+ fh, path, descr = imp.find_module(part, path)
+
+ return fh, path, descr
+
+
+def _import_in_place(search_path=_SEARCH_PATH):
+ for mod_name in search_path:
+ try:
+ mod_info = _find_module(mod_name)
+ except ImportError:
+ continue
+
+ imp.load_module(__name__, *mod_info)
+ break
+
+ else:
+ raise ImportError(
+ "The '{name}' package is required; "
+ "normally this is bundled with this package so if you get "
+ "this warning, consult the packager of your "
+ "distribution.".format(name=_SEARCH_PATH[-1]))
+
+
+_import_in_place()