desinstalação do python setup.py

787

Eu instalei um pacote python com python setup.py install .

Como eu o desinstalo?

flybywire
fonte
52
A resposta aceita está desatualizada. Use pip uninstall <your_package>. Consulte stackoverflow.com/questions/1231688/… .
Joachim W
21
A desinstalação do pip não é mais uma resposta válida. Aqui está a prova. [sri @ localhost python] $ pip uninstall foo DEPRECAÇÃO: A desinstalação de um projeto instalado do distutils (foo) foi descontinuada e será removida em uma versão futura. Isso se deve ao fato de que a desinstalação de um projeto distutils irá desinstalar apenas parcialmente o projeto.
shrewmouse
@shrewmouse que não aparece mais.
JC Rocamonde
@JCRocamonde Com um pacote que eu criei, a versão mais recente do pip mostra, 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 isso ainda é um problema.
Josh
@ Na parte superior do seu arquivo setup.py, faça "de setuptools import setup" em vez de "from distutils.core import setup".
bigjake 21/06/19

Respostas:

977

Nota: Evite usar o python setup.py installusopip install .

Você precisa remover todos os arquivos manualmente e também desfazer quaisquer outros itens que a instalação fez manualmente.

Se você não souber a lista de todos os arquivos, poderá reinstalá-lo com a --recordopção e dar uma olhada na lista que produz.

Para gravar uma lista de arquivos instalados, você pode usar:

python setup.py install --record files.txt

Depois de desinstalar, você pode usar o xargs para fazer a remoção:

xargs rm -rf < files.txt

Ou, se você estiver executando o Windows, use o Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

Em seguida, exclua também o diretório que contém, por exemplo, /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/em macOS. Não possui arquivos, mas o Python ainda importará um módulo vazio:

>>> import my_module
>>> my_module.__file__
None

Uma vez excluído, o Python mostra:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'
Martin v. Löwis
fonte
6
Se isso não funcionar, adicione o sudo da seguinte maneira:cat files.txt | xargs sudo rm -rf
saroele
21
Isso vai atrapalhar os arquivos com espaços. Veja minha resposta abaixo: stackoverflow.com/a/25209129/14456
Ian Kelling
1
Como posso reinstalar o pacote em que tenho o código fonte do setup.py?
アレックス
5
Isso também deixa os diretórios vazios em seu lugar.
Dilawar
3
Olá, tentei sua sugestão, para alguns dos arquivos quando tento cat files.txt | xargs rm -rf diz permissão negada, mesmo no modo sudo, por exemplo, para / usr / local / bin / pydoc ou / usr / local / bin / idle Alguma idéia de por que?
212

Para mim, o seguinte funciona principalmente:

possui pip instalado, por exemplo:

$ easy_install pip

Verifique como o seu pacote instalado é nomeado do ponto de vista do pip:

$ pip freeze

Isso deve listar os nomes de todos os pacotes que você instalou (e que foram detectados pelo pip). O nome pode demorar um pouco e, em seguida, use apenas o nome do pacote mostrado no e depois #egg=. Na maioria dos casos, você também pode ignorar a parte da versão (o que segue ==ou- ).

Em seguida, desinstale o pacote:

$ pip uninstall package.name.you.have.found

Se pedir confirmação sobre a remoção do pacote, você será sortudo e ele será removido.

O pip deve detectar todos os pacotes que foram instalados pelo pip. Ele também deve detectar a maioria dos pacotes instalados via easy_install ou setup.py, mas isso pode, em alguns casos raros, falhar.

Aqui está uma amostra real do meu teste local com o pacote nomeado ttr.rdstmcno MS Windows.

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

Editar 20-05-2015

Tudo o que está escrito acima ainda se aplica, de qualquer forma, existem pequenas modificações disponíveis agora.

Instale o pip no python 2.7.9 e python 3.4

As versões recentes do python vêm com um pacote que ensurepippermite instalar o pip mesmo quando está offline:

$ python -m surepip --upgrade

Em alguns sistemas (como o Debian Jessie), isso não está disponível (para evitar a interrupção da instalação do sistema python).

Usando grepoufind

Os exemplos acima assumem que você grepinstalou. Eu tinha (na época em que eu tinha o MS Windows na minha máquina) instalado um conjunto de utilitários Linux (incluindo grep). Como alternativa, use o MS Windows nativo findou simplesmente ignore essa filtragem e encontre o nome em uma lista um pouco mais longa de pacotes python detectados.

Jan Vlcinsky
fonte
1
qual ferramenta / versão de embalagem você está usando para que isso funcione? ( distutils, distribute, Etc ...)
Ciro Santilli郝海东冠状病六四事件法轮功
1
Eu uso setuptools. Você pode verificar bitbucket.org/vlcinsky/ttr.aws.utils.s3 (o que não é perfeito). De qualquer forma, estou bastante descontente com o uso de pacotes de namespace, em algum momento a importação é interrompida sem motivo visível. Mas é outra história.
Jan Vlcinsky
1
me corrigindo. Mesmo importando setuptools, na verdade eu uso distribute. Outra lição: ao instalar meu próprio pacote do pypi e planejar desenvolver outro localmente compartilhando o mesmo espaço para nome, não use $ pip install <the package> , use $ easy_install <the package>; caso contrário, você entrará em conflito ao importar seu pacote de desenvolvimento.
Jan Vlcinsky
1
Para ajudar os outros: como não sou root, instalo tudo em minha casa. Aqui está o que eu fiz easy_install --user --prefix=$HOME pip. Então eu adicionei o seguinte no meu PATH: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/bine ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre
3
Essa resposta deve ser aceita, pois é muito mais fácil e o pip geralmente vem com o Python de qualquer maneira. É simples de usar no prompt de comando / terminal - pip uninstall moduleou python -m pip uninstall moduledeve funcionar. Também deve ser multiplataforma, como faz parte do Python.
Edward
81

A resposta nº 1 tem problemas:

  • Não funciona no mac.
  • Se for instalado um arquivo que inclua espaços ou outros caracteres especiais, o xargscomando falhará e excluirá os arquivos / diretórios correspondentes às palavras individuais.
  • o -rin rm -rfé desnecessário e, na pior das hipóteses, pode excluir coisas que você não deseja.

Em vez disso, para unix-like:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

E para janelas:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

Também há problemas insolúveis com a desinstalação setup.py instalação que não o incomodam em um caso típico. Para uma resposta mais completa, consulte esta página da wiki:

https://ofswiki.org/wiki/Uninstalling_setup.py_install

Ian Kelling
fonte
3
Por que você simplesmente não deixa uma sugestão abaixo da votada? Observe que esses "problemas sérios" são sobre casos extremos.
lpapp
17
Deixei um comentário abaixo do votado. Meu comentário está oculto sob o link "carregar mais comentários", no qual poucas pessoas clicam. Eu também dei minha própria resposta porque tinha muito mais a dizer, ie. o link na minha resposta. Além disso, maiúsculas e minúsculas não seria o primeiro termo que me vem à cabeça quando um arquivo tem um espaço nele.
Ian Kelling
Pelo que vale, acho que isso falhará nos nomes de arquivos que contêm novas linhas :) Se algum mantenedor de pacotes é tão ruim, espero nunca descobrir.
Jack O'Connor
2
No OS X Mavericks, pelo menos, o xargs não possui a opção -d. Por quê? Porque a Apple te ama. De qualquer forma, isso tem os mesmos efeitos acima, e é seguro com espaços e outros. É específico do Bash, no entanto. Após executar a instalação com --record to files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski
2
@IanKelling Incorporação de variáveis dentro printfda cadeia de formato irá falhar se a cadeia acontece para conter por exemplo, %ou \caracteres. Sempre forneça uma string de formato: printf '%s\0' "$line"(também evita eco). Embora você pode evitar mais o loop usando apenastr '\n' '\0' < files.txt | xargs -0 rm -f
geirha
39

Primeiro grave os arquivos que você instalou. Você pode repetir este comando, mesmo se você tiver executado anteriormente setup.py install:

python setup.py install --record files.txt

Quando você deseja desinstalar, você pode:

sudo rm $(cat files.txt)

Isso funciona porque o comando rm usa uma lista de arquivos separados por espaços em branco para excluir e seu registro de instalação é exatamente essa lista.

nathan
fonte
Existe uma maneira de verificar não apenas se foi o meu programa que o instalou, mas também se, desde então, nenhum outro aplicativo usou esse recurso? Por exemplo, eu instalei uma ferramenta, para isso, tive que instalar várias bibliotecas, talvez algumas já estivessem instaladas (o que significa que não consigo remover no processo de desinstalação), mas também não consigo remover nada que outras aplicações não instalado porque minha biblioteca tinha instalado pela primeira vez ..
Gabrielle
19

Agora, o python oferece a opção de instalação pipdurante a instalação (eu estou no Windows e pelo menos o python faz isso no Windows!). Considerando que você escolheu instalar pipdurante a instalação do python (na verdade você não precisa escolher porque é o padrão), pipjá está instalado para você. Em seguida, digite o pipprompt de comando e você verá uma ajuda. Você pode encontrar as instruções de uso necessárias lá. Por exemplo, pip listmostra a lista de pacotes instalados. Você pode usar

pip uninstall package_name

desinstalar qualquer pacote que você não deseja mais. Leia mais aqui (documentação do pip) .

Sнаđошƒаӽ
fonte
8

A maneira lenta: simplesmente desinstale no menu de instalação do Windows (se você estiver usando o Windows) ou no comando rpm, desde que você o reinstale depois de criar um pacote de distribuição.

Por exemplo,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

("foo" é um exemplo, é claro).

RedGlyph
fonte
4
Não sei se gosto, mas você entende o pensamento ortogonal. :)
Lennart Regebro
Para ser sincero, não tenho certeza, portanto, "do jeito preguiçoso" ;-) Mas pensei em mencionar que era possível criar um instalador mais "padrão". É estranho que o setup.py não forneça uma maneira limpa de remover pacotes.
RedGlyph 11/10/2009
1
As desinstalações requerem registros centralizados de pacotes instalados e seus arquivos, e não há um. Há discussões em andamento sobre como melhorar essa história e ela pode ser resolvida no Python 2.7 / 3.2 ou 2.8 / 3.3.
Lennart Regebro 11/10/2009
1
@Lennart: não haverá Python 2.8, pelo menos essa é a declaração oficial atual
Piotr Owsiak
2
@PiotrOwsiak: Sim, mas essa não era a afirmação então. 2,8 ainda era uma possibilidade na época e permaneceu até a aprovação do PEP 404, no final do ano passado, eu acho.
Lennart Regebro
6

Vá para o diretório do pacote python e remova o arquivo .egg, por exemplo: No python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

No python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/

user149513
fonte
1
Funciona, a menos que a instalação instale arquivos fora do pacote, como alguns instalam, como o setuptools installs e o comando easy_install.
Lennart Regebro 11/10/2009
3
Normalmente, se um pacote fosse instalado usando o python setup.py conforme especificado pelo OP, não haveria um ovo. OTOH, se houver um porque o easy_install foi usado, a maneira documentada de desinstalar os pacotes é usar o easy_install -m antes de excluir o arquivo egg; caso contrário, as cascas de ovos podem ser deixadas para trás no arquivo easy-install.pth.
Ned Deily
5

Não exatamente respondendo à pergunta, mas algo que me ajuda todos os dias:

Instale seus pacotes com

pip install .

Isso coloca o pacote $HOME/.local. Desinstalar com

pip uninstall <package_name>
Nico Schlömer
fonte
1
pip unistall .não funcionou para mim, mas pip uninstall <package_name>sim, obrigado!
Danijel
4

Provavelmente você pode fazer isso como uma alternativa: -

1) Obtenha a versão python -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> O comando acima fornece a versão atual do python, que é 2.4.3

2) Obtenha o diretório de instalação do python -

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> No comando acima, você pode obter o diretório de instalação que é - /usr/lib/python2.4/site-packages

3) A partir daqui, você pode remover os pacotes e os arquivos python egg

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

Isso funcionou para mim .. E eu fui capaz de desinstalar o pacote que estava me incomodando :)

COD3R
fonte
3

Eu acho que você pode abrir o setup.py, localize o nome do pacote e peça ao pip para desinstalá-lo.

Supondo que o nome esteja disponível em uma variável 'METADATA':

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")
ThorSummoner
fonte
1

Estendendo o que Martin disse, gravar a saída da instalação e um pouco de script do bash faz o truque muito bem. Aqui está o que eu faço ...

for i in $(less install.record);
sudo rm $i;
done;

E pronto. Desinstalado.

seabass
fonte
2
Muito mais fácil escrever isso como sudo xargs rm -v < install.record.
poolieby
1

Se você ainda possui arquivos que deveriam ser excluídos após a reinstalação de um pacote, verifique se a pasta buildtambém foi excluída. Portanto, supondo que esse pkgseja o pacote que você deseja excluir:

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

Obtenha exercícios para python3 e exclua o pacote e seu arquivo * .egg-info

Ulises Rosas-Puchuri
fonte
1

At {virtualenv}/lib/python2.7/site-packages/(se não estiver usando virtualenv então {system_dir}/lib/python2.7/dist-packages/)

  • Remova a lima do ovo (por exemplo distribute-0.6.34-py2.7.egg)
  • Se houver algum arquivo easy-install.pth, remova a linha correspondente (deve ser um caminho para o diretório de origem ou um arquivo egg).
Bhindi
fonte
0

Eu havia executado o "python setup.py install" em algum momento no passado acidentalmente no meu ambiente global e tive muita dificuldade em desinstalar. Essas soluções não ajudaram. "pip uninstall" não funcionou com "Não foi possível desinstalar 'splunk-appinspect'. Não foram encontrados arquivos para desinstalar." "sudo pip uninstall" não funcionou "Não é possível desinstalar o requisito splunk-appinspect, não instalado". Tentei desinstalar o pip, excluir o cache do pip, pesquisar o pacote no disco rígido, etc.

"pip show" acabou me levando à solução, o "Location:" estava apontando para um diretório e renomear esse diretório fez com que o pacote fosse removido da lista de pip. Renomeei o diretório de volta, e ele não reapareceu na lista de pips, e agora posso reinstalar meu pacote em um virtualenv.

mmacvicar
fonte
0

Eu corri python setup.py installuma vez no meu PyCharm, ele instala todos os pacotes no meu ambiente base conda. Mais tarde, quando eu quero remover todos esses pacotes, pip uninstallnão funciona. Eu tive que excluí-los do /anaconda3/lib/python3.7/site-packages manualmente :(

Portanto, não vejo o motivo pelo qual eles usam o setup.py em vez de gravar o arquivo requirements.txt. O arquivo de requisitos pode ser usado para instalar pacotes no ambiente virtual e não interfere nos pacotes python do sistema.

Yossarian42
fonte
-1

Talvez seja melhor remover arquivos relacionados usando o bash para ler comandos, como o seguinte:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"
Mark Peng
fonte
Esta é uma cópia de uma resposta anterior existente.
Karl Richter