Jaki jest najłatwiejszy sposób na usunięcie wszystkich pakietów zainstalowanych przez pip?


Próbuję naprawić jeden z moich virtualenvów - chciałbym zrzucić wszystkie zainstalowane biblioteki z powrotem do odpowiednich dla produkcji.
Czy istnieje szybki i łatwy sposób na zrobienie tego za pomocą pip?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Znalazłem ten fragment jako alternatywne rozwiązanie. To jest bardziej wdzięczne usuwanie bibliotek niż przeróbka virtualenv:
pip freeze | xargs pip uninstall -y

Jeśli masz pakiety zainstalowane przez VCS, musisz wykluczyć te wiersze i ręcznie usunąć pakiety (patrz komentarze poniżej):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:


Metoda 1 (z
pip freeze
)
>
pip freeze | xargs pip uninstall -y


Metoda 2 (z
lista pip
)
>
pip list | awk '{print $1}' | xargs pip uninstall -y


Metoda 3 (z
virtualenv
)
>
virtualenv --clear MYENV
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Obejrzałem to, wykonując następujące czynności:
Utwórz plik wymagań o nazwie

reqs.txt

z listą zainstalowanych pakietów
pip freeze > reqs.txt

następnie usuń wszystkie pakiety z

reqs.txt

pip uninstall \
-y # remove the package with prompting for confirmation
-r reqs.txt

Uwielbiam tę metodę, ponieważ zawsze masz plik wymagań pip, do którego możesz wrócić, jeśli popełnisz błąd. To też się powtarza.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najszybszym sposobem jest całkowita przebudowa virtualenv. Zakładam, że masz plik Requirements.txt, który jest odpowiedni do produkcji, jeśli nie:
# On production:
pip freeze > reqs.txt# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To zadziała dla wszystkich systemów Mac, Windows i Linux.
Aby wyświetlić wszystkie pakiety pip w pliku Requirements.txt (Uwaga: spowoduje to nadpisanie pliku Requirements.txt, jeśli istnieje inny, spowoduje utworzenie nowego, a także, jeśli nie chcesz zastępować starego pliku Requirements.txt, to w następna komenda zamiast wymagań .txt).
pip freeze > requirements.txt

Teraz posprzątaj jeden po drugim
pip uninstall -r requirements.txt

Jeśli chcemy usunąć wszystko od razu
pip uninstall -r requirements.txt -y

Jeśli pracujesz nad istniejącym projektem z plikiem
Requirements.txt
, a Twoje środowisko jest inne, po prostu zamień
require.txt
z powyższych przykładów na
toberemoved. txt
... Następnie, postępując zgodnie z powyższymi krokami, możesz użyć pliku
Requirements.txt
, aby zaktualizować swoje czyste środowisko.
I dla pojedynczego polecenia bez tworzenia żadnego pliku (jak sugerował @joeb).
pip uninstall -y -r <(pip freeze)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Działa to z tym drugim. Myślę, że to najkrótszy i najbardziej deklaratywny sposób na zrobienie tego.
virtualenv --clear MYENV

Ale zwykle po prostu usuwam i odtwarzam virtualenv, ponieważ niezmienność rządzi!
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Chciałem przywołać tę odpowiedź z sekcji komentarzy, ponieważ jest to jedno z najbardziej eleganckich rozwiązań w wątku. Pełne uznanie za tę odpowiedź należy do

@joeb
https://stackoverflow.com/users/174652/joeb
.
pip uninstall -y -r <(pip freeze)

To działało świetnie w przypadku korzystania z czyszczenia mojego folderu niestandardowych pakietów poza kontekstem virtualenv, którego wiele z powyższych odpowiedzi nie obsługuje.

Edycja: czy ktoś wie, jak sprawić, by to polecenie działało w pliku Makefile?


Bonus: alias bash
>
Dla wygody dodaję to do mojego profilu bash:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

Następnie uruchomić:
pipuninstallall


Alternatywa dla pipenv
>
Jeśli używasz

pipenv
https://github.com/pypa/pipenv
możesz po prostu biegać:
pipenv uninstall --all
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Inne odpowiedzi, które używają
pip list
lub
pip freeze
,

musi zawierać
--local

w przeciwnym razie usunie również pakiety znajdujące się we wspólnych przestrzeniach nazw.
Oto fragment, którego regularnie używam
pip freeze --local | xargs pip uninstall -y

Ref:
pip freeze --help
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W systemie Windows, jeśli
path
jest poprawnie skonfigurowany, możesz użyć:
pip freeze > unins && pip uninstall -y -r unins && del unins

Powinno to wyglądać podobnie jak w przypadku systemów typu Unix:
pip freeze > unins && pip uninstall -y -r unins && rm unins

Tylko ostrzeżenie, że nie jest to całkowicie niezawodne, ponieważ możesz napotkać problemy takie jak „nie znaleziono pliku”, ale mimo to w niektórych przypadkach może działać
EDYCJA: Dla jasności:
unins
to dowolny plik, do którego zapisywane są dane po wykonaniu tego polecenia:
pip freeze & > unins
Ten plik, który z kolei napisał, jest następnie używany do odinstalowania wyżej wymienionych pakietów z niejawną zgodą/uprzednią zgodą za pomocą
pip uninstall -y -r unins
Po zakończeniu plik jest trwale usuwany.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Korzystanie z funkcji virtualenvwrapper:
wipeenv

Cm
... dokumentacja
http://virtualenvwrapper.readt ... peenv
wipeenv
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Najpierw dodaj cały pakiet do
Requirements.txt
pip freeze > requirements.txt

Następnie usuń wszystko
pip uninstall -y -r requirements.txt
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To stare pytanie, które znam, ale tak naprawdę się na nie natknąłem, więc na przyszłość możesz teraz zrobić to:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, --requirements plik

Usuń wszystkie pakiety wymienione w tym pliku wymagań. Ta opcja może być używana wielokrotnie.
z

wersje dokumentacji
https://pip.pypa.io/en/stable/ ... tall/
pip 8.1
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W przypadku użytkowników systemu Windows właśnie tego używam

Windows PowerShell

pip uninstall -y (pip freeze)
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

(dodając to jako odpowiedź, ponieważ nie mam wystarczającej reputacji, aby komentować odpowiedź @ blueberryfields)
Odpowiedź @ Blueberryfields działa dobrze, ale kończy się niepowodzeniem, jeśli nie ma pakietu do odinstalowania (co może być problemem, jeśli ta opcja „odinstaluj wszystko” jest częścią skryptu lub pliku makefile). Można to rozwiązać za pomocą
xargs -r
podczas korzystania z wersji GNU
xargs
:
pip freeze --exclude-editable | xargs -r pip uninstall -y

od
man xargs
:

-r, --no-run-if-empty
Jeśli standardowe wejście nie zawiera spacji, nie uruchamiaj polecenia. Zwykle polecenie jest wykonywane raz, nawet jeśli
brak wejścia. Ten parametr jest rozszerzeniem GNU.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

pip3 freeze --local | xargs pip3 uninstall -y

Może być konieczne wielokrotne uruchomienie tego polecenia, aby uzyskać puste
pip3 freeze --local
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Używam opcji --user, aby usunąć wszystkie pakiety zainstalowane w witrynie użytkownika.
pip3 freeze --user | xargs pip3 uninstall -y
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To był dla mnie najłatwiejszy sposób na usunięcie wszystkich pakietów Pythona.
from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
system("pip3 uninstall {} -y -q".format(i.key))
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Obsługa wielu platform przy użyciu tylko
pip
:
#!/usr/bin/env pythonfrom sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributionspip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()
if not package.location.endswith('dist-packages')
])options.yes = True # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restrictiontry:
print pip_uninstall.run(options, args)
except OSError as e:
if e.errno != 13:
raise e
print >> stderr, "You lack permissions to uninstall this package.
Perhaps run with sudo? Exiting."
exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To polecenie działa dla mnie:
pip list | awk '{print $1}' | xargs pip uninstall -y
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

prosty i niezawodny sposób
wieloplatformowy
praca i praca w pipenv to także:
pip freeze 
pip uninstall -r requirement

przez pipenv:
pipenv run pip freeze 
pipenv run pip uninstall -r requirement

ale nie zaktualizuje piplocka ani pipfile, więc bądź świadomy
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W moim przypadku przypadkowo zainstalowałem wiele pakietów na całym świecie przy użyciu narzędzia
pip
zainstalowanego przez Homebrew w systemie MacOS. Najłatwiejszy sposób na przywrócenie domyślnych pakietów był prosty:
$ brew reinstall python

Lub, jeśli użyłeś
pip3
:
$ brew reinstall python3
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli korzystasz z
virtualenv
:
virtualenv --clear </path/to/your/virtualenv>

na przykład, jeśli twój virtualenv to
/Users/you/.virtualenvs/projectx
, uruchomisz:
virtualenv --clear/Users/you/.virtualenvs/projectx

jeśli nie wiesz, gdzie jest twoje wirtualne env, możesz uruchomić
który python
z aktywowanego wirtualnego env, aby uzyskać ścieżkę
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

W

zespół Shell

z Windows
pip freeze polecenie | xargs pip uninstall -y
nie zadziała. Więc dla tych z Was, którzy używają Windows, wymyśliłem alternatywny sposób, aby to zrobić.

  • Skopiuj wszystkie nazwy zainstalowanych pakietów pip z polecenia
    pip freeze
    w txt plik.
  • Następnie przejdź do lokalizacji pliku .txt i uruchom polecenie
    pip uninstall -r * textfile.txt *
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli używasz
pew
, możesz użyć polecenia wipeenv:
pew wipeenv [env]
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Pip nie ma możliwości dowiedzenia się, które pakiety zainstalował i które pakiety zostały zainstalowane przez menedżera pakietów systemu. W tym celu musisz zrobić coś takiego
dla dystrybucji opartych na rpm (zamień python2.7 na wersję Pythona, na której zainstalowałeś pip):
find/usr/lib/python2.7/ |while read f; do
if ! rpm -qf "$f" &>/dev/null; then
echo "$f"
fi
done |xargs rm -fr

dla dystrybucji opartej na deb:
find/usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S "$f" &>/dev/null; then
echo "$f"
fi
done |xargs rm -fr

następnie wyczyść pozostałe puste katalogi:
find/usr/lib/python2.7 -type d -empty |xargs rm -fr

Uważam, że pierwsza odpowiedź jest bardzo myląca, ponieważ usunie ona wszystkie (większość?) Pakietów Pythona z Twojej dystrybucji i prawdopodobnie pozostawi zepsuty system.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się