Path: blob/main/test/lib/python3.9/site-packages/setuptools/extern/__init__.py
4799 views
import importlib.util1import sys234class VendorImporter:5"""6A PEP 302 meta path importer for finding optionally-vendored7or otherwise naturally-installed packages from root_name.8"""910def __init__(self, root_name, vendored_names=(), vendor_pkg=None):11self.root_name = root_name12self.vendored_names = set(vendored_names)13self.vendor_pkg = vendor_pkg or root_name.replace('extern', '_vendor')1415@property16def search_path(self):17"""18Search first the vendor package then as a natural package.19"""20yield self.vendor_pkg + '.'21yield ''2223def _module_matches_namespace(self, fullname):24"""Figure out if the target module is vendored."""25root, base, target = fullname.partition(self.root_name + '.')26return not root and any(map(target.startswith, self.vendored_names))2728def load_module(self, fullname):29"""30Iterate over the search path to locate and load fullname.31"""32root, base, target = fullname.partition(self.root_name + '.')33for prefix in self.search_path:34try:35extant = prefix + target36__import__(extant)37mod = sys.modules[extant]38sys.modules[fullname] = mod39return mod40except ImportError:41pass42else:43raise ImportError(44"The '{target}' package is required; "45"normally this is bundled with this package so if you get "46"this warning, consult the packager of your "47"distribution.".format(**locals())48)4950def create_module(self, spec):51return self.load_module(spec.name)5253def exec_module(self, module):54pass5556def find_spec(self, fullname, path=None, target=None):57"""Return a module spec for vendored names."""58return (59importlib.util.spec_from_loader(fullname, self)60if self._module_matches_namespace(fullname) else None61)6263def install(self):64"""65Install this importer into sys.meta_path if not already present.66"""67if self not in sys.meta_path:68sys.meta_path.append(self)697071names = (72'packaging', 'pyparsing', 'ordered_set', 'more_itertools', 'importlib_metadata',73'zipp', 'importlib_resources', 'jaraco', 'typing_extensions', 'nspektr', 'tomli',74)75VendorImporter(__name__, names, 'setuptools._vendor').install()767778