2011-10-27 10 views
62

Podczas instalacji pakietu, wszystkie wymagane pakiety również zostaną z nim zainstalowane (zależności). Czy odinstalowanie tego pakietu powoduje również usunięcie zależnych pakietów?Czy odinstalowanie pakietu za pomocą "pip" powoduje również usunięcie zależnych pakietów?

+1

Dlaczego nie możesz po prostu spróbować i zobaczyć? Zrobiłbym dokładnie to, aby odpowiedzieć na twoje pytanie, ale z jakiegoś powodu pip nie może teraz uzyskać indeksu paczki tutaj. –

+2

@ThomasVanderStichele, ponieważ wtedy odpowiedź nie byłaby dostępna online dla przyszłych pracowników Google :) – Mark

+0

Znalazłem w [pip newsgroup] (https://groups.google.com/d/topic/python-virtualenv/JqIbyUDy2-E/ dyskusja), że ludzie nie chcą tej funkcjonalności, przynajmniej na razie. Jaka szkoda! –

Odpowiedz

42

Nie, to nie odinstalować pakiety zależności:

$ pip install specloud 
$ pip freeze 

listek figowy == 0.6.1
nos == 1.1.2
Pinokio == 0,3
specloud == 0,4 .5

$ pip uninstall specloud 
$ pip freeze 

listek figowy == 0.6.1
nos == 1.1.2
Pinokio == 0,3

Jak widać wszystkie pakiety są nadal tam, ale nie sam pakiet specloud.

88

Można zainstalować i używać narzędzia pip-autoremove, aby usunąć pakiet plus nieużywane zależności.

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

Ostatnia aktualizacja była rok temu. Próbowałem go dziś użyć i złamałem się marnie. –

+5

Wygląda na to, że zadziałało dla mnie. – se210

+5

Pracował także dla mnie. – timkofu

4

i pomyślnie usunięty zależności pakietu za pomocą tego wiersza bash:

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

ten pracował na pip 1.5.4

+18

Chociaż technicznie to rozwiązanie * nie * skutecznie usuwa wszystkie zależności, jak wspomniano w innych odpowiedziach, to * także * odinstalowuje zależności, które ** nie są unikalne dla celu **, w tym te zainstalowane z pakietów systemowych. Na przykład w moim systemie skrypt ten w końcu się nie powiódł, ponieważ pakiet docelowy miał zależności wspólne z pip, więc pip odinstalował swoje własne zależności przed zakończeniem skryptu, a następnie zakończył się niepowodzeniem. – sinisterstuf

+0

także pracuje nad '8.1.2'. – vyscond

+6

Strzeż się tego, usuwając ** tylko ** zależności od następnego poziomu, ale ** nie ** zależności tych zależności. – tamakisquare

3

A na dokładkę też. Rozważ scenariusze, w których zależności przecinają się z innymi zainstalowanymi pakietami. Lepiej zamarznąć w pliku requirements.txt przy każdej nowej instalacji i porównać wcześniejsze wersje pliku requirements.txt, aby ręcznie usunąć zależności.

0

Możesz spróbować dla https://github.com/cls1991/pef. Spowoduje to usunięcie pakietu ze wszystkimi zależnościami.

+0

Niestety, wydaje się, że pef działa tylko w środowiskach wirtualnych. – Bas

+0

To tylko kwestia bezpieczeństwa, możesz zhackować kod, po prostu wyłączyć kod zabezpieczający. – cls1991

Powiązane problemy