Wat is de gemakkelijkste manier om alle door pip geïnstalleerde pakketten te verwijderen?

Ik probeer een van mijn virtualenvs te repareren – ik wil alle geïnstalleerde bibliotheken terugzetten naar de bibliotheken die overeenkomen met de productie.

Is er een snelle en gemakkelijke manier om dit met pip te doen?


Antwoord 1, autoriteit 100%

Ik heb dit fragment gevonden als alternatieve oplossing. Het is een elegantere verwijdering van bibliotheken dan het opnieuw maken van de virtualenv:

pip freeze | xargs pip uninstall -y

In het geval dat je pakketten hebt geïnstalleerd via VCS, moet je die regels uitsluiten en de pakketten handmatig verwijderen (verhoogd door de opmerkingen hieronder):

pip freeze | grep -v "^-e" | xargs pip uninstall -y

Antwoord 2, autoriteit 44%

Dit werkt voor alle Mac-, Windows- en Linux-systemen.
Om de lijst van alle pip-pakketten in het requirements.txt-bestand te krijgen (Opmerking: dit zal requirements.txt overschrijven als deze bestaat, anders wordt de nieuwe gemaakt, ook als u de oude requirements.txt niet wilt vervangen, geef dan een andere bestandsnaam in de volgende opdracht op zijn plaats requirements.txt).

pip freeze > requirements.txt

Nu één voor één verwijderen

pip uninstall -r requirements.txt

Als we alles in één keer willen verwijderen,

pip uninstall -r requirements.txt -y

Als u aan een bestaand project werkt met een requirements.txt-bestand en uw omgeving is afgeweken, vervang dan eenvoudig requirements.txtuit de bovenstaande voorbeelden door toberemoved.txt. Nadat u de bovenstaande stappen heeft doorlopen, kunt u de requirements.txtgebruiken om uw nu schone omgeving bij te werken.

En voor een enkele opdracht zonder een bestand te maken (zoals @joeb suggereerde).

pip uninstall -y -r <(pip freeze)

Antwoord 3, autoriteit 12%

Dit werkt met de nieuwste. Ik denk dat dit de kortste en meest declaratieve manier is om het te doen.

virtualenv --clear MYENV

Maar waarom niet gewoon de virtualenv verwijderen en opnieuw maken?

Onveranderlijkheidsregels. Bovendien is het moeilijk om al die pijpen en greps te onthouden die de andere oplossingen gebruiken.


Antwoord 4, autoriteit 10%

Ik wilde dit antwoord uit een commentaarsectie halen omdat het een van de meest elegante oplossingen in de thread is. Het volledige krediet voor dit antwoord gaat naar @joeb.

pip uninstall -y -r <(pip freeze)

Dit werkte prima voor mij voor het gebruik van het wissen van de map met gebruikerspakketten buiten de context van een virtualenv die veel van de bovenstaande antwoorden niet aankunnen.

Bewerken: weet iemand hoe je deze opdracht in een Makefile kunt laten werken?

Bonus: een bash-alias

Ik voeg dit voor het gemak toe aan mijn bash-profiel:

alias pipuninstallall="pip uninstall -y -r <(pip freeze)"

Voer vervolgens uit:

pipuninstallall

Alternatief voor pipenv

Als je toevallig pipenvgebruikt, kun je gewoon het volgende uitvoeren:

pipenv uninstall --all

Antwoord 5, autoriteit 5%

Andere antwoorden die pip listof pip freezegebruiken moeten --localbevatten, anders wordt het ook verwijderd pakketten die te vinden zijn in de algemene naamruimten.

Dus hier is het fragment dat ik regelmatig gebruik

pip freeze --local | xargs pip uninstall -y

Ref: pip freeze --help


Antwoord 6, autoriteit 4%

Methode 1 (met pip freeze)

pip freeze | xargs pip uninstall -y

Methode 2 (met pip list)

pip list | awk '{print $1}' | xargs pip uninstall -y

Methode 3 (met virtualenv)

virtualenv --clear MYENV

Antwoord 7, autoriteit 3%

Ik heb het voor elkaar gekregen door het volgende te doen:

  1. Maak het vereistenbestand met de naam reqs.txtmet de lijst met momenteel geïnstalleerde pakketten
pip freeze > reqs.txt
  1. Verwijder vervolgens alle pakketten van reqs.txt
# -y means remove the package without prompting for confirmation
pip uninstall -y -r reqs.txt

Ik hou van deze methode omdat je altijd een bestand met pip-vereisten hebt om op terug te vallen als je een fout maakt. Het is ook herhaalbaar en werkt op Linux en Windows


Antwoord 8, autoriteit 2%

In Windows als uw pathcorrect is geconfigureerd, kunt u het volgende gebruiken:

pip freeze > unins && pip uninstall -y -r unins && del unins

Het zou een soortgelijk geval moeten zijn voor Unix-achtige systemen:

pip freeze > unins && pip uninstall -y -r unins && rm unins

Gewoon een waarschuwing dat dit niet helemaal solide is, omdat je problemen kunt tegenkomen zoals ‘Bestand niet gevonden’, maar het kan in sommige gevallen toch werken

EDIT: Voor de duidelijkheid: uninsis een willekeurig bestand waarin gegevens worden weggeschreven wanneer dit commando wordt uitgevoerd: pip freeze > unins

Dat bestand dat het op zijn beurt heeft geschreven, wordt vervolgens gebruikt om de bovengenoemde pakketten te verwijderen met impliciete toestemming/voorafgaande goedkeuring via pip uninstall -y -r unins

Het bestand wordt na voltooiing definitief verwijderd.


Antwoord 9, autoriteit 2%

Ik gebruik de optie –user om alle pakketten die op de gebruikerssite zijn geïnstalleerd te verwijderen.

pip3 freeze --user | xargs pip3 uninstall -y

Antwoord 10, autoriteit 2%

De snelste manier is om de virtualenv volledig opnieuw te maken. Ik neem aan dat je een requirements.txt-bestand hebt dat overeenkomt met de productie, zo niet:

# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt

Antwoord 11

Voeg eerst alle pakketten toe aan requirements.txt

pip freeze > requirements.txt

Verwijder vervolgens alles

pip uninstall -y -r requirements.txt 

Antwoord 12

De functie virtualenvwrappergebruiken:

wipeenv

Zie wipeenv-documentatie


Antwoord 13

Voor Windows-gebruikers, dit is wat ik gebruik op Windows PowerShell

pip uninstall -y (pip freeze)

Antwoord 14

Het is een oude vraag die ik ken, maar ik kwam hem tegen, dus voor toekomstig gebruik kun je dit nu doen:

pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...

-r, –vereiste bestand

Verwijder alle pakketten die worden vermeld in het opgegeven vereistenbestand. Deze optie kan meerdere keren worden gebruikt.

uit de pip-documentatieversie 8.1


Antwoord 15

Beste manier om alle pakketten uit de virtuele omgeving te verwijderen

Windows-omgeving gebruik de onderstaande opdracht:

pip freeze > unins && pip uninstall -y -r unins && del unins

Linux-omgeving gebruik het onderstaande commando:

pip freeze > unins && pip uninstall -y -r unins && rm unins

Antwoord 16

pip3 freeze --local | xargs pip3 uninstall -y

Het kan zijn dat je dit commando meerdere keren moet uitvoeren om een lege pip3 freeze --localte krijgen.


Antwoord 17

(voeg dit toe als antwoord, omdat ik niet genoeg reputatie heb om commentaar te geven op het antwoord van @blueberryfields)

@blueberryfields’ antwoord werkt goed, maar mislukt als er geen pakket is om te verwijderen (wat een probleem kan zijn als dit “alles verwijderen” onderdeel is van een script of makefile). Dit kan worden opgelost met xargs -rbij gebruik van de GNU-versie van xargs:

pip freeze --exclude-editable | xargs -r pip uninstall -y

van man xargs:

-r, –no-run-if-empty

Als de standaardinvoer geen niet-blanco’s bevat, voert u de opdracht niet uit. Normaal gesproken wordt de opdracht één keer uitgevoerd, zelfs als er
is geen invoer. Deze optie is een GNU-extensie.


Antwoord 18

Dit was voor mij de gemakkelijkste manier om alle Python-pakketten te verwijderen.

from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
    system("pip3 uninstall {} -y -q".format(i.key))

Antwoord 19

Cross-platform ondersteuning door alleen pipte gebruiken:

#!/usr/bin/env python
from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions
pip_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 restriction
try:
    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.

Antwoord 20

Dit is het commando dat voor mij werkt:

pip list | awk '{print $1}' | xargs pip uninstall -y

Antwoord 21

de gemakkelijke, robuuste manier
platformonafhankelijk
en ook in pipenv werken is:

pip freeze 
pip uninstall -r requirement

door pipenv:

pipenv run pip freeze 
pipenv run pip uninstall -r requirement

maar zal piplock of pipfile niet updaten, dus let op


Antwoord 22

In Windows als uw pad correct is geconfigureerd, kunt u het volgende gebruiken:

pip freeze > unins && pip uninstall -y -r unins && del unins

Antwoord 23

Als je virtualenvgebruikt:

virtualenv --clear </path/to/your/virtualenv>

als uw virtualenv bijvoorbeeld /Users/you/.virtualenvs/projectxis, voert u het volgende uit:

virtualenv --clear /Users/you/.virtualenvs/projectx

als u niet weet waar uw virtuele env zich bevindt, kunt u which pythonuitvoeren vanuit een geactiveerde virtuele env om het pad te krijgen


Antwoord 24

In Command Shellvan Windows, het commando pip freeze | xargs pip uninstall -ywerkt niet. Dus voor degenen onder jullie die Windows gebruiken, heb ik een alternatieve manier bedacht om dit te doen.

  1. Kopieer alle namen van de geïnstalleerde pakketten van pipvan de opdracht pip freezenaar een .txt-bestand.
  2. Ga vervolgens naar de locatie van uw .txt-bestand en voer de opdracht pip uninstall -r *textfile.txt*
  3. uit


Antwoord 25

Als je pewgebruikt, kun je de wipeenvcommando:

pew wipeenv [env]


Antwoord 26

Ik wilde gewoon pakketten verwijderen die door het project waren geïnstalleerd, en niet andere pakketten die ik heb geïnstalleerd (dingen zoals neovim, mypyen pudbdie ik gebruik voor lokale dev, maar die niet zijn opgenomen in de app-vereisten). Dus ik deed:

cat requirements.txt| sed 's/=.*//g' | xargs pip uninstall -y

wat goed werkte voor mij.


Antwoord 27

Dit werkt op mijn Windows-systeem

pip freeze > packages.txt && pip uninstall -y -r packages.txt && del packages.txt

Het eerste deel pip freeze > packages.txtmaakt een tekstbestand met een lijst van geïnstalleerde pakketten met pip samen met het versienummer

Het tweede deel pip uninstall -y -r packages.txtverwijdert alle geïnstalleerde pakketten zonder om een bevestigingsvraag te vragen.

Het derde deel del packages.txtverwijdert de zojuist aangemaakte packages.txt.


Antwoord 28

In mijn geval had ik per ongeluk een aantal pakketten wereldwijd geïnstalleerd met behulp van een door Homebrew geïnstalleerde pipop macOS. De gemakkelijkste manier om terug te keren naar de standaardpakketten was een simpele:

$ brew reinstall python

Of, als u pip3gebruikte:

$ brew reinstall python3

Antwoord 29

Pip kan niet weten welke pakketten er door zijn geïnstalleerd en welke pakketten zijn geïnstalleerd door de pakketbeheerder van je systeem. Hiervoor zou je zoiets als dit moeten doen

voor op rpm gebaseerde distributies (vervang python2.7 door uw python-versie waarmee u pip hebt geïnstalleerd):

find /usr/lib/python2.7/ |while read f; do
  if ! rpm -qf "$f" &> /dev/null; then
    echo "$f"
  fi
done |xargs rm -fr

voor een deb-gebaseerde distributie:

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

om vervolgens lege mappen die overblijven op te ruimen:

find /usr/lib/python2.7 -type d -empty |xargs rm -fr

Ik vond het bovenste antwoord erg misleidend, omdat het alle (de meeste?) Python-pakketten uit je distributie verwijdert en je waarschijnlijk een kapot systeem achterlaat.

Other episodes