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:
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'
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.
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.
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 --
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:
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.
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
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.
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/
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
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:
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.
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.
pip uninstall <your_package>
. Consulte stackoverflow.com/questions/1231688/… .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.Respostas:
Nota: Evite usar o
python setup.py install
usopip 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
--record
opção e dar uma olhada na lista que produz.Para gravar uma lista de arquivos instalados, você pode usar:
Depois de desinstalar, você pode usar o xargs para fazer a remoção:
Ou, se você estiver executando o Windows, use o Powershell:
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/
emmacOS
. Não possui arquivos, mas o Python ainda importará um módulo vazio:Uma vez excluído, o Python mostra:
fonte
cat files.txt | xargs sudo rm -rf
Para mim, o seguinte funciona principalmente:
possui pip instalado, por exemplo:
Verifique como o seu pacote instalado é nomeado do ponto de vista do pip:
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:
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.rdstmc
no MS Windows.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
ensurepip
permite 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
grep
oufind
Os exemplos acima assumem que você
grep
instalou. 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 nativofind
ou simplesmente ignore essa filtragem e encontre o nome em uma lista um pouco mais longa de pacotes python detectados.fonte
distutils
,distribute
, Etc ...)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.setuptools
, na verdade eu usodistribute
. 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.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 ~/bin
eln -s /home/tflutre/.local/bin/pip2 ~/bin
.pip uninstall module
oupython -m pip uninstall module
deve funcionar. Também deve ser multiplataforma, como faz parte do Python.A resposta nº 1 tem problemas:
xargs
comando falhará e excluirá os arquivos / diretórios correspondentes às palavras individuais.-r
inrm -rf
é desnecessário e, na pior das hipóteses, pode excluir coisas que você não deseja.Em vez disso, para unix-like:
E para janelas:
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
fonte
OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
printf
da 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
Primeiro grave os arquivos que você instalou. Você pode repetir este comando, mesmo se você tiver executado anteriormente
setup.py install
:Quando você deseja desinstalar, você pode:
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.
fonte
Agora, o python oferece a opção de instalação
pip
durante a instalação (eu estou no Windows e pelo menos o python faz isso no Windows!). Considerando que você escolheu instalarpip
durante a instalação do python (na verdade você não precisa escolher porque é o padrão),pip
já está instalado para você. Em seguida, digite opip
prompt de comando e você verá uma ajuda. Você pode encontrar as instruções de uso necessárias lá. Por exemplo,pip list
mostra a lista de pacotes instalados. Você pode usardesinstalar qualquer pacote que você não deseja mais. Leia mais aqui (documentação do pip) .
fonte
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,
("foo" é um exemplo, é claro).
fonte
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/
fonte
Não exatamente respondendo à pergunta, mas algo que me ajuda todos os dias:
Instale seus pacotes com
Isso coloca o pacote
$HOME/.local
. Desinstalar comfonte
pip unistall .
não funcionou para mim, maspip uninstall <package_name>
sim, obrigado!Provavelmente você pode fazer isso como uma alternativa: -
1) Obtenha a versão python -
-> O comando acima fornece a versão atual do python, que é 2.4.3
2) Obtenha o diretório de instalação do python -
-> 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
Isso funcionou para mim .. E eu fui capaz de desinstalar o pacote que estava me incomodando :)
fonte
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':
fonte
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 ...
E pronto. Desinstalado.
fonte
sudo xargs rm -v < install.record
.Se você ainda possui arquivos que deveriam ser excluídos após a reinstalação de um pacote, verifique se a pasta
build
também foi excluída. Portanto, supondo que essepkg
seja o pacote que você deseja excluir:Obtenha exercícios para python3 e exclua o pacote e seu arquivo * .egg-info
fonte
At
{virtualenv}/lib/python2.7/site-packages/
(se não estiver usando virtualenv então{system_dir}/lib/python2.7/dist-packages/
)distribute-0.6.34-py2.7.egg
)easy-install.pth
, remova a linha correspondente (deve ser um caminho para o diretório de origem ou um arquivo egg).fonte
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.
fonte
Eu corri
python setup.py install
uma vez no meu PyCharm, ele instala todos os pacotes no meu ambiente base conda. Mais tarde, quando eu quero remover todos esses pacotes,pip uninstall
nã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.
fonte
Talvez seja melhor remover arquivos relacionados usando o bash para ler comandos, como o seguinte:
fonte