Como detectar e remover pacotes Python instalados via pip?

73

Instalei acidentalmente pacotes Python no meu sistema usando em pipvez de apt-get. Eu fiz isso de duas maneiras:

  • usando uma versão mais antiga do virtualenv, esqueci de anexar --no-site-packagesao criar o virtualenv - depois disso, quando liguei pip install, os pacotes Python foram instalados no sistema em vez do virtualenv
  • em um virtualenv configurado corretamente, digitei sudo pip install somepackage- o sudo instalado no sistema em vez do virtualenv

Por acaso notei isso porque digitei pip freezefora de um virtualenv e vi alguns pacotes Python listados que não deveriam estar lá. Então agora minha pergunta é:

  • como identifico todos os pacotes Python que foram instalados erroneamente no sistema (ou seja, pacotes Python que aparecem na pip freezelista, mas não foram instalados apt-get)?
  • como faço para removê-los?
david.libremone
fonte

Respostas:

56

O Ubuntu Oneiric (e também espero versões mais novas) instala pacotes pip /usr/local/lib/python2.7/dist-packagese aptpacotes /usr/lib/python2.7/dist-packages. Portanto, basta verificar o diretório anterior e sudo pip uninstalltodos os pacotes que você encontrar lá.

Capi Etheriel
fonte
12
Eu fui brutal e emiti sudo rm -r /usr/local/lib/python2.7. Por enquanto, tudo bem.
Apteryx
@Apteryx, fiz o mesmo com /usr/local/lib/python3.5e, após algum tempo, uma atualização do update-notifier-commonpacote falhou devido à falta do sixpacote Python 3 . Acabei instalando sixcom sudo -H pip3 install six.
Alexey
2
@Apteryx, caramba, cara! Eu fiz o mesmo e agora todo o meu sistema está todo fodido! porque quase tudo no ubuntu depende de python!
yukashima huksay
Percebi que agora tenho um monte de executáveis ​​quebrados /usr/local/bin/(há algum tempo eu apenas removi /usr/local/lib/python3.5e mudei para o conda ).
28418 Alexey
22

Atualmente, o Pip ignora os comandos de desinstalação que tentam desinstalar algo de propriedade do sistema operacional. Não apresenta erros, como ocorre com um pacote ausente. Portanto, agora você pode desinstalar com o seguinte processo:

pip freeze > dump.txt

Edite o arquivo despejado para remover qualquer linha de -e"instalação editável", tudo após o ==sinal ( %s;==.*;;gno vim), troque as novas linhas por espaços ( %s;\n; ;gno vim). Em seguida, você pode desinstalar todos os pacotes não pertencentes ao

cat dump.txt | xargs sudo pip uninstall -y

Eu tive que fazer esse procedimento duas vezes, porque alguns pacotes também foram instalados ~/.local/lib.

Henry Schreiner
fonte
11
Esta deve ser a resposta aceita para mim
Nam G VU
3
Se alguém quiser um one-liner sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
vimless
4
Cuidado! Isso depende se o seu sistema operacional envia uma versão especial do pip. No archlinux, pipdesinstala felizmente os pacotes do sistema. Por outro lado, pipno debian jessie se queixa e erros:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.
11
você precisa do sudo? - este deve ser definitivamente a resposta aceita
Jonathan
6

O AFAIK sudo pip installserá instalado em /usr/local/lib/pythonVERSION/dist-packages. Você precisa executar sudo pip uninstallpara desinstalar os pacotes em todo o sistema. Parece que pip freezeprocura por metadados do pacote e listará qualquer coisa instalada, isto é, tanto do pip quanto do apt-get fora do virtualenvs. Há uma -lopção dentro do ambiente virtual para listar pacotes aplicáveis ​​apenas a esse ambiente virtual, mas parece ser o caso padrão também dentro do ambiente virtual. Eu acho que você pode excluir pacotes relacionados /usr/local/lib/pythonVERSION/dist-packagestambém, mas não é um método muito conveniente, eu acho.

sagarchalise
fonte
5

Para remover um pacote instalado via pip, basta pressionar Ctrl+ Alt+ Tno teclado para abrir o Terminal. Quando abrir, execute o comando abaixo.

pip uninstall < package-name >

Para procurar pacotes

pip search <package you want to search for>

Para determinar quais pacotes Python foram instalados pelo pip, pelo freezecomando que fornecerá uma lista dos pacotes instalados e suas versões. Sugiro remover todas as instâncias e reinstalar usando o sudo apt-getcomando

sudo apt-get install python3
Mitch
fonte
como determino quais pacotes Python foram instalados pelo pip e quais pelo apt-get? ainda pip uninstallposso usar sudo pip installem primeiro lugar?
David.libremone
O @ d3vid pip freezemostra apenas os pacotes instalados (AFAICS).
Oli
11
O @oli pip freeze, no mínimo preciso, também lista os pacotes instalados pelo apt, como outras respostas aqui descrevem.
Nellmcb 23/10/2013
0

Eu precisava limpar o espaço em disco dos pacotes Python com segurança. Embora essa seja uma limpeza completa dos pacotes, eu precisava mover as versões do Python também, para não precisar de pacotes antigos. Usei o seguinte para obter todos os nomes de meus pacotes, pular as 2 primeiras linhas e pegar a primeira coluna e desinstalar sem a interação do usuário:

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

Isso tem algo a ver com o Homebrew. Não tive problemas com o pyodbc no meu Mac Air até instalar o Homebrew e usá-lo para algumas coisas. Encontrei este tópico no github que termina em uma solução que funcionou para mim.

"Se você possui o Homebrew, basta instalar os cabeçalhos ODBC:

$ brew install unixodbc

e execute "pip install pyodbc" novamente. "

Isso 100% resolveu o problema para mim e levou apenas um momento. Experimente.

Pogo
fonte
talvez você precise postar isso em Ask Different? apple.stackexchange.com
david.libremone