How do I remove all packages installed by pip?
Asked Answered
H

34

1270

How do I uninstall all packages installed by pip from my currently activated virtual environment?

Haerr answered 28/6, 2012 at 15:36 Comment(2)
@patelshahrukh uninstalling python DOES NOT remove pip packages. please AVOID doing that, since it both most likely WON'T WORK the way you think it will, and, depending on how you install python again, can leave your machine in an unstable state that's more work to fix.Haerr
this might help for packages installed in development mode or editable mode: #17347119Footsore
H
1797

I've found this snippet as an alternative solution. It's a more graceful removal of libraries than remaking the virtualenv:

pip freeze | xargs pip uninstall -y

In case you have packages installed via VCS, you need to exclude those lines and remove the packages manually (elevated from the comments below):

pip freeze --exclude-editable | xargs pip uninstall -y

If you have packages installed directly from github/gitlab, those will have @. Like:

django @ git+https://github.com/django.git@<sha>

You can add cut -d "@" -f1 to get just the package name that is required to uninstall it.

pip freeze | cut -d "@" -f1 | xargs pip uninstall -y
Haerr answered 28/6, 2012 at 18:32 Comment(25)
I find this a good solution, purely because it doesn't remove the virtual environment entirely - I may have made changes to e.g. postactivate which will remain.Paddy
After running this I realized it removed the setuptools package. I resolved the issue following instructions here: #7446687Dormer
@gerty3000 yes, this will (as the question asks) remove all of the packages installed in a virtual-env. in your environment, maybe setuptools would be better off installed at a global location instead?Haerr
this is apprently what wipeenv of virtualenvwrapper does but it does not handle -e like this answer suggests. so how to uninstalle those VCS ones?Reggie
I've noticed that pip fails early when a lib isn't already installed, so for r in $(cat requirements.txt | grep -v ^#); do pip uninstall -y $r; done; works in that case.Orestes
@Orestes you're probably not running the pip freeze at the start; this command explicitly removes all the already installed packages (and not the ones that were meant to be installed/listed in requirements)Haerr
@Haerr you're right, I wasn't. But that's because I didn't want to uninstall everything, I only wanted to uninstall libs that are listed in reqs.txt. Different use case, I guess :)Orestes
To speed up the uninstall (helps a lot if you have an SSD and a multicore processor): pip freeze | grep -v "^-e" | xargs -L1 -P16 pip uninstall -yJarboe
You can also use pip freeze --exclude-editable | xargs pip uninstall -y to ignore VCS packages without using a grep patternPittel
I had to run pip freeze | xargs -I {} pip uninstall -y {} but otherwise this worked for me.Karajan
@HarshadKavathiya use cygwin or gowHaerr
And to uninstall editable packages see stackoverflow.com/questions/17346619Judson
Does not work with Azure Notebooks: ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.Toxicology
ERROR: Invalid requirement: '@' I have packages that ive installed from my gitlab.Hulse
pip freeze lists all packages, including those installed in the OS. User will is unable (and possibly does not want) to remove them without root permissions. pip freeze --user worked for me.Audry
It has been suggested to me that your answer also answers my Q at #65662658 Is this true, as I don't see sudo discussed here at all.Rick
VCS should be explained hereMignon
Does it delete the pip package (which I want to keep)Mignon
I voted this up 2 years ago and here I am again, wishing I could vote this up one more time. :DRosenstein
In case you have been looking to uninstall on multiple versions of python, use py -<version> -m pip freeze | xargs py -<version> -m pip uninstall -y. Make sure to add py -<version> -m in both occurrences, if in case you add it only in the first, you would see something as WARNING: Skipping <package> as it is not installed.Beadsman
https://mcmap.net/q/45433/-how-do-i-remove-all-packages-installed-by-pip This solution is provided to reset the virtual environment.Businesslike
@Hulse pip list --format=freeze |xargs pip uninstall -y did the trick for meFoxing
Warning: don't run this command in your base conda environment, it will remove packages required for conda itself to work.Ambiguity
If you are using Windows, you can't run this in a command prompt because you don't have use xargs, cut, etc. However if you have git installed, you probably have git bash installed as well and you can run this command in a git bash shellHolmes
I run into a problem that typing-extensions becomes typing_extensions (note the - and _) after pip freeze in some versions of Python. Although both names are legal, this package will be uninstalled even if it is in requirements.txt. We need to match _ against - before grep, maybe by ` | sed "s/_/-/g"`.Deandeana
T
910

This will work for all Mac, Windows, and Linux systems. To get the list of all pip packages in the requirements.txt file (Note: This will overwrite requirements.txt if exist else will create the new one, also if you don't want to replace old requirements.txt then give different file name in the all following command in place requirements.txt).

pip freeze > requirements.txt

Now to remove one by one

pip uninstall -r requirements.txt

If we want to remove all at once then

pip uninstall -r requirements.txt -y

If you're working on an existing project that has a requirements.txt file and your environment has diverged, simply replace requirements.txt from the above examples with toberemoved.txt. Then, once you have gone through the steps above, you can use the requirements.txt to update your now clean environment.

And For single command without creating any file as @joeb suggested

pip uninstall -y -r <(pip freeze)
Terra answered 12/11, 2016 at 18:8 Comment(13)
probably worth mentioning that you are force overwriting their requirements.txt file, in case they didn't know. :)Knorring
In addition, if one wants to remove all packages, appending "-y" will do so. Example: pip uninstall -r requirements.txt -yVasodilator
You can use pip uninstall -y -r <(pip freeze) to do everything in one go.Complexioned
@joeb yes we can do that way also.Terra
@HarshadKavathiya you can use another file to store pip freeze, like "current.txt", so requirements.txt can stay untouched cheersSummons
@NikosKeyz Yes we can use any other file name.Terra
note that the powershell will deny acces to the requirements.text. With the regular cmd it worked thoAgentive
@joeb THanks for the suggestion. Added your suggestion answerTerra
with bash we can use io redirection to save us relying on filesystem state: python3 -m pip uninstall -r <(python3 -m pip freeze)Arboreous
When I try to use the pip uninstall it says that the requirements.txt file is not exists, but it is.Donnetta
@Donnetta This is strange to me, but If the file is there in the correct directory you should not get this error for sure.Terra
@Donnetta It would be great you share the screenshot with the error you are facing, it really helps to understand the issue.Terra
@HarshadKavathiya Is it fine now, thank you anyway.Donnetta
H
221

I wanted to elevate this answer out of a comment section because it's one of the most elegant solutions in the thread. Full credit for this answer goes to @joeb.

pip uninstall -y -r <(pip freeze)

This worked great for me for the use case of clearing my user packages folder outside the context of a virtualenv which many of the above answers don't handle.

Edit: Anyone know how to make this command work in a Makefile?

Bonus: A bash alias

I add this to my bash profile for convenience:

alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

Then run:

pipuninstallall

Alternative for Pipenv

If you are using pipenv, you can run:

pipenv uninstall --all

Alternative for Poetry

If you are using Poetry, run:

poetry env remove --python3.9

(Note that you need to change the version number there to match whatever your Python version is.)

Hickey answered 9/3, 2018 at 18:51 Comment(7)
I like it but it doesn't work in the null case (pip freeze results in nothing output if no packages installed, and then pip uninstall complains, unfortunately).Mashie
Hmm good catch. Perhaps it could be wrapped into a bash function that checks whether the pip freeze output is non-empty. I don't see a great way to achieve that while keeping the command a nice short one-liner.Hickey
make uses sh by default, but the substitution syntax <(...) is a bashism. So you can either use bash -c "...", or work around by doing a pip freeze | pip uninstall -r /dev/stdinKieger
Does not work with Azure Notebooks: ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.Toxicology
@Toxicology Here is a workaround that may help - https://mcmap.net/q/46576/-cannot-uninstall-chardet. If that doesn't work, then this approach would be my next best guess - github.com/vlachoudis/bCNC/issues/1141. Note that the packages mentioned are different, but I believe the underlying issue may be similar.Hickey
Add SHELL := /usr/bin/env bash at the top of your Makefile. See also gnu.org/software/make/manual/html_node/Choosing-the-Shell.htmlIze
Does not works on Windows The system cannot find the file specified.Sherrill
U
157

This works with the latest. I think it's the shortest and most declarative way to do it.

virtualenv --clear MYENV

But why not just delete and recreate the virtualenv?

Immutability rules. Besides it's hard to remember all those piping and grepping the other solutions use.

Unspoiled answered 26/7, 2012 at 15:15 Comment(4)
Is this effectively the same as running wipeenv? virtualenvwrapper.readthedocs.org/en/latest/…Hickey
Actually — it seems (from what I just ran into) whereas wipeenv while within the environment throws an error and doesn't remove anything if used in the context of a pip install -e development build, attempting to use virtualenv --clear MYENV doesn't throw an error and removes none of the packages that you may have installed previously in the environment. At least this is the case on OSX. See bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… for further info.Szymanski
wipeenv is an alias provided by virtualenvwrapper, so not everyone has it.Bronwynbronx
well, this is kind of a dirty trick, but works like magic. I would prefer that everyone to use pip uninstall -r requirements.txt -y. It makes a great clean up.Garaway
D
77

I managed it by doing the following:

  1. Create the requirements file called reqs.txt with currently installed packages list
pip freeze > reqs.txt
  1. Then uninstall all the packages from reqs.txt
# -y means remove the package without prompting for confirmation
pip uninstall -y -r reqs.txt

I like this method as you always have a pip requirements file to fall back on should you make a mistake. It's also repeatable, and it's cross-platform (Windows, Linux, MacOs).

Desmarais answered 29/10, 2019 at 11:32 Comment(0)
J
67

Other answers that use pip list or pip freeze must include --local else it will also uninstall packages that are found in the common namespaces.

So here are the snippet I regularly use

 pip freeze --local | xargs pip uninstall -y

Ref: pip freeze --help

Jacquiline answered 3/8, 2017 at 4:49 Comment(2)
This worked until it hit a package that produced this error: ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.. Then I couldn't uninstall any more modules.Toxicology
This will include the packages from distribution repositiories. The --user from https://mcmap.net/q/45433/-how-do-i-remove-all-packages-installed-by-pip then comes very handy despite the complaints in the first comment there. But for some reason even that included packages installed in /usr/li64/... even though the number of packages was much smaller.Greisen
I
46

Method 1 (with pip freeze)

pip freeze | xargs pip uninstall -y

Method 2 (with pip list)

pip list | awk '{print $1}' | xargs pip uninstall -y

Method 3 (with virtualenv)

virtualenv --clear MYENV
Iasis answered 5/6, 2016 at 13:25 Comment(2)
Method 2 (pip list) works great until you have pip accidentally uninstall itself -_-Obryant
Method 2 didn't work in my case because there is a header in the list which needs to be ignored. This one worked: pip list | awk '{print $1}' | grep -vE "^pip$|^Package$|^---" | xargs pip uninstall -yPhysicochemical
M
40

On Windows if your path is configured correctly, you can use:

pip freeze > unins && pip uninstall -y -r unins && del unins

It should be a similar case for Unix-like systems:

pip freeze > unins && pip uninstall -y -r unins && rm unins

Just a warning that this isn't completely solid as you may run into issues such as 'File not found' but it may work in some cases nonetheless

EDIT: For clarity: unins is an arbitrary file which has data written out to it when this command executes: pip freeze > unins

That file that it written in turn is then used to uninstall the aforementioned packages with implied consent/prior approval via pip uninstall -y -r unins

The file is finally deleted upon completion.

Mackinnon answered 6/12, 2015 at 14:1 Comment(0)
I
34

I use the --user option to uninstall all the packages installed in the user site.

pip3 freeze --user | xargs pip3 uninstall -y
Inconspicuous answered 1/4, 2020 at 7:56 Comment(5)
I believe this answer doesn't add much new information, I would rather have suggested an improvement to another already existing similar answer such as this one: https://mcmap.net/q/45433/-how-do-i-remove-all-packages-installed-by-pipCoralyn
If you are using a virtualenv and get ERROR: You must give at least one requirement to uninstall, remove the --user partDalesman
pip3 freeze | xargs pip3 uninstall -y ==> ` PermissionError: [Errno 13] Permission denied: '/usr/local/bin/ap' -> '/tmp/pip-uninstall-q9gzbj0d/ap'`Dosser
@SL5net. You might need to run it as superuser. Something like sudo sh -c 'pip3 freeze | xargs pip3 uninstall -y' (The added sh -c and quotes are because pipe doesnt tend to play nicely with sudo) Or you could just do your command as root, but I dont recomend that as its not a great habit to be in. shelling about in root makes it pretty easy to accidently murder your system, trust me, bitter experience talking here.Maines
Good point of --user option. Because --local lists all packages installed locally, not user ones.Zayas
S
30

Best way to remove all packages from the virtual environment.

Windows PowerShell:

pip freeze > unins ; pip uninstall -y -r unins ; del unins

Windows Command Prompt:

pip freeze > unins && pip uninstall -y -r unins && del unins

Linux:

pip3 freeze > unins ; pip3 uninstall -y -r unins ; rm unins
Seligman answered 14/9, 2022 at 18:40 Comment(3)
Windows no such option: -y ran without -y option but it didn't delete any packagesMicrobalance
@Microbalance it worked for me in votes and see the votes. FYI, I tried this windows 10 and windows 11 operating systems.Seligman
It is not Windows it is PowerShell. Windows - cmd: &, PowerShell: ;Microbalance
R
24

For Windows users, this is what I use on Windows PowerShell

 pip uninstall -y (pip freeze)
Reconciliatory answered 23/3, 2018 at 12:57 Comment(0)
D
20

The quickest way is to remake the virtualenv completely. I'm assuming you have a requirements.txt file that matches production, if not:

# On production:
pip freeze > reqs.txt

# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
Duyne answered 28/6, 2012 at 15:37 Comment(1)
Does this even handle the case where there was a editable install (basically a setuptools develop mode install) that created a local .egg-info file that then interfered with the rest of the installation/uninstallation process? Since it's a set of files it doesn't seem to know how to handle their presence, and rather than uninstalling anything it makes a local directory structure under MYENV complete with: ` > New python executables in MYENV/bin/python3.4 > Also creating executable in MYENV/bin/python > Installing setuptools, pip, wheel...done.` But MYENV hasn't reset the environment!Szymanski
L
20

First, add all package to requirements.txt

pip freeze > requirements.txt

Then remove all

pip uninstall -y -r requirements.txt 
Laaspere answered 8/1, 2019 at 10:3 Comment(0)
C
17

Using virtualenvwrapper function:

wipeenv

See wipeenv documentation

Classis answered 10/9, 2016 at 4:50 Comment(1)
If you are using virtualenvwrapper, type wipeenvPeonage
S
14

Its an old question I know but I did stumble across it so for future reference you can now do this:

pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...

-r, --requirement file

Uninstall all the packages listed in the given requirements file. This option can be used multiple times.

from the pip documentation version 8.1

Swindle answered 23/3, 2016 at 14:33 Comment(0)
F
10
pip uninstall `pip freeze --user`

The --user option prevents system-installed packages from being included in the listing, thereby avoiding /usr/lib and distutils permission errors.

Foozle answered 3/1, 2023 at 0:25 Comment(1)
See also: stackoverflow.com/a/74988269.Foozle
B
7

(adding this as an answer, because I do not have enough reputation to comment on @blueberryfields 's answer)

@blueberryfields 's answer works well, but fails if there is no package to uninstall (which can be a problem if this "uninstall all" is part of a script or makefile). This can be solved with xargs -r when using GNU's version of xargs:

pip freeze --exclude-editable | xargs -r pip uninstall -y

from man xargs:

-r, --no-run-if-empty

If the standard input does not contain any nonblanks, do not run the command. Normally, the command is run once even if there is no input. This option is a GNU extension.

Brython answered 5/7, 2019 at 11:24 Comment(0)
D
7
pip3 freeze --local | xargs pip3 uninstall -y

The case might be that one has to run this command several times to get an empty pip3 freeze --local.

Detribalize answered 17/10, 2019 at 18:26 Comment(1)
This breaks on editably installed packages right nowPotentiality
G
3

This was the easiest way for me to uninstall all python packages.

from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
    system("pip3 uninstall {} -y -q".format(i.key))
Geerts answered 18/6, 2017 at 20:6 Comment(0)
G
3

This works on my windows system

pip freeze > packages.txt && pip uninstall -y -r packages.txt && del packages.txt

The first part pip freeze > packages.txt creates a text file with list of packages installed using pip along with the version number

The second part pip uninstall -y -r packages.txt deletes all the packages installed without asking for a confirmation prompt.

The third part del packages.txt deletes the just now created packages.txt.

Glad answered 23/6, 2021 at 11:15 Comment(0)
L
2

Cross-platform support by using only pip:

#!/usr/bin/env python

from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions

pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
    package.project_name
    for package in
    get_installed_distributions()
    if not package.location.endswith('dist-packages')
])

options.yes = True  # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction

try:
    print pip_uninstall.run(options, args)
except OSError as e:
    if e.errno != 13:
        raise e
    print >> stderr, "You lack permissions to uninstall this package.
                      Perhaps run with sudo? Exiting."
    exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.
Leff answered 21/2, 2015 at 3:45 Comment(0)
C
2

the easy robust way cross-platform and work in pipenv as well is:

pip freeze 
pip uninstall -r requirement

by pipenv:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

but won't update piplock or pipfile so be aware

Casaba answered 11/10, 2019 at 18:10 Comment(0)
C
2

On Windows if your path is configured correctly, you can use:

pip freeze > unins && pip uninstall -y -r unins && del unins
Certification answered 19/4, 2021 at 18:53 Comment(0)
T
2

Why not just rm -r .venv and start over?

Torquay answered 12/8, 2022 at 18:15 Comment(1)
I am not very experienced in Python but this is what I had in mind too.Bushel
I
1

For Windows, using command prompt, deleting all the installed packages in a virtual environment (after the environment is active):

for /f %i in ('pip freeze --local') do pip uninstall -y %i
Iata answered 30/10, 2023 at 18:41 Comment(0)
C
0

This is the command that works for me:

pip list | awk '{print $1}' | xargs pip uninstall -y
Ceyx answered 2/6, 2016 at 22:12 Comment(0)
U
0

If you're running virtualenv:

virtualenv --clear </path/to/your/virtualenv>

for example, if your virtualenv is /Users/you/.virtualenvs/projectx, then you'd run:

virtualenv --clear /Users/you/.virtualenvs/projectx

if you don't know where your virtual env is located, you can run which python from within an activated virtual env to get the path

Unmake answered 27/10, 2016 at 21:57 Comment(0)
S
0

In Command Shell of Windows, the command pip freeze | xargs pip uninstall -y won't work. So for those of you using Windows, I've figured out an alternative way to do so.

  1. Copy all the names of the installed packages of pip from the pip freeze command to a .txt file.
  2. Then, go the location of your .txt file and run the command pip uninstall -r *textfile.txt*
Sletten answered 26/12, 2017 at 6:39 Comment(0)
C
0

If you are using pew, you can use the wipeenv command:

pew wipeenv [env]

Climb answered 11/1, 2019 at 10:57 Comment(0)
S
0

I simply wanted to remove packages installed by the project, and not other packages I've installed (things like neovim, mypy and pudb which I use for local dev but are not included in the app requirements). So I did:

cat requirements.txt| sed 's/=.*//g' | xargs pip uninstall -y

which worked well for me.

Stranglehold answered 20/1, 2021 at 23:39 Comment(0)
Z
0

Select Libraries To Delete From This Folder:

C:\Users\User\AppData\Local\Programs\Python\Python310\Lib\site-packages

Zaidazailer answered 11/12, 2021 at 9:5 Comment(1)
Although this does delete all packages (and more), it doesn't do so with pip as the question asked.Scevo
H
0

You can use a simple loop to remove all packages installed by pip.

Here is the command for Windows:

for /f "delims=" %i in ('pip freeze') do pip uninstall -y "%i"

%i is used as a loop variable, and you should run this command in the same directory where pip is located, or you can provide the full path to pip if it's not in your system's PATH.

Hellen answered 1/8, 2023 at 13:21 Comment(0)
S
-1

Pip has no way of knowing what packages were installed by it and what packages were installed by your system's package manager. For this you would need to do something like this

for rpm-based distros (replace python2.7 with your python version you installed pip with):

find /usr/lib/python2.7/ |while read f; do
  if ! rpm -qf "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

for a deb-based distribution:

find /usr/lib/python2.7/ |while read f; do
  if ! dpkg-query -S "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

then to clean up empty directories left over:

find /usr/lib/python2.7 -type d -empty |xargs rm -fr

I found the top answer very misleading since it will remove all (most?) python packages from your distribution and probably leave you with a broken system.

Sorcha answered 4/10, 2017 at 12:47 Comment(1)
With all due respect, this seems comparable. Why not dpkg-query -S '/usr/lib/python2.7/*', extract the names, and dpkg-query -L each name to dump the associated files? It already has the manifests prepared. My main objection is that instead of targeting packages installed anywhere but by pip, you've targeted packages installed by anything other than the manager you expect, and in a location that pip generally shouldn't be touching. pip list -l lists the packages it installed locally, and some will even pip install --target=.... Removing all currently empty dirs will bite you too!Irreproachable
S
-2

In my case, I had accidentally installed a number of packages globally using a Homebrew-installed pip on macOS. The easiest way to revert to the default packages was a simple:

$ brew reinstall python

Or, if you were using pip3:

$ brew reinstall python3
Stenger answered 18/5, 2017 at 21:28 Comment(5)
This answer assumes too much about the environment and doesn't directly solve the problem if you are using pyenv for example.Inevasible
@Inevasible Well sure if you're using pyenv, then you would need to do something different. In the common case that you're not, I believe this is the simplest and least hacky solution. Note that this condition is explicitly stated at the beginning of the answer.Stenger
The OP asked about virtualenvs. He made no specific mention of using a Mac or brew to install Python. Therefore you cannot assume the OS or brew was used - and this answer will not solve ALL conditions. If you focus on solving for the environment using a tool such as pip - you will address the context of the environment you are within. Hope that makes sense.Inevasible
@Inevasible I understand your position. We can agree to disagree. I just want to help out the people from Google who click on a link labelled "What is the easiest way to remove all packages installed by pip?" when they really want to remove all packages installed globally by pip.Stenger
Agreed with @RadonRosborough, the link title is representative of why I landed here, even if the OP does not actually ask the same question.Pili

© 2022 - 2025 — McMap. All rights reserved.