Jak wykryć i usunąć pakiety Pythona zainstalowane za pomocą pip?

73

Przypadkowo zainstalowałem pakiety Pythona w moim systemie, używając pipzamiast apt-get. Zrobiłem to na dwa sposoby:

  • używając starszej wersji virtualenv, zapomniałem dołączyć --no-site-packagespodczas tworzenia virtualenv - potem, gdy zadzwoniłem pip install, pakiety Pythona były instalowane w systemie zamiast virtualenv
  • w poprawnie skonfigurowanym virtualenv wpisałem sudo pip install somepackage- sudo zainstalowane w systemie zamiast virtualenv

Zdarzyło mi się to zauważyć, ponieważ pisałem na maszynie pip freezepoza virtualenv i zauważyłem listę pakietów Pythona, których nie powinno tam być. Więc teraz moje pytanie brzmi:

  • Jak mogę zidentyfikować wszystkie pakiety Pythona, które zostały błędnie zainstalowane w systemie (to znaczy pakiety Pythona, które pojawiają się na pip freezeliście, ale nie zostały zainstalowane apt-get)?
  • jak je usunąć?
david.libremone
źródło

Odpowiedzi:

56

Ubuntu Oneiric (i spodziewam się także nowszych wersji) instaluje pakiety pip do /usr/local/lib/python2.7/dist-packagesi aptpakiety do /usr/lib/python2.7/dist-packages. Więc po prostu sprawdź poprzedni katalog i sudo pip uninstallkażdy pakiet, który tam znajdziesz.

Capi Etheriel
źródło
12
Byłem brutalny i wydałem sudo rm -r /usr/local/lib/python2.7. Na razie w porządku.
Apteryx
@Apteryx, zrobiłem to samo z /usr/local/lib/python3.5, a po pewnym czasie aktualizacja update-notifier-commonpakietu nie powiodła się z powodu braku sixpakietu Python 3 . Skończyło się instalowanie sixz sudo -H pip3 install six.
Alexey,
2
@Apteryx, cholera, cholera! Zrobiłem to samo i teraz cały mój system jest popieprzony! ponieważ prawie wszystko w Ubuntu opiera się na Pythonie!
yukashima huksay
Zauważyłem, że mam teraz kilka uszkodzonych plików wykonywalnych /usr/local/bin/(jakiś czas temu właśnie usunąłem /usr/local/lib/python3.5i zmieniłem na conda ).
Alexey
22

Pip obecnie ignoruje polecenia odinstalowywania, które próbują odinstalować coś, co należy do systemu operacyjnego. Nie powoduje błędu, tak jak w przypadku brakującego pakietu. Teraz możesz odinstalować za pomocą następującego procesu:

pip freeze > dump.txt

Edytuj plik zrzucony, aby usunąć wszystkie -ewiersze „edytowalnej instalacji”, wszystko po ==znaku ( %s;==.*;;gw vimie), zamień nowe linie na spacje ( %s;\n; ;gw vimie). Następnie możesz odinstalować wszystkie niepotrzebne pakiety za pomocą

cat dump.txt | xargs sudo pip uninstall -y

Tę procedurę musiałem wykonać dwa razy, ponieważ zainstalowano także kilka pakietów ~/.local/lib.

Henry Schreiner
źródło
1
To powinna być zaakceptowana odpowiedź
Nam G VU
3
Jeśli ktokolwiek chce mieć bezkształtną jednowarstwową:sudo pip uninstall -y $(pip freeze | sed 's;==.*;;g' | tr '\n' ' ')
Benoit Duffez,
4
Ostrożny! Zależy to od tego, czy system operacyjny zawiera specjalną wersję pip. Na archlinux pipszczęśliwie odinstalowuje pakiety systemowe. Z drugiej strony, pipna temat debiana jessie narzeka i popełnia błędy:Not uninstalling virtualenv at /usr/lib/python3/dist-packages, owned by OS
Thomas G.
1
potrzebujesz sudo? - zdecydowanie powinna to być zaakceptowana odpowiedź
Jonathan
6

AFAIK sudo pip installzostanie zainstalowany /usr/local/lib/pythonVERSION/dist-packages. Musisz uruchomić, sudo pip uninstallaby odinstalować pakiety w całym systemie. Wygląda na to, że pip freezeszuka metadanych pakietu i wyświetli listę wszystkich zainstalowanych, tj. Zarówno z pip, jak i apt-get poza virtualenvs. W -lśrodowisku wirtualnym istnieje możliwość wylistowania pakietów mających zastosowanie tylko do tego środowiska wirtualnego, ale wydaje się, że jest to również domyślny przypadek w środowisku wirtualnym. Myślę, że możesz również usunąć powiązane pakiety, /usr/local/lib/pythonVERSION/dist-packagesale chyba niezbyt wygodna metoda.

sagarchalizować
źródło
5

Aby usunąć pakiet zainstalowany za pomocą pip, po prostu naciśnij Ctrl+ Alt+ Tna klawiaturze, aby otworzyć Terminal. Kiedy się otworzy, uruchom poniższe polecenie.

pip uninstall < package-name >

Aby wyszukać paczki

pip search <package you want to search for>

Aby ustalić, które pakiety Python zostały zainstalowane przez pip, za pomocą freezepolecenia, które wyświetli listę zainstalowanych pakietów i ich wersji. Sugeruję usunięcie wszystkich instancji i ponowną instalację za pomocą sudo apt-getpolecenia

sudo apt-get install python3
Mitch
źródło
jak ustalić, które pakiety Python zostały zainstalowane przez pip, a które przez apt-get? czy nadal mogę, pip uninstalljeśli użyłem sudo pip install?
david.libremone
@ d3vid pip freezepokazuje tylko zainstalowane pakiety (AFAICS).
Oli
1
@oli pip freeze, przynajmniej precyzyjnie, zawiera również listę pakietów zainstalowanych przez apt, jak opisują inne odpowiedzi tutaj.
nealmcb
0

Musiałem bezpiecznie wyczyścić miejsce na dysku z pakietów Pythona. Chociaż jest to całkowite usunięcie pakietów, musiałem również przenieść wersje Pythona, więc nie potrzebowałem starych pakietów. Użyłem następującego polecenia, aby uzyskać wszystkie moje nazwy pakietów, pominąć pierwsze 2 wiersze, pobrać pierwszą kolumnę i odinstalować bez interakcji użytkownika:

pip list | awk 'NR>2 {print $1}' | xargs -I {} pip uninstall -y {}
m1st0
źródło
-2

Ma to coś wspólnego z Homebrew. Nie miałem problemów z pyodbc na moim Macu Air, dopóki nie zainstalowałem Homebrew i użyłem go do kilku rzeczy. Znalazłem ten wątek na githubie, który kończy się rozwiązaniem, które działało dla mnie.

„Jeśli masz Homebrew, po prostu zainstaluj nagłówki ODBC:

$ brew install unixodbc

i ponownie uruchom „pip install pyodbc”. ”

To w 100% rozwiązało problem i zajęło mi tylko chwilę. Spróbuj.

Pogo
źródło
może musisz to opublikować w Ask Different? apple.stackexchange.com
david.libremone