La disinstallazione di un pacchetto con "pip" rimuove anche i pacchetti dipendenti?


153

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


1
Perché non puoi semplicemente provarlo 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.
Thomas Vander Stichele,

1
Nel newsgroup pip ho scoperto che le persone pip non vogliono questa funzionalità, almeno per ora. Che peccato!
Michel Samia,

4
@ThomasVanderStichele perché la risposta non sarebbe disponibile online per i futuri googler :)
Segna il

1
@Mark sarebbe, basta scrivere la risposta alla tua domanda qui.
Thomas Vander Stichele,

5
@ThomasVanderStichele: Non sono l'OP, ma ecco perché questa è una domanda e risposta molto legittima per SO: pipè a) notoriamente fragile e dipendente dalla versione, anche b) in alcune installazioni di clienti con cui ho dovuto lavorare, è stato installato con diritti di amministratore (anche se i pacchetti non lo erano), quindi rompere o disinstallare è stato un dolore enorme e hai avuto una possibilità per farlo bene. c) la connettività Internet potrebbe non essere eccezionale; per motivi di sicurezza le macchine aziendali sono spesso protette da firewall, quindi non puoi assumere la connettività diretta e devi sapere in anticipo tutto ciò di cui hai bisogno e la sua versione e scaricarla.
smci

Risposte:


81

No, non disinstalla i pacchetti di dipendenze. Rimuove solo il pacchetto specificato:

$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package

figleaf == 0.6.1
nose == 1.1.2
pinocchio == 0.3
specloud == 0.4.5

$ pip uninstall specloud
$ pip freeze

figleaf == 0.6.1
naso == 1.1.2
pinocchio == 0.3

Come puoi vedere quei pacchetti sono dipendenze da specloude sono ancora lì, ma non il specloudpacchetto stesso.

Come menzionato di seguito, è possibile installare e utilizzare l' utilità pip-autoremove per rimuovere un pacchetto più dipendenze non utilizzate.


2
Che dire dei pacchetti di dipendenze esclusivi del specloudpacchetto?
Fusion

@Fusion Quei pacchetti sono la dipendenza dello specloud.
BernardoBarreto

251

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

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

9
Sfortunatamente non ha ancora un vero supporto per Python3 (vedi github.com/invl/pip-autoremove/issues/18 ).
asmaier,

10
Funziona bene per me in Python 3 da ottobre 2019.
Snack

@ loved.by.Jesus - Sono su Python 3.8.3 e ho testato e vedo ancora il comando eseguito come pip-autoremove(trattino non sottolineato). pip_autoremovemi dà command not found.
bwv549

@ bwv549 Devo spiegare che l'ho eseguito tramite python<version>(quando è necessario specificare la versione). In questo modo, dobbiamo adattare il nome a pip_autoremove(trattino non consentito come nome del pacchetto). Ad esempio python3.8 pip_autoremovefunziona ma python3.8 pip-autoremovenon lo fa. Altrimenti, come hai sottolineato, come semplice comando terminale pip-autoremove, funziona perfettamente :), anche se viene utilizzata solo la versione predefinita del sistema Python. Grazie per il tuo messaggio.
amato da Gesù, il

9

ho rimosso con successo le dipendenze di un pacchetto usando questa riga bash:

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

questo ha funzionato su pip 1.5.4


40
Anche se tecnicamente questa soluzione non rimuove correttamente tutte le dipendenze, come menzionato in altre risposte, ma anche disinstalla dipendenze che sono non unico al bersaglio , compresi quelli installati dal package. Ad esempio, sul mio sistema questo script alla fine ha avuto esito negativo perché il pacchetto di destinazione aveva dipendenze in comune con pip, quindi pip ha disinstallato le proprie dipendenze prima che lo script potesse terminare, quindi non è riuscito.
sinisterstuf,

19
Attenzione, questo rimuove solo le dipendenze di livello inferiore, ma non le dipendenze di tali dipendenze.
Tamakisquare,

0

Ho trovato la soluzione anche se per alcuni potrebbe essere un po 'difficile da realizzare.

1o passo (per python3 e linux):
pip3 installa pip-autoremove
2o passo:
cd /home/usernamegoeshere/.local/bin/
3 ° passo:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
e cambia tutti i pip in pip3 4 ° passaggio: ./pip-autoremove packagenamegoeshere

Almeno, questo è ciò che ha funzionato per me ...


-1

Puoi provare con https://github.com/cls1991/pef . Rimuoverà il pacchetto con tutte le sue dipendenze.


purtroppo pef sembra funzionare solo in ambienti virtuali.
Bas

È solo in considerazione della sicurezza, sei in grado di hackerare il codice, semplicemente disattivare il codice di protezione.
cls1991,

1
Si assicura che tali dipendenze siano "sospese", cioè non necessarie ad altre distribuzioni?
mercoledì

Sì, si basa sul conteggio dei riferimenti.
cls1991,

ehi ragazzi ho biforcato e modificato il codice. Si prega di trovare il link qui sotto. github.com/nalangekrushna/pef
Krissh
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.