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

Я случайно установил пакеты 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)?
  • как мне их удалить?

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

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

pip freeze > dump.txt

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

cat dump.txt | xargs sudo pip uninstall -y

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


Однострочный способ достижения этой цели:

pip freeze | grep -vP '^(?:#|-e\s)' | sed 's;==.*;;g' | xargs -r sudo pip uninstall -y

АФАИК 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 как хороший, но не очень удобный метод, я думаю.

Чтобы удалить пакет, установленный с помощью 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. Хотя это полная очистка от пакетов, мне также нужно было переместить версии Python, поэтому мне не нужны были старые пакеты. Я использовал следующее, чтобы получить все имена моих пакетов, пропустить первые 2 строки, захватить первый столбец и удалить без взаимодействия с пользователем:

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

Я использовал следующее, чтобы удалить все пакеты pip из моей виртуальной среды:

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

Я все еще продолжаю wheel, pip и setuptools.

Также, pip list предпочтительнее, чем pip freeze в моем случае с тех пор, как pip list список пакетов, установленных с -e только с их именами.

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

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

$ brew install unixodbc

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

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