@patelshahrukh desinstalar python NÃO remove pacotes pip. por favor EVITAR fazer isso, uma vez que ambos provavelmente não vai funcionar da maneira que você acha que vai, e , dependendo de como você instalar o python, novamente, pode deixar a sua máquina em um estado instável que é mais trabalho para correção .
Encontrei esse trecho como uma solução alternativa. É uma remoção mais graciosa das bibliotecas do que refazer o virtualenv:
pip freeze | xargs pip uninstall -y
Caso você tenha pacotes instalados via VCS, é necessário excluir essas linhas e remover os pacotes manualmente (elevado a partir dos comentários abaixo):
Acho essa uma boa solução, simplesmente porque não remove completamente o ambiente virtual - eu posso ter feito alterações, por exemplo, postactivatequais permanecerão.
Niceguydave #
5
Depois de executar isso, percebi que ele removeu o setuptoolspacote. Resolvi o problema seguindo as instruções aqui: stackoverflow.com/questions/7446187/…
Dan
1
@ gerty3000 sim, isso (como a pergunta faz) remove todos os pacotes instalados em um ambiente virtual. em seu ambiente, talvez as ferramentas de instalação sejam melhor instaladas em um local global?
campos de mirtilo
7
Você também pode usar pip freeze --exclude-editable | xargs pip uninstall -ya ignorar pacotes VCS sem o uso de um padrão grep
Isso funcionará para todos os sistemas Mac, Windows e Linux. Para obter a lista de todos os pacotes pip no arquivo requirements.txt (Nota: Isso substituirá o arquivo requirements.txt, se existir mais, criará o novo, também se você não quiser substituir o antigo requirements.txt, dê um nome de arquivo diferente no comando a seguir, no local requirements.txt).
pip freeze > requirements.txt
Agora, para remover um por um
pip uninstall -r requirements.txt
Se queremos remover tudo de uma vez, então
pip uninstall -r requirements.txt -y
Se você estiver trabalhando em um projeto existente com um requirements.txtarquivo e seu ambiente divergir, basta substituirrequirements.txt os exemplos acima por toberemoved.txt. Depois de seguir as etapas acima, você pode usar o requirements.txtpara atualizar seu ambiente agora limpo.
E para comando único sem criar nenhum arquivo (como @joeb sugeriu).
Na verdade - parece (pelo que acabei de encontrar), wipeenvenquanto no ambiente gera um erro e não remove nada se usado no contexto de uma pip install -econstrução de desenvolvimento, tentar usá-lo virtualenv --clear MYENVnão gera um erro e remove nenhum dos pacotes que você pode ter instalado anteriormente no ambiente. Pelo menos este é o caso no OSX. Veja bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… para mais informações.
Mp4
2
wipeenvé um alias fornecido pelo virtualenvwrapper; portanto, nem todo mundo o possui.
Jonathan Hartley
2
bem, isso é meio que um truque sujo, mas funciona como mágica. Eu preferiria que todos usassem a desinstalação do pip -r requirements.txt -y. Faz uma ótima limpeza.
Muema 09/03
84
Eu queria elevar esta resposta de uma seção de comentários porque é uma das soluções mais elegantes do segmento. O crédito total desta resposta vai para @joeb .
pip uninstall -y -r <(pip freeze)
Isso funcionou muito bem para mim no caso de uso de limpar minha pasta de pacotes de usuários fora do contexto de um virtualenv com o qual muitas das respostas acima não tratam.
Edit: Alguém sabe como fazer esse comando funcionar em um Makefile?
Bônus: um alias do bash
Eu adiciono isso ao meu perfil do bash por conveniência:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Eu gosto, mas não funciona no caso nulo ( pip freezeresulta em nada se nenhum pacote estiver instalado e, em seguida pip uninstall, reclama, infelizmente).
Eric G
Hmm boa captura. Talvez ele possa ser envolvido em uma função bash que verifica se a saída de congelamento do pip está vazia. Não vejo uma ótima maneira de conseguir isso, mantendo o comando em uma única linha curta e agradável.
Taylor Edmiston
1
make uses sh por padrão, mas a sintaxe da substituição <(...)é um bashism. Portanto, você pode usar o bash -c "..." ou contornar fazendo umpip freeze | pip uninstall -r /dev/stdin
Caesar
Não funciona com os Notebooks do Azure:ERROR: Cannot uninstall 'bitarray'. 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.
SeaDude em
54
Outras respostas que usam pip listou pip freezedevem incluir--local outra coisa, também desinstalarão pacotes encontrados nos namespaces comuns.
Então, aqui estão os trechos que eu uso regularmente
Isso funcionou até que ele atingiu um pacote que produziu este erro: ERROR: Cannot uninstall 'bitarray'. 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 não consegui desinstalar mais nenhum módulo.
SeaDude 30/04
39
Método 1 (com pip freeze)
pip freeze | xargs pip uninstall -y
Método 2 (com pip list)
pip list | awk '{print $1}'| xargs pip uninstall -y
O sudo não é necessário e provavelmente é perigoso de usar sem uma consideração cuidadosa, pois afeta a configuração global da máquina. veja esta resposta por exemplo: stackoverflow.com/questions/15028648/…
blueberryfields
6
Método 2 ( pip list) funciona muito bem até que você tenha pip acidentalmente desinstalar-se -_-
Justin
20
Eu consegui fazer o seguinte:
Crie o arquivo de requisitos chamado reqs.txt com a lista de pacotes atualmente instalados
pip freeze > reqs.txt
depois desinstale todos os pacotes de reqs.txt
pip uninstall \
-y # remove the package with prompting for confirmation-r reqs.txt
Eu gosto desse método, pois você sempre tem um arquivo de requisitos de pip para recorrer caso cometa um erro. Também é repetível.
Isso até lida com o caso em que houve uma instalação editável (basicamente uma instalação em modo de desenvolvimento de ferramentas de instalação) que criou um arquivo .egg-info local que interferiu no restante do processo de instalação / desinstalação? Como é um conjunto de arquivos, parece não saber como lidar com a presença deles, e, em vez de desinstalar qualquer coisa, torna uma estrutura de diretório local sob MYENV completa com: `> Novos executáveis python em MYENV / bin / python3.4> Também criando executável em MYENV / bin / python> Instalando ferramentas de instalação, pip, roda ... concluídas. Mas o MYENV não redefiniu o ambiente!
Mpacer
16
No Windows, se o seu pathestiver configurado corretamente, você pode usar:
Apenas um aviso de que isso não é totalmente sólido, pois você pode encontrar problemas como 'Arquivo não encontrado', mas, em alguns casos, pode funcionar em alguns casos
EDIT: Para maior clareza: uninsé um arquivo arbitrário que possui dados gravados quando este comando executa:pip freeze > unins
O arquivo que ele escreveu por sua vez é usado para desinstalar os pacotes mencionados com consentimento implícito / aprovação prévia via pip uninstall -y -r unins
(adicionando isso como resposta, porque não tenho reputação suficiente para comentar a resposta de @blueberryfields)
A resposta de @blueberryfields funciona bem, mas falha se não houver um pacote para desinstalar (o que pode ser um problema se esse "desinstalar tudo" fizer parte de um script ou makefile). Isso pode ser resolvido xargs -rao usar a versão do GNU de xargs:
Se a entrada padrão não contiver nenhum espaço em branco, não execute o comando. Normalmente, o comando é executado uma vez, mesmo que não haja entrada. Esta opção é uma extensão GNU.
Essa foi a maneira mais fácil de desinstalar todos os pacotes python.
from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
system("pip3 uninstall {} -y -q".format(i.key))
#!/usr/bin/env pythonfrom sys import stderr
from pip.commands.uninstall importUninstallCommandfrom pip import get_installed_distributions
pip_uninstall =UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()ifnot package.location.endswith('dist-packages')])
options.yes =True# Don't confirm before uninstall# set `options.require_venv` to True for virtualenv restrictiontry:print pip_uninstall.run(options, args)exceptOSErroras e:if e.errno !=13:raise e
print>> stderr,"You lack permissions to uninstall this package.
Perhaps run with sudo? Exiting."
exit(13)# Plenty of other exceptions can be thrown, e.g.: `InstallationError`# handle them if you want to.
No meu caso, eu acidentalmente instalei vários pacotes globalmente usando um Homebrew instalado pipno macOS. A maneira mais fácil de reverter para os pacotes padrão era simples:
Esta resposta pressupõe muito sobre o ambiente e não resolve diretamente o problema se você estiver usando o pyenv, por exemplo.
Mark
@ Mark Bem, se você estiver usando pyenv, precisará fazer algo diferente. No caso comum que você não é, acredito que esta é a solução mais simples e menos invasiva. Observe que essa condição é explicitamente declarada no início da resposta.
Radon Rosborough
O OP perguntou sobre virtualenvs. Ele não fez nenhuma menção específica ao uso de um Mac ou brew para instalar o Python. Portanto, você não pode assumir que o sistema operacional ou a mistura foi usada - e esta resposta não resolverá TODAS as condições. Se você se concentrar em resolver o ambiente usando uma ferramenta como o pip - abordará o contexto do ambiente em que está. Espero que isso faça sentido.
Mark Mark
1
@ Mark Eu entendo sua posição. Podemos concordar em discordar. Eu só quero ajudar as pessoas do Google que clicam em um link chamado "Qual é a maneira mais fácil de remover todos os pacotes instalados pelo pip?" quando eles realmente querem remover todos os pacotes instalados globalmente pelo pip.
Radon Rosborough
Concordado com @RadonRosborough, o título do link é representativo do motivo pelo qual cheguei aqui, mesmo que o OP realmente não faça a mesma pergunta.
23917 Kenn Kennesta
1
No Shell de Comando do Windows, o comando pip freeze | xargs pip uninstall -ynão funciona. Portanto, para aqueles que usam o Windows, descobri uma maneira alternativa de fazer isso.
Copie todos os nomes dos pacotes instalados do pip do pip freezecomando para um arquivo .txt arquivo .
Em seguida, vá para o local do seu arquivo .txt e execute o comandopip uninstall -r *textfile.txt*
Acredito que esta resposta não adicione muitas informações novas, eu preferiria sugerir uma melhoria para outra resposta semelhante já existente, como esta: stackoverflow.com/a/45475070/11138259
sinoroc 03/04
-1
O Pip não tem como saber quais pacotes foram instalados por ele e quais pacotes foram instalados pelo gerenciador de pacotes do seu sistema. Para isso, você precisaria fazer algo assim
para distribuições baseadas em rpm (substitua python2.7 pela sua versão python com a qual você instalou o pip):
find /usr/lib/python2.7/|while read f;doif! rpm -qf "$f"&>/dev/null; then
echo "$f"
fi
done |xargs rm -fr
para uma distribuição baseada em deb:
find /usr/lib/python2.7/|while read f;doif! dpkg-query -S "$f"&>/dev/null; then
echo "$f"
fi
done |xargs rm -fr
em seguida, para limpar os diretórios vazios restantes:
find /usr/lib/python2.7-type d -empty |xargs rm -fr
Achei a resposta principal muito enganadora, pois ela removerá todos (a maioria?) Dos pacotes python da sua distribuição e provavelmente o deixará com um sistema quebrado.
Com todo o respeito, isso parece comparável. Por que não dpkg-query -S '/usr/lib/python2.7/*', extraia os nomes e dpkg-query -Lcada nome para despejar os arquivos associados? Já possui os manifestos preparados. Minha principal objeção é que, em vez de direcionar pacotes instalados em qualquer lugar, exceto pelo pip, você direcionou os pacotes instalados por qualquer coisa que não seja o gerente que você espera, e em um local que o pip geralmente não deve tocar. pip list -llista os pacotes que ele instalou localmente, e alguns o farão pip install --target=.... A remoção de todos os diretórios atualmente vazios também o morderá!
Respostas:
Encontrei esse trecho como uma solução alternativa. É uma remoção mais graciosa das bibliotecas do que refazer o virtualenv:
Caso você tenha pacotes instalados via VCS, é necessário excluir essas linhas e remover os pacotes manualmente (elevado a partir dos comentários abaixo):
fonte
postactivate
quais permanecerão.setuptools
pacote. Resolvi o problema seguindo as instruções aqui: stackoverflow.com/questions/7446187/…pip freeze --exclude-editable | xargs pip uninstall -y
a ignorar pacotes VCS sem o uso de um padrão grepIsso funcionará para todos os sistemas Mac, Windows e Linux. Para obter a lista de todos os pacotes pip no arquivo requirements.txt (Nota: Isso substituirá o arquivo requirements.txt, se existir mais, criará o novo, também se você não quiser substituir o antigo requirements.txt, dê um nome de arquivo diferente no comando a seguir, no local requirements.txt).
Agora, para remover um por um
Se queremos remover tudo de uma vez, então
Se você estiver trabalhando em um projeto existente com um
requirements.txt
arquivo e seu ambiente divergir, basta substituirrequirements.txt
os exemplos acima portoberemoved.txt
. Depois de seguir as etapas acima, você pode usar orequirements.txt
para atualizar seu ambiente agora limpo.E para comando único sem criar nenhum arquivo (como @joeb sugeriu).
fonte
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
para fazer tudo de uma só vez.Isso funciona com o mais recente. Eu acho que é a maneira mais curta e mais declarativa de fazer isso.
Mas geralmente eu apenas apago e recrio o virtualenv, já que as regras de imutabilidade!
fonte
wipeenv
? virtualenvwrapper.readthedocs.org/en/latest/…wipeenv
enquanto no ambiente gera um erro e não remove nada se usado no contexto de umapip install -e
construção de desenvolvimento, tentar usá-lovirtualenv --clear MYENV
não gera um erro e remove nenhum dos pacotes que você pode ter instalado anteriormente no ambiente. Pelo menos este é o caso no OSX. Veja bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… para mais informações.wipeenv
é um alias fornecido pelo virtualenvwrapper; portanto, nem todo mundo o possui.Eu queria elevar esta resposta de uma seção de comentários porque é uma das soluções mais elegantes do segmento. O crédito total desta resposta vai para @joeb .
Isso funcionou muito bem para mim no caso de uso de limpar minha pasta de pacotes de usuários fora do contexto de um virtualenv com o qual muitas das respostas acima não tratam.
Edit: Alguém sabe como fazer esse comando funcionar em um Makefile?
Bônus: um alias do bash
Eu adiciono isso ao meu perfil do bash por conveniência:
Então corra:
Alternativa para pipenv
Se você estiver usando o pipenv, basta executar:
fonte
pip freeze
resulta em nada se nenhum pacote estiver instalado e, em seguidapip uninstall
, reclama, infelizmente).<(...)
é um bashism. Portanto, você pode usar o bash -c "..." ou contornar fazendo umpip freeze | pip uninstall -r /dev/stdin
ERROR: Cannot uninstall 'bitarray'. 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.
Outras respostas que usam
pip list
oupip freeze
devem incluir--local
outra coisa, também desinstalarão pacotes encontrados nos namespaces comuns.Então, aqui estão os trechos que eu uso regularmente
Ref:
pip freeze --help
fonte
ERROR: Cannot uninstall 'bitarray'. 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 não consegui desinstalar mais nenhum módulo.Método 1 (com
pip freeze
)Método 2 (com
pip list
)Método 3 (com
virtualenv
)fonte
pip list
) funciona muito bem até que você tenha pip acidentalmente desinstalar-se -_-Eu consegui fazer o seguinte:
Crie o arquivo de requisitos chamado reqs.txt com a lista de pacotes atualmente instalados
depois desinstale todos os pacotes de reqs.txt
Eu gosto desse método, pois você sempre tem um arquivo de requisitos de pip para recorrer caso cometa um erro. Também é repetível.
fonte
A maneira mais rápida é refazer completamente o virtualenv. Presumo que você tenha um arquivo requirements.txt que corresponda à produção, se não:
fonte
No Windows, se o seu
path
estiver configurado corretamente, você pode usar:Deve ser um caso semelhante para sistemas do tipo Unix:
Apenas um aviso de que isso não é totalmente sólido, pois você pode encontrar problemas como 'Arquivo não encontrado', mas, em alguns casos, pode funcionar em alguns casos
EDIT: Para maior clareza:
unins
é um arquivo arbitrário que possui dados gravados quando este comando executa:pip freeze > unins
O arquivo que ele escreveu por sua vez é usado para desinstalar os pacotes mencionados com consentimento implícito / aprovação prévia via
pip uninstall -y -r unins
O arquivo é finalmente excluído após a conclusão.
fonte
Usando a função virtualenvwrapper :
Consulte a documentação do wipeenv
fonte
wipeenv
Primeiro, adicione todo o pacote ao
requirements.txt
Em seguida, remova todos
fonte
É uma pergunta antiga, eu sei, mas me deparei com ela. Para referência futura, agora você pode fazer isso:
da documentação do pip versão 8.1
fonte
Para usuários do Windows, é isso que eu uso no Windows PowerShell
fonte
(adicionando isso como resposta, porque não tenho reputação suficiente para comentar a resposta de @blueberryfields)
A resposta de @blueberryfields funciona bem, mas falha se não houver um pacote para desinstalar (o que pode ser um problema se esse "desinstalar tudo" fizer parte de um script ou makefile). Isso pode ser resolvido
xargs -r
ao usar a versão do GNU dexargs
:de
man xargs
:fonte
Pode ser que alguém precise executar esse comando várias vezes para obter um vazio
pip3 freeze --local
.fonte
Essa foi a maneira mais fácil de desinstalar todos os pacotes python.
fonte
Suporte entre plataformas usando apenas
pip
:fonte
Este é o comando que funciona para mim:
fonte
A maneira fácil e robusta de plataforma cruzada e o trabalho em pipenv também é:
por pipenv:
mas não atualizará o piplock ou o pipfile, esteja ciente
fonte
Se você estiver executando
virtualenv
:por exemplo, se seu virtualenv for
/Users/you/.virtualenvs/projectx
, você executaria:se você não souber onde seu ambiente virtual está localizado, poderá executar a
which python
partir de um ambiente virtual ativado para obter o caminhofonte
No meu caso, eu acidentalmente instalei vários pacotes globalmente usando um Homebrew instalado
pip
no macOS. A maneira mais fácil de reverter para os pacotes padrão era simples:Ou, se você estava usando
pip3
:fonte
pip freeze
comando para um arquivo .txt arquivo .pip uninstall -r *textfile.txt*
fonte
Se você estiver usando
pew
, poderá usar o comando wipeenv :pew wipeenv [env]
fonte
Eu uso a opção --user para desinstalar todos os pacotes instalados no site do usuário.
fonte
O Pip não tem como saber quais pacotes foram instalados por ele e quais pacotes foram instalados pelo gerenciador de pacotes do seu sistema. Para isso, você precisaria fazer algo assim
para distribuições baseadas em rpm (substitua python2.7 pela sua versão python com a qual você instalou o pip):
para uma distribuição baseada em deb:
em seguida, para limpar os diretórios vazios restantes:
Achei a resposta principal muito enganadora, pois ela removerá todos (a maioria?) Dos pacotes python da sua distribuição e provavelmente o deixará com um sistema quebrado.
fonte
dpkg-query -S '/usr/lib/python2.7/*'
, extraia os nomes edpkg-query -L
cada nome para despejar os arquivos associados? Já possui os manifestos preparados. Minha principal objeção é que, em vez de direcionar pacotes instalados em qualquer lugar, exceto pelo pip, você direcionou os pacotes instalados por qualquer coisa que não seja o gerente que você espera, e em um local que o pip geralmente não deve tocar.pip list -l
lista os pacotes que ele instalou localmente, e alguns o farãopip install --target=...
. A remoção de todos os diretórios atualmente vazios também o morderá!