Uninstalling distributions

Assume we’ve installed Flask as shown in the section Upgrading existing installed distributions. To uninstall distributions, you can invoke the uninstall command (which has an alias, remove) as in the following example:

$ distil -e e2 remove werkzeug
Removal cannot proceed: other software needs what you are trying to remove:
    Flask (0.9)

As you can see, distil correctly stated that Werkzeug can’t be removed, as it would leave Flask in a non-working state. The same thing happens with the other Flask dependency, Jinja2:

$ distil -e e2 remove jinja2
Removal cannot proceed: other software needs what you are trying to remove:
    Flask (0.9)

However, if we try to uninstall Flask, distil doesn’t complain, but helpfully offers to remove Werkzeug and Jinja2 as they will no longer be required once Flask is gone:

$ distil -e e2 remove flask
The following distributions will not be needed any more:
    Jinja2 (2.6)
    Werkzeug (0.8.3)
Remove them too? (y/n)

If we confirm that we want to do this, a final prompt showing what would be removed is displayed:

The following directories will be removed:
    e2/lib/python2.7/site-packages/flask
    e2/lib/python2.7/site-packages/Flask-0.9.dist-info
    e2/lib/python2.7/site-packages/jinja2
    e2/lib/python2.7/site-packages/Jinja2-2.6.dist-info
    e2/lib/python2.7/site-packages/werkzeug
    e2/lib/python2.7/site-packages/Werkzeug-0.8.3.dist-info
Proceed? (y/n)

If we say yes to this, the indicated items will be removed.

Uninstalling distributions installed with pip

In addition to removing distributions installed by itself, distil can also uninstall distributions installed by pip. Let’s reset the environment and install Flask into it using pip:

$ reuse e2
$ e2/bin/pip install flask
Downloading/unpacking flask
  Downloading Flask-0.9.tar.gz (481kB): 481kB downloaded
... (lines omitted for brevity)
Successfully installed flask Werkzeug Jinja2
Cleaning up...

You can remove these individual distributions with distil, but because pip installation does not store information about which distributions were installed by user request and which were installed as dependencies, you don’t get as good a user experience:

$ distil -e e2 remove werkzeug
The following directories will be removed:
    e2/lib/python2.7/site-packages/werkzeug
    e2/lib/python2.7/site-packages/Werkzeug-0.8.3-py2.7.egg-info
Proceed? (y/n) y
Removal completed.
$ distil -e e2 remove flask
The following directories will be removed:
    e2/lib/python2.7/site-packages/flask
    e2/lib/python2.7/site-packages/Flask-0.9-py2.7.egg-info
Proceed? (y/n) y
Removal completed.
$ distil -e e2 remove jinja2
The following directories will be removed:
    e2/lib/python2.7/site-packages/jinja2
    e2/lib/python2.7/site-packages/Jinja2-2.6-py2.7.egg-info
Proceed? (y/n) y
Removal completed.

Command line reference – distil uninstall

Here is the complete help for distil‘s uninstall command:

$ distil help uninstall
usage: distil remove [-h] [-y] DIST [DIST ...]

Remove one or more installed distributions.

positional arguments:
  DIST        The name of an installed distribution.

optional arguments:
  -h, --help  show this help message and exit
  -y, --yes   Don't ask for confirmation of removals.