A desinstalação de um pacote com "pip" também remove os pacotes dependentes?
153
Quando você usa pippara instalar um pacote, todos os pacotes necessários também serão instalados (dependências). A desinstalação desse pacote também remove os pacotes dependentes?
Por que você não pode simplesmente tentar e ver? Eu faria exatamente isso para responder à sua pergunta, mas por algum motivo o pip não pode obter o índice do pacote aqui agora.
Thomas Vander Stichele 27/10
1
Eu descobri no grupo de notícias pip que as pessoas pip não querem essa funcionalidade, pelo menos por enquanto. Que pena!
Michel Samia
4
@ThomasVanderStichele porque então a resposta não estaria disponível on-line para futuras Googlers :)
Mark
1
@ Mark seria, você acabou de escrever a resposta para sua própria pergunta aqui.
Thomas Vander Stichele
5
@ThomasVanderStichele: Eu não sou o OP, mas eis por que este é um Q&A muito legítimo para SO: pipa) é notoriamente quebradiço e depende da versão, também b) em algumas instalações de clientes com as quais tive que trabalhar, ele foi instalado com direitos de administrador (embora os pacotes não fossem), portanto, quebrar ou desinstalar era uma dor enorme e você tinha uma chance de fazer o que era certo. c) a conectividade com a internet pode não ser ótima; por motivos de segurança, as máquinas corporativas geralmente são protegidas por firewall, portanto você não pode assumir a conectividade direta e precisa saber com antecedência tudo o que precisa e sua versão, e fazer o download.
smci 13/05/19
Respostas:
80
Não, ele não desinstala os pacotes de dependências. Ele remove apenas o pacote especificado:
$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package
Trabalhando bem para mim no Python 3 a partir de outubro de 2019.
snacks
@ loved.by.Jesus - Estou no python 3.8.3 e testei e ainda vejo o comando executado como pip-autoremove(traço não sublinhado). pip_autoremoveme dá command not found.
bwv549 19/06
@ bwv549 Tenho de explicar que o executei via python<version>(quando a versão tiver que ser especificada). Dessa forma, precisamos adaptar o nome a pip_autoremove(dash não é permitido como nome do pacote). Por exemplo, python3.8 pip_autoremovefunciona, mas python3.8 pip-autoremovenão funciona . Caso contrário, como você apontou, como simples comando terminal pip-autoremove, ele funciona perfeitamente :) - embora apenas a versão python padrão do sistema seja usada. Obrigado pela sua mensagem.
loved.by.Jesus
9
Eu removi com sucesso as dependências de um pacote usando esta linha do bash:
for dep in $(pip show somepackage | grep Requires| sed 's/Requires: //g; s/,//g');do pip uninstall -y $dep ; done
Embora tecnicamente esta solução não remover com êxito todas as dependências, como mencionado em outras respostas, ele também desinstala dependências que são não é exclusivo para o alvo , incluindo os instalados a partir de pacotes do sistema. Por exemplo, no meu sistema, esse script acabou falhando porque o pacote de destino tinha dependências em comum com o pip, portanto o pip desinstalou suas próprias dependências antes que o script pudesse terminar e depois falhou.
2141616 sinisterstuf
19
Cuidado, isso remove apenas o próximo nível de dependência, mas não as dependências dessas dependências.
Tamakisquare
0
Eu encontrei a solução, embora possa ser um pouco difícil para alguns executar.
1º passo (para python3 e linux):
pip3 instala o pip-autoremove
2º passo:
cd /home/usernamegoeshere/.local/bin/
3º passo:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
e altere todos os pip (s) para pip3 4º passo: ./pip-autoremove packagenamegoeshere
pip
a) é notoriamente quebradiço e depende da versão, também b) em algumas instalações de clientes com as quais tive que trabalhar, ele foi instalado com direitos de administrador (embora os pacotes não fossem), portanto, quebrar ou desinstalar era uma dor enorme e você tinha uma chance de fazer o que era certo. c) a conectividade com a internet pode não ser ótima; por motivos de segurança, as máquinas corporativas geralmente são protegidas por firewall, portanto você não pode assumir a conectividade direta e precisa saber com antecedência tudo o que precisa e sua versão, e fazer o download.Respostas:
Não, ele não desinstala os pacotes de dependências. Ele remove apenas o pacote especificado:
Como você pode ver, esses pacotes são dependências
specloud
e ainda estão lá, mas não ospecloud
próprio pacote.Conforme mencionado abaixo, você pode instalar e usar o utilitário pip-autoremove para remover um pacote mais as dependências não utilizadas.
fonte
specloud
pacote?Você pode instalar e usar o utilitário pip-autoremove para remover um pacote mais as dependências não utilizadas.
fonte
pip-autoremove
(traço não sublinhado).pip_autoremove
me dácommand not found
.python<version>
(quando a versão tiver que ser especificada). Dessa forma, precisamos adaptar o nome apip_autoremove
(dash não é permitido como nome do pacote). Por exemplo,python3.8 pip_autoremove
funciona, maspython3.8 pip-autoremove
não funciona . Caso contrário, como você apontou, como simples comando terminalpip-autoremove
, ele funciona perfeitamente :) - embora apenas a versão python padrão do sistema seja usada. Obrigado pela sua mensagem.Eu removi com sucesso as dependências de um pacote usando esta linha do bash:
isso funcionou no pip 1.5.4
fonte
Eu encontrei a solução, embora possa ser um pouco difícil para alguns executar.
1º passo (para python3 e linux):
pip3 instala o pip-autoremove
2º passo:
cd /home/usernamegoeshere/.local/bin/
3º passo:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
e altere todos os pip (s) para pip3 4º passo: ./pip-autoremove packagenamegoeshere
Pelo menos, foi isso que funcionou para mim ...
fonte
Você pode tentar https://github.com/cls1991/pef . Ele removerá o pacote com todas as suas dependências.
fonte