Czy odinstalowanie pakietu za pomocą „pip” powoduje również usunięcie pakietów zależnych?
153
Podczas pipinstalowania pakietu wszystkie wymagane pakiety zostaną również zainstalowane wraz z nim (zależności). Czy odinstalowanie tego pakietu powoduje również usunięcie pakietów zależnych?
Dlaczego nie możesz tego 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 pobrać indeksu pakietów.
Thomas Vander Stichele
1
W grupie dyskusyjnej pip odkryłem, że ludzie z pip nie chcą tej funkcjonalności, przynajmniej na razie. Jaka szkoda!
Michel Samia
4
@ThomasVanderStichele, ponieważ wtedy odpowiedź nie byłaby dostępna online dla przyszłych Googlersów :)
Mark
1
@Zaznacz, że tak, po prostu zapisz tutaj odpowiedź na swoje pytanie.
Thomas Vander Stichele
5
@ThomasVanderStichele: Nie jestem operatorem, ale oto dlaczego jest to bardzo uzasadnione pytania i odpowiedzi dla SO: pipjest a) notorycznie kruche i zależne od wersji, również b) w niektórych instalacjach klientów, z którymi musiałem pracować, został zainstalowany z uprawnienia administratora (chociaż pakiety nie były), stąd zerwanie lub odinstalowanie go było ogromnym żalem i miałeś jedną szansę, aby zrobić to dobrze. c) łączność internetowa może nie być świetna; Ze względów bezpieczeństwa komputery firmowe są często chronione firewallem, więc nie można zakładać bezpośredniej łączności i trzeba z wyprzedzeniem znać wszystko, czego będziesz potrzebować, oraz znać jego wersję, a następnie je pobrać.
smci
Odpowiedzi:
80
Nie, nie odinstalowuje pakietów zależności. Usuwa tylko określony pakiet:
$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package
Działa dobrze dla mnie w Pythonie 3 od października 2019 r.
przekąski
@oved.by.Jesus - korzystam z Pythona 3.8.3 i przetestowałem i nadal widzę wykonywane polecenie jako pip-autoremove(myślnik, a nie podkreślenie). pip_autoremovedaje mi command not found.
bwv549
@ bwv549 Muszę wyjaśnić, że wykonałem to przez python<version>(kiedy trzeba określić wersję). W ten sposób musimy dostosować nazwę do pip_autoremove(myślnik nie jest dozwolony jako nazwa pakietu). Na przykład python3.8 pip_autoremovedziała, ale python3.8 pip-autoremovenie. W przeciwnym razie, jak zauważyłeś, jako proste polecenie terminala pip-autoremovedziała idealnie :) - chociaż używana jest tylko domyślna wersja systemu w Pythonie. Dzięki za wiadomość.
kochany przez Jezusa
9
pomyślnie usunąłem zależności pakietu przy użyciu tej linii bash:
for dep in $(pip show somepackage | grep Requires| sed 's/Requires: //g; s/,//g');do pip uninstall -y $dep ; done
Chociaż technicznie rozwiązanie to ma skutecznie usunąć wszystkie zależności, jak wspomniano w innych odpowiedzi, to również odinstalowuje zależności, które są nie jedyne do celu , w tym te, które z zainstalowanych pakietów systemowych. Na przykład w moim systemie ten skrypt ostatecznie się nie powiódł, ponieważ pakiet docelowy miał wspólne zależności z pip, więc program pip odinstalował swoje własne zależności, zanim skrypt mógł zakończyć, a następnie zawiódł.
sinisterstuf
19
Uważaj, to usuwa tylko zależności niższego poziomu, ale nie zależności tych zależności.
tamakisquare
0
Znalazłem rozwiązanie, chociaż niektórym może to być trudne do wykonania.
1. krok (dla Python3 i Linux):
pip3 zainstaluj pip-autorove
2. krok:
cd /home/usernamegoeshere/.local/bin/
3. krok:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
i zmień wszystkie pip (i) na pip3 4 krok: ./pip-autoremove packagenamegoeshere
pip
jest a) notorycznie kruche i zależne od wersji, również b) w niektórych instalacjach klientów, z którymi musiałem pracować, został zainstalowany z uprawnienia administratora (chociaż pakiety nie były), stąd zerwanie lub odinstalowanie go było ogromnym żalem i miałeś jedną szansę, aby zrobić to dobrze. c) łączność internetowa może nie być świetna; Ze względów bezpieczeństwa komputery firmowe są często chronione firewallem, więc nie można zakładać bezpośredniej łączności i trzeba z wyprzedzeniem znać wszystko, czego będziesz potrzebować, oraz znać jego wersję, a następnie je pobrać.Odpowiedzi:
Nie, nie odinstalowuje pakietów zależności. Usuwa tylko określony pakiet:
Jak widać, te pakiety są zależnościami od
specloud
i nadal istnieją, ale niespecloud
sam pakiet.Jak wspomniano poniżej, możesz zainstalować i użyć narzędzia pip-autorove , aby usunąć pakiet oraz nieużywane zależności.
źródło
specloud
?Możesz zainstalować i użyć narzędzia pip-autorove , aby usunąć pakiet oraz nieużywane zależności.
źródło
pip-autoremove
(myślnik, a nie podkreślenie).pip_autoremove
daje micommand not found
.python<version>
(kiedy trzeba określić wersję). W ten sposób musimy dostosować nazwę dopip_autoremove
(myślnik nie jest dozwolony jako nazwa pakietu). Na przykładpython3.8 pip_autoremove
działa, alepython3.8 pip-autoremove
nie. W przeciwnym razie, jak zauważyłeś, jako proste polecenie terminalapip-autoremove
działa idealnie :) - chociaż używana jest tylko domyślna wersja systemu w Pythonie. Dzięki za wiadomość.pomyślnie usunąłem zależności pakietu przy użyciu tej linii bash:
to działało na pip 1.5.4
źródło
Znalazłem rozwiązanie, chociaż niektórym może to być trudne do wykonania.
1. krok (dla Python3 i Linux):
pip3 zainstaluj pip-autorove
2. krok:
cd /home/usernamegoeshere/.local/bin/
3. krok:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
i zmień wszystkie pip (i) na pip3 4 krok: ./pip-autoremove packagenamegoeshere
Przynajmniej to zadziałało dla mnie ...
źródło
Możesz spróbować https://github.com/cls1991/pef . Usunie pakiet ze wszystkimi jego zależnościami.
źródło