How can I use a pip requirements file to uninstall as well as install packages?
You can now pass the -r requirements.txt
argument to pip uninstall
.
pip uninstall -r requirements.txt -y
At least as of pip
8.1.2, pip help uninstall
shows:
...
Uninstall Options:
-r, --requirement <file> Uninstall all the packages listed in the given requirements file. This option can be
used multiple times.
...
The short answer is no, you can't do that with pip.
It's not a feature of pip
, no. If you really want such a thing, you could write a script to compare the output of pip freeze
with your requirements.txt
, but it would likely be more hassle than it's worth.
Using virtualenv
, it is easier and more reliable to just create a clean environment and (re)install from requirements.txt
, like:
deactivate
rm -rf venv/
virtualenv venv/
source venv/bin/activate
pip install -r requirements.txt
This should uninstall anything not in requirements.txt:
pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y
Although this won't work quite right with packages installed with -e
, i.e. from a git repository or similar. To skip those, just filter out packages starting with the -e
flag:
pip freeze | grep -v -f requirements.txt - | grep -v '^#' | grep -v '^-e ' | xargs pip uninstall -y
Then, obviously:
pip install -r requirements.txt
Update for 2016:
You probably don't really want to actually use the above approach, though. Check out pip-tools
and pip-sync
which accomplish what you are probably looking to do in a much more robust way.
https://github.com/nvie/pip-tools
Update for May, 2016:
You can now also use pip uninstall -r requirements.txt
, however this accomplishes basically the opposite - it uninstalls everything in requirements.txt
Update for May, 2019:
Check out pipenv or Poetry. A lot has happened in the world of package management that makes this sort of question a bit obsolete. I'm actually still quite happily using pip-tools, though.