Como você desinstala um pacote python que foi instalado usando distutils?

92

Você pode simplesmente excluir o diretório da instalação do python ou há algum arquivo remanescente que deve ser excluído?

Hortitude
fonte

Respostas:

45

Isso varia com base nas opções que você passa installe no conteúdo dos arquivos de configuração do distutils no sistema / no pacote. Não acredito que nenhum arquivo seja modificado fora dos diretórios especificados dessas maneiras.

Notavelmente, distutils não tem um comando de desinstalação neste momento.

É também digno de nota que deletar um pacote / ovo pode causar problemas de dependência - utilitários como easy_installtentam aliviar tais problemas.

cdleary
fonte
4
Você pode, por favor, atualizar isso para abordar diretamente a parte dos arquivos remanescentes da questão?
S.Lott
Pensei que sim - nenhum arquivo é criado fora dos diretórios especificados pelos sinalizadores de configuração e instalação do distutils, portanto, quaisquer arquivos "remanescentes" existirão nesses diretórios. Isso varia de pacote para pacote.
cdleary
2
@cdleary: obrigado, mas espero que você simplesmente esclareça e fortaleça sua resposta, e não acrescente um longo tópico de comentários.
S.Lott
2
@ S.Lott: Desculpe, mas não sei sobre qual parte da resposta você quer esclarecimento - você pode ser mais específico?
cdleary
1
msg139773 Data: 2011-07-04 14:35 distutils2 / packaging agora fornece uma função remove e um comando pysetup remove.
Edward
19

As três coisas que são instaladas e que você precisa excluir são:

  1. Pacotes / módulos
  2. Scripts
  3. Arquivos de dados

Agora, no meu sistema Linux, eles residem em:

  1. /usr/lib/python2.5/site-packages
  2. / usr / bin
  3. / usr / share

Mas em um sistema Windows, é mais provável que estejam inteiramente no diretório de distribuição do Python. Não tenho ideia sobre o OSX, exceto que é mais provável que siga o padrão do Linux.

Ali Afshar
fonte
14

Outro hack baseado em timestamp:

  1. Crie uma âncora: touch /tmp/ts
  2. Reinstale o pacote a ser removido: python setup.py install --prefix=<PREFIX>
  3. Remova os arquivos mais recentes que o arquivo âncora: find <PREFIX> -cnewer /tmp/ts | xargs rm -r
maximk
fonte
1
-1. Eu não gosto do | xargs rm -r. Eu recomendo revisar cada arquivo manualmente . No ext4 (e outros sistemas de arquivos), isso findirá listar todas as pastas também. Se o seu prefixo era /usr, você vai deletar/usr/* .
Mateen Ulhaq
8

Sim, é seguro simplesmente excluir qualquer coisa que o distutils esteja instalado. Isso vale para pastas instaladas ou arquivos .egg. Naturalmente, qualquer coisa que dependa desse código não funcionará mais.

Se quiser que funcione novamente, basta reinstalar.

A propósito, se você estiver usando distutils, também considere usar o recurso de várias versões. Ele permite que você tenha várias versões de qualquer pacote único instalado. Isso significa que você não precisa excluir uma versão antiga de um pacote se quiser apenas instalar uma versão mais recente.

Salim Fadhley
fonte
5

No ubuntu 12.04, descobri que o único lugar que você precisa procurar por padrão é em

/usr/local/lib/python2.7/

E simplesmente remova a pasta e o arquivo associados, se houver!

Hydrox24
fonte
Às vezes em / usr / lib / python <2.7 / 3.6>
Vineet
4

Se for para fins de teste e / ou desenvolvimento, setuptools tem um comando de desenvolvimento que atualiza toda vez que você faz uma alteração (para que você não precise desinstalar e reinstalar toda vez que fizer uma alteração). E você pode desinstalar o pacote usando este comando também.

Se você usar isso, tudo o que você declarar como um script será deixado para trás como um arquivo remanescente.

Jason Baker
fonte
4

install --record + xargs rm

sudo python setup.py install --record files.txt
xargs sudo rm -rf < files.txt

remove todos os arquivos, mas deixa diretórios vazios para trás.

Isso não é o ideal, deve ser suficiente para evitar conflitos de pacotes.

E então você pode terminar o trabalho manualmente, se quiser lendo files.txt, ou ser mais corajoso e automatizar a remoção de diretórios vazios também.

Um ajudante seguro seria:

python-setup-uninstall() (
  sudo rm -f files.txt
  sudo python setup.py install --record files.txt && \
  xargs rm -rf < files.txt
  sudo rm -f files.txt
)

Testado em Python 2.7.6, Ubuntu 14.04.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fonte
3

para Python no Windows:

python -m pip uninstall "package_keyword"
uninstall **** (y/n)?
user8074545
fonte
2

Acabei de desinstalar um pacote Python e, embora não tenha certeza se o fiz perfeitamente, estou razoavelmente confiante.

Comecei obtendo uma lista de todos os arquivos relacionados ao python, ordenados por data, supondo que todos os arquivos em meu pacote terão mais ou menos o mesmo carimbo de data / hora e nenhum outro arquivo terá.

Felizmente, tenho o python instalado no /opt/Python-2.6.1; se eu estivesse usando o Python que vem com minha distro Linux, teria que vasculhar tudo /usr, o que demoraria muito.

Então, apenas examinei essa lista e observei com alívio que todas as coisas que eu queria destruir consistiam em um diretório /opt/Python-2.6.1/lib/python2.6/site-packages/module-name/, e um arquivo /opt/Python-2.6.1/lib/python2.6/site-packages/module-x.x.x_blah-py2.6.egg-info,.

Então, acabei de deletar esses.

Veja como obtive a lista de arquivos classificada por data:

find "$@" -printf '%T@ ' -ls | sort -n | cut -d\ -f 2-

(Acho que deve ser GNU "encontrar", a propósito; o sabor que você obtém no OS X não sabe sobre "-printf '% T @'")

Eu uso que todo o tempo.

offby1
fonte
2

Para Windows 7,

Painel de controle -> Programas -> Desinstalar

, então

escolha o pacote python a ser removido.

b_dev
fonte
@Mauricio Não vejo versões antigas na lista, mas posso ver os arquivos egg nos pacotes do site. Isso é um problema?
1

No Mac OSX, exclua manualmente esses 2 diretórios em pathToPython / site-packages / funcionará:

  • {nome do pacote}
  • {packageName} - {version} -info

por exemplo, para remover pyasn1 , que é um projeto instalado com distutils:

  • rm -rf lib / python2.7 / site-packages / pyasn1
  • rm -rf lib / python2.7 / site-packages / pyasn1-0.1.9-py2.7.egg-info

Para descobrir onde está o seu site-packages:

python -m site
Lynne
fonte
1
Funciona conforme o esperado.
c1377554
-1

ERROR: flake8 3.7.9 has requirement pycodestyle<2.6.0,>=2.5.0, but you'll have pycodestyle 2.3.1 which is incompatible. ERROR: nuscenes-devkit 1.0.8 has requirement motmetrics<=1.1.3, but you'll have motmetrics 1.2.0 which is incompatible. Installing collected packages: descartes, future, torch, cachetools, torchvision, flake8-import-order, xmltodict, entrypoints, flake8, motmetrics, nuscenes-devkit Attempting uninstall: torch Found existing installation: torch 1.0.0 Uninstalling torch-1.0.0: Successfully uninstalled torch-1.0.0 Attempting uninstall: torchvision Found existing installation: torchvision 0.2.1 Uninstalling torchvision-0.2.1: Successfully uninstalled torchvision-0.2.1 Attempting uninstall: entrypoints Found existing installation: entrypoints 0.2.3 ERROR: Cannot uninstall 'entrypoints'. 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.

Então eu digito:

conda uninstall entrypoints pip install --upgrade pycodestyle pip install nuscenes-devkit

Feito!

Goodpen
fonte
1
Tente explicar o que você está fazendo e por que, em vez de apenas mostrar a saída do console.
Headhunter Xamd