'Uninstall the distribution currently satisfying this requirement.
Prompts before removing or modifying files unless
``auto_confirm`` is True.
Refuses to delete or modify files outside of ``sys.prefix`` -
thus uninstallation within a virtual environment can only
modify that virtual environment, even if the virtualenv is
linked to global site-packages.'

def uninstall(self, auto_confirm=False):

    if (not self.check_if_exists()):
        raise UninstallationError(('Cannot    uninstall    requirement    %s,    not    installed' % (self.name,)))
    dist = (self.satisfied_by or self.conflicts_with)
    dist_path = normalize_path(dist.location)
    if (not dist_is_local(dist)):
        logger.info('Not    uninstalling    %s    at    %s,    outside    environment    %s', dist.key, dist_path, sys.prefix)
        self.nothing_to_uninstall = True
        return
    if (dist_path in get_stdlib()):
        logger.info('Not    uninstalling    %s    at    %s,    as    it    is    in    the    standard    library.', dist.key, dist_path)
        self.nothing_to_uninstall = True
        return
    paths_to_remove = UninstallPathSet(dist)
    develop_egg_link = egg_link_path(dist)
    develop_egg_link_egg_info = '{0}.egg-info'.format(pkg_resources.to_filename(dist.project_name))
    egg_info_exists = (dist.egg_info and os.path.exists(dist.egg_info))
    distutils_egg_info = getattr(dist._provider, 'path', None)
    if (egg_info_exists and dist.egg_info.endswith('.egg-info') and (not dist.egg_info.endswith(develop_egg_link_egg_info))):
        paths_to_remove.add(dist.egg_info)
        if dist.has_metadata('installed-files.txt'):
            for installed_file in dist.get_metadata('installed-files.txt').splitlines():
                path = os.path.normpath(os.path.join(dist.egg_info, installed_file))
                paths_to_remove.add(path)
        elif dist.has_metadata('top_level.txt'):
            if dist.has_metadata('namespace_packages.txt'):
                namespaces = dist.get_metadata('namespace_packages.txt')
            else:
                namespaces = []
            for top_level_pkg in [p for p in dist.get_metadata('top_level.txt').splitlines() if (p and (p not in namespaces))]:
                path = os.path.join(dist.location, top_level_pkg)
                paths_to_remove.add(path)
                paths_to_remove.add((path + '.py'))
                paths_to_remove.add((path + '.pyc'))
                paths_to_remove.add((path + '.pyo'))
    elif distutils_egg_info:
        warnings.warn('Uninstalling    a    distutils    installed    project    ({0})    has    been    deprecated    and    will    be    removed    in    a    future    version.    This    is    due    to    the    fact    that    uninstalling    a    distutils    project    will    only    partially    uninstall    the    project.'.format(self.name), RemovedInPip10Warning)
        paths_to_remove.add(distutils_egg_info)
    elif dist.location.endswith('.egg'):
        paths_to_remove.add(dist.location)
        easy_install_egg = os.path.split(dist.location)[1]
        easy_install_pth = os.path.join(os.path.dirname(dist.location), 'easy-install.pth')
        paths_to_remove.add_pth(easy_install_pth, ('./' + easy_install_egg))
    elif develop_egg_link:
        with open(develop_egg_link, 'r') as fh:
            link_pointer = os.path.normcase(fh.readline().strip())
        assert (link_pointer == dist.location), ('Egg-link    %s    does    not    match    installed    location    of    %s    (at    %s)' % (link_pointer, self.name, dist.location))
        paths_to_remove.add(develop_egg_link)
        easy_install_pth = os.path.join(os.path.dirname(develop_egg_link), 'easy-install.pth')
        paths_to_remove.add_pth(easy_install_pth, dist.location)
    elif (egg_info_exists and dist.egg_info.endswith('.dist-info')):
        for path in pip.wheel.uninstallation_paths(dist):
            paths_to_remove.add(path)
    else:
        logger.debug('Not    sure    how    to    uninstall:    %s    -    Check:    %s', dist, dist.location)
    if (dist.has_metadata('scripts') and dist.metadata_isdir('scripts')):
        for script in dist.metadata_listdir('scripts'):
            if dist_in_usersite(dist):
                bin_dir = bin_user
            else:
                bin_dir = bin_py
            paths_to_remove.add(os.path.join(bin_dir, script))
            if WINDOWS:
                paths_to_remove.add((os.path.join(bin_dir, script) + '.bat'))
    if dist.has_metadata('entry_points.txt'):
        if six.PY2:
            options = {}
        else:
            options = {'delimiters': ('=',)}
        config = configparser.SafeConfigParser(**options)
        config.readfp(FakeFile(dist.get_metadata_lines('entry_points.txt')))
        if config.has_section('console_scripts'):
            for (name, value) in config.items('console_scripts'):
                if dist_in_usersite(dist):
                    bin_dir = bin_user
                else:
                    bin_dir = bin_py
                paths_to_remove.add(os.path.join(bin_dir, name))
                if WINDOWS:
                    paths_to_remove.add((os.path.join(bin_dir, name) + '.exe'))
                    paths_to_remove.add((os.path.join(bin_dir, name) + '.exe.manifest'))
                    paths_to_remove.add((os.path.join(bin_dir, name) + '-script.py'))
    paths_to_remove.remove(auto_confirm)
    self.uninstalled = paths_to_remove
