Ignorar prompt de confirmação para desinstalação pip

86

Estou tentando desinstalar todos os pacotes django em meu ambiente de superusuário para garantir que todas as minhas dependências de webapp sejam instaladas em meu virtualenv.

sudo su
sudo pip freeze | grep -E '^django-' | xargs pip -q uninstall

Mas pip quer confirmar a desinstalação de cada pacote e não parece haver uma -yopção para pip. Existe uma maneira melhor de desinstalar um lote de módulos Python? É rm -rf .../site-packages/uma maneira adequada de ir? Existe uma alternativa easy_install?

Alternativamente, seria melhor forçar o pip a instalar todas as dependências do virtualenv em vez de depender dos módulos python do sistema para atender a essas dependências, por exemplo pip --upgrade install, mas forçar até mesmo versões igualmente antigas a serem instaladas para substituir quaisquer módulos do sistema. Tentei ativar meu virtualenv e então pip install --upgrade -r requirements.txtparece instalar as dependências, mesmo aquelas existentes no caminho do meu sistema, mas não posso ter certeza se isso é porque meus módulos do sistema eram antigos. E man pipnão parece garantir este comportamento (ou seja, instalar a mesma versão de um pacote que já existe nos pacotes do site do sistema).

fogões
fonte

Respostas:

197

começando com pip versão 7.1.2, você pode executar pip uninstall -y <python package(s)>

pip uninstall -y package1 package2 package3

ou do arquivo

pip uninstall -y -r requirements.txt
gbozee
fonte
65

Pip NÃO inclui uma opção --yes (a partir da versão pip 1.3.1).

SOLUÇÃO ALTERNATIVA: canalize sim!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo
Kevin J. Rice
fonte
2
ahh, que simples. obrigado pelo lembrete do programa unix. yesé tão útil.
horas de
mas eu não acho que isso funcionaria (muito tímido para tentar no meu sistema hoje). yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstallporque o yeses seria engolido pelo pip freezenão o xargsargumento / comando pip uninstall,.
horas de
3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
Nick
8

Se você deseja desinstalar todos os pacotes de requirements.txt,

pip uninstall -y -r requirements.txt
Akilesh Raj
fonte
1

Alternativamente, seria melhor forçar o pip a instalar todas as dependências no virtualenv em vez de depender dos módulos do sistema python para atender a essas dependências,

Sim. Não mexa muito com os pacotes instalados do sistema embutido. Muitos dos pacotes do sistema, particularmente no OS X (mesmo o debian e as variedades derivadas) dependem muito deles.

pip - atualização de instalação, mas forçando até mesmo versões igualmente antigas a serem instaladas para substituir quaisquer módulos do sistema.

Não deve ser um grande problema se houver mais alguns pacotes instalados no venv que já estão lá no pacote do sistema, particularmente se forem de versões diferentes. Esse é o objetivo do virtualenv.

Eu tentei ativar meu virtualenv e, em seguida, pip install --upgrade -r requirements.txt e isso parece instalar as dependências, mesmo aquelas existentes no caminho do meu sistema, mas não posso ter certeza se isso é porque os módulos do meu sistema eram antigos. E o man pip não parece garantir este comportamento (ou seja, instalar a mesma versão de um pacote que já existe no site-packages do sistema).

Não, ele não instala os pacotes já presentes na instalação principal, a menos que você tenha usado o --no-site-packagessinalizador para criá-lo, ou as versões necessárias e atuais são diferentes.

Lakshman Prasad
fonte
1

Lakshman Prasad estava certo, pip --upgradee / ou virtualenv --no-site-packagesé o caminho a percorrer. Desinstalar os módulos Python de todo o sistema é ruim.

A --upgradeopção de pip instalar os módulos necessários no ambiente virtual, mesmo se eles já existirem no ambiente do sistema, e mesmo se a versão necessária ou a versão mais recente disponível for igual à versão do sistema.

pip --upgrade install

E, usar a opção --no-site-packages ao criar o ambiente virtual garante que dependências ausentes não possam ser mascaradas pela presença de módulos ausentes no caminho do sistema. Isso ajuda a expor problemas durante a migração de um módulo de um pacote para outro, por exemplo, pinax.apps.groups -> django-groups, especialmente quando o problema é carregar instruções templatetags no django que procura em todos os módulos disponíveis os diretórios templatetags e as definições de tag dentro.

fogões
fonte
0
pip install -U xxxx 

pode ignorar a confirmação

Prime Lee
fonte
2
Tente escrever frases completas e significativas e editar partes do código.
YesThatIsMyName