def _check_std_lib()

in tools/toollib/import_analyzer.py [0:0]


def _check_std_lib(modules):
    external = set()
    std_libs = set()
    imp_errors = set()
    paths = {p.casefold() for p in sys.path}
    paths.update({str(Path(p).resolve()).casefold() for p in sys.path})
    stdlib_paths = {
        p
        for p in paths
        if p.startswith(sys.prefix.casefold()) and "site-packages" not in p
    }
    for mod_name in modules:
        if mod_name not in sys.modules:
            try:
                import_module(mod_name)
            except ImportError:
                imp_errors.add(mod_name)
                continue
            except Exception as err:  # pylint: disable=broad-except
                print(f"Unexpected exception importing {mod_name}")
                print(err)
                imp_errors.add(mod_name)
                continue
        module = sys.modules[mod_name]

        stdlib_module = _check_stdlib_path(module, mod_name, stdlib_paths)
        if stdlib_module:
            std_libs.add(mod_name)
            continue

        parts = mod_name.split(".")
        for i, part in enumerate(parts):
            partial = ".".join(parts[:i] + [part])
            if partial in external or partial in std_libs:
                # already listed or exempted
                break
            if partial in sys.modules and sys.modules[partial]:
                # if match, add as external import
                external.add(mod_name)
                break
    return std_libs, external, imp_errors