Как обнаружить и удалить пакеты Python, установленные через pip?

73

Я случайно установил пакеты Python в свою систему, используя pipвместо apt-get. Я сделал это двумя способами:

  • используя старую версию virtualenv, я забыл добавить --no-site-packagesпри создании virtualenv - после этого, когда я вызывал pip install, пакеты Python устанавливались в систему, а не в virtualenv
  • в правильной настройке virtualenv я набрал sudo pip install somepackage- sudo установлен в систему, а не virtualenv

Я случайно заметил это, потому что набрал pip freezeтекст за пределами virtualenv и обнаружил в списке некоторые пакеты Python, которых там быть не должно. Итак, теперь мой вопрос:

  • как определить все пакеты Python, которые были ошибочно установлены в системе (то есть пакеты Python, которые появляются в pip freezeсписке, но не были установлены вместе apt-get)?
  • как мне их удалить?
david.libremone
источник

Ответы:

56

Ubuntu Oneiric (и я ожидаю, что и более новые версии) устанавливают пакеты pip в /usr/local/lib/python2.7/dist-packagesи aptпакеты в /usr/lib/python2.7/dist-packages. Так что просто проверьте прежний каталог и sudo pip uninstallкаждый пакет, который вы там найдете.

Capi Etheriel
источник
12
Я стал жестоким и выдан sudo rm -r /usr/local/lib/python2.7. Все идет нормально.
Apteryx,
@Apteryx, я сделал то же самое /usr/local/lib/python3.5, и через некоторое время обновление update-notifier-commonпакета не удалось из-за отсутствия sixпакета Python 3 . Я закончил установку sixс sudo -H pip3 install six.
Алексей
2
@Apteryx, черт возьми, черт возьми! Я сделал то же самое, и теперь вся моя система облажалась! потому что почти все в Ubuntu полагается на Python!
Юкашима Хуксай
Я заметил, что у меня теперь есть куча испорченных исполняемых файлов /usr/local/bin/(некоторое время назад я просто удалил /usr/local/lib/python3.5и переключился на conda ).
Алексей
22

В настоящее время Pip игнорирует команды удаления, которые пытаются удалить то, что принадлежит ОС. Это не ошибка, как это происходит с отсутствующим пакетом. Итак, теперь вы можете удалить с помощью следующего процесса:

pip freeze > dump.txt

Отредактируйте выведенный файл, чтобы удалить все -eстроки «редактируемой установки», все после ==знака ( %s;==.*;;gв vim), поменяйте местами новые строки на пробелы ( %s;\n; ;gв vim). Затем вы можете удалить все ненужные пакеты с

cat dump.txt | xargs sudo pip uninstall -y

Я должен был сделать эту процедуру дважды, потому что несколько пакетов были установлены в ~/.local/libтоже время.

Генри Шрайнер
источник
1
Это должен быть принятый ответ для меня
Nam G VU
3
Если кто-то хочет безрезультатную однострочку:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Бенуа Даффез
4
Осторожный! Это зависит от того, поставляет ли ваша ОС специальную версию pip. На archlinux с pipудовольствием удаляет системные пакеты. С другой стороны, pipна Debian Джесси жалуется и ошибается:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Томас Г.
1
тебе нужен судо? - это определенно должен быть принятый ответ
Джонатан
6

AFAIK sudo pip installустановится на /usr/local/lib/pythonVERSION/dist-packages. Вам нужно запустить, sudo pip uninstallчтобы удалить пакеты всей системы. Кажется, что он pip freezeищет метаданные пакета и перечисляет все, что установлено, то есть как из pip, так и из apt-get вне virtualenvs. В -lвиртуальной среде есть возможность перечислить пакеты, применимые только к этой виртуальной среде, но, похоже, это случай по умолчанию и в виртуальной среде. Я думаю, что вы можете просто удалить связанные пакеты, /usr/local/lib/pythonVERSION/dist-packagesно не очень удобный метод, я думаю.

sagarchalise
источник
5

Чтобы удалить пакет, установленный через pip, просто нажмите Ctrl+ Alt+ Tна клавиатуре, чтобы открыть терминал. Когда он откроется, выполните команду ниже.

pip uninstall < package-name >

Искать пакеты

pip search <package you want to search for>

Чтобы определить, какие пакеты Python были установлены с помощью pip, введите freezeкоманду, которая выдаст вам список установленных пакетов и их версий. Я бы предложил удалить все экземпляры и переустановить с помощью sudo apt-getкоманды

sudo apt-get install python3
Митч
источник
Как определить, какие пакеты Python были установлены с помощью pip, а какие с помощью apt-get? можно ли еще, pip uninstallесли бы я использовал sudo pip installв первую очередь?
david.libremone
@ d3vid pip freezeпоказывает только установленные пакеты (AFAICS).
Оли
1
@oli pip freeze, по крайней мере, точно, также перечисляет пакеты, установленные apt, как описывают другие ответы здесь.
nealmcb
0

Мне нужно было безопасно очистить дисковое пространство от пакетов Python. Хотя это полная очистка пакетов, мне нужно было также перенести версии Python, чтобы старые пакеты не требовались. Я использовал следующее, чтобы получить все мои имена пакетов, пропустить первые 2 строки и получить первый столбец, а также удалить без участия пользователя:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}
m1st0
источник
-2

Это как-то связано с Homebrew. У меня не было проблем с pyodbc на моем Mac Air, пока я не установил Homebrew и не использовал его для нескольких вещей. Я нашел эту тему на github, которая заканчивается решением, которое работает для меня.

«Если у вас есть Homebrew, просто установите заголовки ODBC:

$ brew install unixodbc

и снова запустите «pip install pyodbc».

Это на 100% решило проблему для меня и заняло всего минуту. Дать ему шанс.

полярный геофизический спутник
источник
может быть, вам нужно опубликовать это в Ask Different? apple.stackexchange.com
david.libremone