2011-10-27 12 views
62

Quando si utilizza pip per installare un pacchetto, verranno installati anche tutti i pacchetti richiesti (dipendenze). La disinstallazione di quel pacchetto rimuove anche i pacchetti dipendenti?La disinstallazione di un pacchetto con "pip" rimuove anche i pacchetti dipendenti?

+1

Perché non puoi provare e vedere? Farei esattamente questo per rispondere alla tua domanda, ma per qualche ragione pip non può ottenere l'indice del pacchetto qui in questo momento. –

+2

@ThomasVanderStichele perché la risposta non sarebbe disponibile online per i futuri googler :) – Mark

+0

Ho trovato in [pip newsgroup] (https://groups.google.com/d/topic/python-virtualenv/JqIbyUDy2-E/ discussione) che pip persone non vogliono questa funzionalità, almeno per ora. Che peccato! –

risposta

42

No, non rimuove i pacchetti dipendenze:

$ pip install specloud 
$ pip freeze 

foglia di fico == 0.6.1
naso == 1.1.2
pinocchio == 0,3
specloud == 0,4 .5

$ pip uninstall specloud 
$ pip freeze 

foglia di fico == 0.6.1
naso == 1.1.2
pinocchio == 0,3

Come si può vedere tutti i pacchetti sono ancora lì, ma non il pacchetto specloud stesso.

88

È possibile installare e utilizzare l'utilità pip-autoremove per rimuovere un pacchetto più le dipendenze non utilizzate.

# install pip-autoremove 
pip install pip-autoremove 
# remove "somepackage" plus its dependencies: 
pip-autoremove somepackage -y 
+14

L'ultimo aggiornamento è stato un anno fa. Ho provato ad usarlo oggi e mi sono rotto miseramente. –

+5

Sembra che abbia funzionato per me. – se210

+5

Ha funzionato anche per me. – timkofu

4

Ho rimosso con successo dipendenze di un pacchetto che usano questa linea bash:

for dep in $(pip show somepackage | grep Requires | sed 's/Requires: //g; s/,//g') ; do pip uninstall -y $dep ; done 

questa lavorato su pip 1.5.4

+18

Sebbene tecnicamente questa soluzione * rimuova con successo tutte le dipendenze, come menzionato nelle altre risposte, anch'essa * disinstalla le dipendenze che ** non sono uniche per il target **, comprese quelle installate dai pacchetti di sistema. Ad esempio, sul mio sistema questo script alla fine non è riuscito perché il pacchetto di destinazione aveva in comune delle dipendenze con pip, quindi il pip ha disinstallato le sue dipendenze prima che lo script potesse finire, e poi falliva. – sinisterstuf

+0

lavorando anche su '8.1.2'. – vyscond

+6

Attenzione, questo rimuove ** solo ** le dipendenze di livello inferiore, ma ** non ** le dipendenze di tali dipendenze. – tamakisquare

3

E per buona misura anche. Considera scenari in cui le dipendenze si intersecano con altri pacchetti che hai installato. Ti conviene congelare in un requisito.txt con ogni nuova installazione e confrontare le versioni precedenti di requirements.txt per rimuovere manualmente le dipendenze.

0

Si può provare per https://github.com/cls1991/pef. Rimuoverà il pacchetto con tutte le sue dipendenze.

+0

pef sembra funzionare in ambienti virtuali, sfortunatamente. – Bas

+0

Solo in considerazioni di sicurezza, è possibile modificare il codice, semplicemente disattivare il codice di protezione. – cls1991

Problemi correlati