summaryrefslogtreecommitdiff
path: root/pkg_resources/extern/packaging.py
blob: 47f58eab218ed0ced71c5e5a647c3529cb9d8012 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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()