Ignora la richiesta di conferma per la disinstallazione di pip


93

Sto cercando di disinstallare tutti i pacchetti django nel mio ambiente di superutente per assicurarmi che tutte le dipendenze della mia webapp siano installate sul mio virtualenv.

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

Ma pip vuole confermare la disinstallazione di ogni pacchetto e non sembra esserci -yun'opzione per pip. C'è un modo migliore per disinstallare un batch di moduli Python? È rm -rf .../site-packages/un modo corretto di andare? Esiste un'alternativa easy_install?

In alternativa, sarebbe meglio forzare pip a installare tutte le dipendenze su virtualenv piuttosto che fare affidamento sui moduli python del sistema per soddisfare tali dipendenze, ad esempio pip --upgrade install, ma forzando anche l' installazione di versioni ugualmente vecchie per sovrascrivere qualsiasi modulo di sistema. Ho provato ad attivare il mio virtualenv e poi pip install --upgrade -r requirements.txte questo sembra installare le dipendenze, anche quelle esistenti nel mio percorso di sistema, ma non posso essere sicuro che sia perché i miei moduli di sistema erano vecchi. E man pipnon sembra garantire questo comportamento (cioè installare la stessa versione di un pacchetto che già esiste nel sistema site-packages).

Risposte:


204

a partire dalla versione pip 7.1.2 è possibile eseguire pip uninstall -y <python package(s)>

pip uninstall -y package1 package2 package3

o da file

pip uninstall -y -r requirements.txt

65

Pip NON include un'opzione --yes (a partire dalla versione 1.3.1 di pip).

SOLUZIONE: pipe sì!

$ sudo ls  # enter pw so not prompted again
$ /usr/bin/yes | sudo pip uninstall pymongo

2
ahh, com'è semplice. grazie per il promemoria del programma unix. yesè così utile.
piani cottura

ma non credo che questo funzionerebbe (troppo timido per provarlo sul mio sistema oggi). yes | sudo pip freeze | grep -E '^django-' | xargs pip -q uninstallperché i yeses otterrebbe inghiottito dal pip freezeil non xargs/ comando di argomento, pip uninstall.
piani cottura

3
pip freeze > all_to_uninstall.txt yes | pip uninstall -r all_to_uninstall.txt
Nick

8

Se desideri disinstallare ogni pacchetto da requirements.txt,

pip uninstall -y -r requirements.txt

1

In alternativa, sarebbe meglio forzare pip a installare tutte le dipendenze su virtualenv piuttosto che fare affidamento sui moduli python di sistema per soddisfare tali dipendenze,

Sì. Non scherzare troppo con i pacchetti installati nel sistema integrato. Molti dei pacchetti di sistema, in particolare in OS X (anche Debian e le varietà derivate) dipendono troppo da loro.

pip --upgrade install, ma impone l'installazione anche di versioni ugualmente vecchie per sovrascrivere qualsiasi modulo di sistema.

Non dovrebbe essere un grosso problema se ci sono altri pacchetti installati all'interno di venv che sono già presenti nel pacchetto di sistema, in particolare se sono di versione diversa. Questo è il punto centrale di virtualenv.

Ho provato ad attivare il mio virtualenv e poi pip install --upgrade -r requirements.txt e questo sembra installare le dipendenze, anche quelle esistenti nel mio percorso di sistema, ma non posso essere sicuro che sia perché i miei moduli di sistema erano vecchi. E man pip non sembra garantire questo comportamento (cioè l'installazione della stessa versione di un pacchetto che già esiste nel sistema site-packages).

No, non installa i pacchetti già presenti nell'installazione principale a meno che tu non abbia usato il --no-site-packagesflag per crearlo, o le versioni richieste e presenti siano diverse ..


1

Lakshman Prasad aveva ragione, pip --upgradee / o virtualenv --no-site-packagesè la strada da percorrere. La disinstallazione dei moduli python a livello di sistema è dannosa.

L' --upgradeopzione per pip installa i moduli richiesti nell'ambiente virtuale, anche se esistono già nell'ambiente di sistema, e anche se la versione richiesta o l'ultima versione disponibile è la stessa della versione di sistema.

pip --upgrade install

Inoltre, l'utilizzo dell'opzione --no-site-packages durante la creazione dell'ambiente virtuale garantisce che le dipendenze mancanti non possano essere mascherate dalla presenza di moduli mancanti nel percorso di sistema. Questo aiuta a esporre i problemi durante la migrazione di un modulo da un pacchetto a un altro, ad esempio pinax.apps.groups -> django-groups, specialmente quando il problema è con le istruzioni load templatetags in django che cercano in tutti i moduli disponibili le directory templatetags e le definizioni dei tag entro.


0
pip install -U xxxx 

può bypassare la conferma


2
Prova a scrivere frasi complete e significative e modifica le parti di codice.
YesThatIsMyName
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.