Question: I have a pip requirements file that changes during development.

Can `pip` be made to **uninstall** packages that do not appear in the requirements file as well as installing those that do appear? Is there a standard method?

This would allow the pip requirements file to be the canonical list of packages - an 'if and only if' approach.

**Update**: I suggested it as a new feature at <https://github.com/pypa/pip/issues/716>

Answer: 
The short answer is no, you can't do that with pip.
This is an old question (but a good one), and things have changed substantially since it was asked.

There's an offhand reference to `pip-sync` in another answer, but deserves its own answer, because it solves precisely the OP's problem.

[pip-sync](https://github.com/jazzband/pip-tools#example-usage-for-pip-sync) takes a `requirements.txt` file as input, and "trues up" your current Python environment so that it matches *exactly* what's in that `requirements.txt`. This includes *removing* any packages that are present in your env but absent from `requirements.txt`.

Example: Suppose we want our env to contain (only) 3 libraries: `libA`, `libB`, and `libC`, like so:

```
> cat requirements.txt
libA==1.0
libB==1.1
libC==1.2

```

But our env currently contains `libC` and `libD`:

```
> pip freeze
libC==1.2
libD==1.3

```

Running pip-sync will result in this, which was our desired final state:

```
> pip-sync requirements.txt
> pip freeze
libA==1.0
libB==1.1
libC==1.2

```