893 votes

Quel est le moyen le plus simple de supprimer tous les paquets installés par pip ?

J'essaie de réparer l'un de mes virtualenvs - j'aimerais réinitialiser toutes les bibliothèques installées pour qu'elles correspondent à celles de la production.

Existe-t-il un moyen rapide et facile de faire cela avec pip ?

31 votes

@patelshahrukh désinstallation de python N'EST PAS supprimer les paquets pip. svp ÉVITER en faisant ça, car il est probable que les deux NE FONCTIONNE PAS de la façon dont vous le pensez, et selon la façon dont vous installez à nouveau python, peut laisser votre machine dans un état instable qui est plus de travail à réparer .

0 votes

Cela pourrait être utile pour les paquets installés en mode développement ou en mode modifiable : stackoverflow.com/questions/17346619/

1285voto

blueberryfields Points 7097

J'ai trouvé ce snippet comme solution alternative. C'est une suppression plus gracieuse des bibliothèques que de refaire le virtualenv :

pip freeze | xargs pip uninstall -y

Si vous avez des paquets installés via VCS, vous devez exclure ces lignes et supprimer les paquets manuellement (élevés à partir des commentaires ci-dessous) :

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

8 votes

Je trouve que c'est une bonne solution, purement parce qu'elle ne supprime pas entièrement l'environnement virtuel - j'ai peut-être apporté des modifications à par ex. postactivate qui restera.

6 votes

Après avoir exécuté cette opération, j'ai réalisé qu'elle supprimait le setuptools paquet. J'ai résolu le problème en suivant les instructions ici : stackoverflow.com/questions/7446187/

1 votes

@gerty3000 oui, cela va (comme le demande la question) supprimer tous les paquets installés dans un virtual-env. dans votre environnement, peut-être que setuptools serait mieux installé à un emplacement global à la place ?

600voto

Harshad Kavathiya Points 1922

Cela fonctionnera pour tous les systèmes Mac, Windows et Linux. Pour obtenir la liste de tous les paquets pip dans le fichier requirements.txt (Note : Cette commande écrasera le fichier requirements.txt s'il existe, sinon elle en créera un nouveau, et si vous ne voulez pas remplacer l'ancien fichier requirements.txt, donnez un nom de fichier différent dans la commande all following à la place du fichier requirements.txt).

pip freeze > requirements.txt

Maintenant, pour enlever un par un

pip uninstall -r requirements.txt

Si nous voulons tout supprimer en même temps, alors

pip uninstall -r requirements.txt -y

Si vous travaillez sur un projet existant qui a une requirements.txt et que votre environnement a divergé, remplacez simplement requirements.txt des exemples ci-dessus avec toberemoved.txt . Ensuite, une fois que vous avez suivi les étapes ci-dessus, vous pouvez utiliser la fonction requirements.txt pour mettre à jour votre environnement maintenant propre.

Et pour une seule commande sans créer de fichier (comme @joeb l'a suggéré).

pip uninstall -y -r <(pip freeze)

143voto

Robert Moskal Points 838

Cela fonctionne avec la dernière version. Je pense que c'est la façon la plus courte et la plus déclarative de le faire.

virtualenv --clear MYENV

Mais pourquoi ne pas simplement supprimer et recréer le virtualenv ?

Les règles d'immuabilité. De plus, il est difficile de se souvenir de tous ces pipes et greps que les autres solutions utilisent.

8 votes

Est-ce que c'est effectivement la même chose que d'exécuter wipeenv ? virtualenvwrapper.readthedocs.org/en/latest/

0 votes

En fait - il semble (d'après ce que je viens de voir) que wipeenv alors qu'il se trouve dans l'environnement jette une erreur et ne supprime rien s'il est utilisé dans le contexte d'un fichier pip install -e de développement, en essayant d'utiliser virtualenv --clear MYENV ne génère pas d'erreur et ne supprime aucun des paquets que vous avez pu installer précédemment dans l'environnement. C'est du moins le cas sous OSX. Voir bitbucket.org/dhellmann/virtualenvwrapper/issues/211/ pour plus d'informations.

3 votes

wipeenv est un alias fourni par virtualenvwrapper, donc tout le monde ne l'a pas.

131voto

tedmiston Points 465

Je voulais élever cette réponse hors de la section des commentaires parce que c'est l'une des solutions les plus élégantes du fil de discussion. Tout le mérite de cette réponse revient à @joeb .

pip uninstall -y -r <(pip freeze)

Cela a bien fonctionné pour moi dans le cas où je voulais vider le dossier des paquets de l'utilisateur en dehors du contexte d'un virtualenv, ce que beaucoup des réponses ci-dessus ne gèrent pas.

Edit : Quelqu'un sait comment faire fonctionner cette commande dans un Makefile ?

Bonus : Un alias bash

Je l'ajoute à mon profil bash pour plus de commodité :

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

Alors cours :

pipuninstallall

Alternative pour pipenv

Si vous utilisez pipenv tu peux juste courir :

pipenv uninstall --all

62voto

nehemiahjacob Points 122

Autres réponses qui utilisent pip list o pip freeze doit inclure --local sinon, il désinstallera également les paquets qui se trouvent dans les espaces de noms communs.

Voici donc les extraits que j'utilise régulièrement

 pip freeze --local | xargs pip uninstall -y

Réf : pip freeze --help

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X