J'essaie de réparer l'un de mes virtualenvs - j'aimerais réinitialiser toutes les bibliothèques installées à celles qui correspondent à la production.
Y at-il un moyen rapide et facile de faire cela avec pip?
J'ai trouvé cet extrait comme solution alternative. C'est une suppression plus gracieuse des bibliothèques que de refaire le virtualenv:
pip freeze | xargs pip uninstall -y
Si des packages sont installés via VCS, vous devez exclure ces lignes et les supprimer manuellement (à partir des commentaires ci-dessous):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
Cela fonctionnera pour tous les systèmes Mac, Windows et Linux . Pour obtenir la liste de tous les packages pip dans le fichier exigences.txt (Remarque: cette option remplacera le fichier Requirements.txt, s'il existe, il en créera un nouveau.)
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 contenant un fichier requirements.txt
et que votre environnement a divergé, remplacez simplement requirements.txt
dans les exemples ci-dessus par toberemoved.txt
. Ensuite, une fois que vous avez suivi les étapes ci-dessus, vous pouvez utiliser le requirements.txt
pour mettre à jour votre environnement désormais propre.
Et pour une seule commande sans créer de fichier (comme suggéré par joeb).
pip uninstall -y -r <(pip freeze)
Je pense que cela fonctionne avec le dernier
virtualenv --clear MYENV
Je voulais élever cette réponse dans une section de commentaire car c'est l'une des solutions les plus élégantes du sujet. Le crédit total pour cette réponse va à @joeb .
pip uninstall -y -r <(pip freeze)
Cela fonctionnait très bien pour le cas d'utilisation de la suppression de mon dossier de packages utilisateur en dehors du contexte d'une virtualenv que la plupart des réponses ci-dessus ne gèrent pas.
Edit: Quelqu'un sait comment faire fonctionner cette commande dans un Makefile?
J'ajoute ceci à mon profil bash pour plus de commodité:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
Puis lancez:
pipuninstallall
Si vous utilisez pipenv vous pouvez simplement lancer:
pipenv uninstall --all
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
Les autres réponses qui utilisent pip list
ou pip freeze
doivent inclure --local
sinon, cela désinstallera également les packages qui se trouvent dans les espaces de noms communs.
Alors voici les extraits que j'utilise régulièrement
pip freeze --local | xargs pip uninstall -y
ou
pip list --local | py -x "print(x.split()[0])" | xargs pip uninstall -y
En savoir plus sur ce problème en émettant pip freeze --help
Le moyen le plus rapide est de refaire complètement le virtualenv. Je suppose que vous avez un fichier exigences.txt correspondant à la production, sinon
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
Sous Windows, si votre path
est configurée correctement, vous pouvez utiliser:
pip freeze > unins && pip uninstall -y -r unins && del unins
Il devrait en être de même pour les systèmes de type Unix:
pip freeze > unins && pip uninstall -y -r unins && rm unins
Juste un avertissement que ce n'est pas complètement solide car vous pouvez rencontrer des problèmes tels que «Fichier non trouvé» mais cela peut néanmoins fonctionner dans certains cas
EDIT: Pour plus de clarté: unins
est un fichier arbitraire contenant des données lorsque cette commande est exécutée: pip freeze > unins
Ce fichier qu'il a ensuite écrit est ensuite utilisé pour désinstaller les packages susmentionnés avec consentement implicite/approbation préalable via pip uninstall -y -r unins
Le fichier est finalement supprimé à la fin.
Pour les utilisateurs de Windows, voici ce que j’utilise sur Windows PowerShell
pip uninstall -y (pip freeze)
C'est une vieille question que je connais, mais je l'ai trébuché pour que vous puissiez maintenant vous y reporter:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, --requirement file
Désinstallez tous les packages répertoriés dans le fichier de configuration requis. Cette option peut être utilisée plusieurs fois.
de la documentation pip version 8.1
(en ajoutant ceci comme réponse, car je n'ai pas assez de réputation pour commenter la réponse de @blueberryfields)
La réponse de @blueberryfields fonctionne bien, mais échoue s'il n'y a pas de paquet à désinstaller (ce qui peut poser problème si ce "désinstaller tout" fait partie d'un script ou d'un fichier makefile). Ceci peut être résolu avec xargs -r
lorsque vous utilisez la version GNU de xargs
:
pip freeze --exclude-editable | xargs -r pip uninstall -y
de man xargs
:
-r, --no-run-if-empty
Si l'entrée standard ne contient pas de caractères non vides, n'exécutez pas la commande. Normalement, la commande est exécutée une fois, même s'il n'y a pas d'entrée. Cette option est une extension GNU.
Pour moi, c’était le moyen le plus simple de désinstaller tous les packages Python.
from pip import get_installed_distributions
from os import system
for i in get_installed_distributions():
system("pip3 uninstall {} -y -q".format(i.key))
Prise en charge multiplateforme en utilisant uniquement pip
:
#!/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.
C'est la commande qui fonctionne pour moi:
pip list | awk '{print $1}' | xargs pip uninstall -y
Si vous utilisez pew
, vous pouvez utiliser la commande wipeenv :
pew wipeenv [env]
Dans Command Shell de Windows, la commande
pip freeze | xargs pip uninstall -y
ne fonctionnera pas. Donc, pour ceux qui utilisent Windows, j'ai trouvé un moyen alternatif de le faire.
pip freeze
dans un fichier .txt .pip uninstall -r *textfile.txt*
Si vous utilisez virtualenv
:
virtualenv --clear </path/to/your/virtualenv>
par exemple, si votre virtualenv est /Users/you/.virtualenvs/projectx
, vous exécuterez:
virtualenv --clear /Users/you/.virtualenvs/projectx
si vous ne savez pas où se trouve votre env virtuel, vous pouvez exécuter which python
depuis un env virtuel activé pour obtenir le chemin.
Dans mon cas, j'avais accidentellement installé un certain nombre de paquets dans le monde en utilisant une pip
installée sur Homebrew sur macOS. Le moyen le plus simple de revenir aux packages par défaut était simple:
$ brew reinstall python
Ou, si vous utilisiez pip3
:
$ brew reinstall python3
Tout d'abord, ajoutez tous les paquets à requirements.txt
pip freeze > requirements.txt
Puis retirez tout
pip uninstall -y -r requirements.txt