85

I have accidently installed Python packages to my system using pip instead of apt-get. I did this in two ways:

  • using an older version of virtualenv, I forgot to append --no-site-packages when creating the virtualenv - after that when I called pip install, the Python packages where installed to the system rather than the virtualenv
  • in a correctly setup virtualenv, I typed sudo pip install somepackage - the sudo installed to the system rather than the virtualenv

I happened to notice this because I typed pip freeze outside a virtualenv, and spotted some Python packages listed that shouldn't be there. So now my question is:

  • how do I identify all Python packages that have been erroneously installed on the system (that is, Python packages that appear in the pip freeze list, but were not installed with apt-get)?
  • how do I remove them?

7 Answers 7

61

Ubuntu Oneiric (and I expect newer versions too) install pip packages to /usr/local/lib/python2.7/dist-packages, and apt packages to /usr/lib/python2.7/dist-packages. So just check the former directory and sudo pip uninstall every package you find there.

4
  • 14
    I went brutal and issued sudo rm -r /usr/local/lib/python2.7. So far so good.
    – Apteryx
    Sep 22, 2016 at 0:49
  • @Apteryx, i did the same with /usr/local/lib/python3.5, and after a while an upgrade of update-notifier-common package failed because of missing Python 3 six package. I ended up installing six with sudo -H pip3 install six.
    – Alexey
    Apr 8, 2017 at 8:54
  • 7
    @Apteryx god damn you man! I did the same and now my whole system is all fucked up! because almost everything in ubuntu relies on python! Dec 27, 2017 at 12:47
  • 1
    I have noticed that i now have a bunch of broken executables in /usr/local/bin/ (a while ago i just removed /usr/local/lib/python3.5 and switched to conda).
    – Alexey
    Feb 28, 2018 at 12:29
33

Pip currently ignores uninstall commands that try to uninstall something owned by the OS. It doesn't error out, like it does with a missing package. So, now you can uninstall with the following process:

pip freeze > dump.txt

Edit the dumped file to remove any -e "editable install" lines, everything after the == sign (%s;==.*;;g in vim), swap the new lines for spaces (%s;\n; ;g in vim). Then you can uninstall all un-owned packages with

cat dump.txt | xargs sudo pip uninstall -y

I had to do this procedure twice, because a few packages were installed in ~/.local/lib too.


A one-liner to accomplish this:

pip freeze | grep -vP '^(?:#|-e\s)' | sed 's;==.*;;g' | xargs -r sudo pip uninstall -y
6
  • 1
    This should be the accepted answer to me
    – Nam G VU
    Apr 19, 2017 at 10:28
  • 6
    Should anyone want a vimless one-liner: sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ') Apr 20, 2017 at 7:34
  • 7
    Careful! This depends on whether your OS ships a special version of pip. On archlinux pip happily uninstalls system packages. On the other hand, pip on debian jessie complains and errors: Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
    – Thomas G.
    Apr 20, 2017 at 14:37
  • 1
    do you need the sudo? -- this should definitely be the accepted answer
    – Jonathan
    Jul 11, 2017 at 6:49
  • Any guesses what it means if I get "Found existing installation: Routes 2.4.1 Not uninstalling routes at /usr/lib/python3/dist-packages, outside environment /usr Can't uninstall 'Routes'. No files were found to uninstall. " (for every installed package) (on Ubuntu focal) Feb 22, 2021 at 15:31
7

AFAIK sudo pip install will install on /usr/local/lib/pythonVERSION/dist-packages. You need to run sudo pip uninstall to uninstall packages system wide. It seems that pip freeze looks for package metadata and will list anything installed i.e. both from pip as well as apt-get outside of virtualenvs. There is -l option inside virtual environment to list packages only applicable to that virtual environment but it seems to be default case as well inside virtual environment. I think you can just delete related packages on /usr/local/lib/pythonVERSION/dist-packages as well but not very convenient method I guess.

6

To removing a package installed via pip, just press Ctrl+Alt+T on your keyboard to open Terminal. When it opens, run the command below.

pip uninstall < package-name >

To search for packages

pip search <package you want to search for>

To determine which Python packages were installed by pip, by the freeze command, which will give you a list of installed packages and their versions. I would suggest removing all instances, and re-installing using the sudo apt-get command

sudo apt-get install python3
3
  • 1
    how do I determine which Python packages were installed by pip, and which by apt-get? can I still pip uninstall if I used sudo pip install in the first place?
    – lofidevops
    Aug 8, 2012 at 9:42
  • @d3vid pip freeze only shows packages it installed (AFAICS).
    – Oli
    Aug 8, 2012 at 10:22
  • 1
    @oli pip freeze, in precise at least, also lists packages installed by apt, as other answers here describe.
    – nealmcb
    Oct 23, 2013 at 20:37
0

I needed to clean up disk space from Python packages safely. While this is a complete clean out of packages, I needed to move Python versions as well so I did not need old packages. I used the following to get all my package names, skip the first 2 lines and grab the first column, and uninstall without user interaction:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}
0

I used the following to uninstall all the pip packages from my virtual environment:

pip list | tail -n+3 | grep -ve '^#\|^wheel\|^pip\|^setuptools ' | cut -d' ' -f1 | xargs pip uninstall -y

I still keep wheel, pip and setuptools.

Also, pip list is preferable over pip freeze in my case since pip list lists the packages installed with -e with just their names.

-2

This has something to do with Homebrew. I had no issues with pyodbc on my Mac Air until I installed Homebrew and used it for a few things. I found this thread on github that ends in a solution that worked for me.

"If you have Homebrew, just install the ODBC headers:

$ brew install unixodbc

and run "pip install pyodbc" again."

This 100% solved the problem for me and only took a moment. Give it a shot.

1

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .