| from __future__ import absolute_import |
| |
| import pip |
| from pip.wheel import WheelCache |
| from pip.req import InstallRequirement, RequirementSet, parse_requirements |
| from pip.basecommand import Command |
| from pip.exceptions import InstallationError |
| |
| |
| class UninstallCommand(Command): |
| """ |
| Uninstall packages. |
| |
| pip is able to uninstall most installed packages. Known exceptions are: |
| |
| - Pure distutils packages installed with ``python setup.py install``, which |
| leave behind no metadata to determine what files were installed. |
| - Script wrappers installed by ``python setup.py develop``. |
| """ |
| name = 'uninstall' |
| usage = """ |
| %prog [options] <package> ... |
| %prog [options] -r <requirements file> ...""" |
| summary = 'Uninstall packages.' |
| |
| def __init__(self, *args, **kw): |
| super(UninstallCommand, self).__init__(*args, **kw) |
| self.cmd_opts.add_option( |
| '-r', '--requirement', |
| dest='requirements', |
| action='append', |
| default=[], |
| metavar='file', |
| help='Uninstall all the packages listed in the given requirements ' |
| 'file. This option can be used multiple times.', |
| ) |
| self.cmd_opts.add_option( |
| '-y', '--yes', |
| dest='yes', |
| action='store_true', |
| help="Don't ask for confirmation of uninstall deletions.") |
| |
| self.parser.insert_option_group(0, self.cmd_opts) |
| |
| def run(self, options, args): |
| with self._build_session(options) as session: |
| format_control = pip.index.FormatControl(set(), set()) |
| wheel_cache = WheelCache(options.cache_dir, format_control) |
| requirement_set = RequirementSet( |
| build_dir=None, |
| src_dir=None, |
| download_dir=None, |
| isolated=options.isolated_mode, |
| session=session, |
| wheel_cache=wheel_cache, |
| ) |
| for name in args: |
| requirement_set.add_requirement( |
| InstallRequirement.from_line( |
| name, isolated=options.isolated_mode, |
| wheel_cache=wheel_cache |
| ) |
| ) |
| for filename in options.requirements: |
| for req in parse_requirements( |
| filename, |
| options=options, |
| session=session, |
| wheel_cache=wheel_cache): |
| requirement_set.add_requirement(req) |
| if not requirement_set.has_requirements: |
| raise InstallationError( |
| 'You must give at least one requirement to %(name)s (see ' |
| '"pip help %(name)s")' % dict(name=self.name) |
| ) |
| requirement_set.uninstall(auto_confirm=options.yes) |