117 votes

Comment puis-je utiliser un fichier d'exigences pip pour désinstaller et installer des paquets ?

J'ai un fichier d'exigences pip qui change au cours du développement.

Can pip être fait pour désinstaller les paquets qui n'apparaissent pas dans le fichier d'exigences ainsi que l'installation de ceux qui apparaissent ? Existe-t-il une méthode standard ?

Cela permettrait au fichier d'exigences pip d'être la liste canonique des paquets - une approche "si et seulement si".

Mise à jour : Je l'ai suggéré comme une nouvelle fonctionnalité à https://github.com/pypa/pip/issues/716

152voto

Stephen J. Fuhry Points 3549

Cela devrait désinstaller tout ce qui n'est pas dans le fichier requirements.txt :

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y

Bien que cela ne fonctionne pas tout à fait correctement avec les paquets installés avec -e c'est-à-dire à partir d'un dépôt git ou similaire. Pour les ignorer, il suffit de filtrer les paquets commençant par l'icône -e drapeau :

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | grep -v '^-e ' | xargs pip uninstall -y

Alors, évidemment :

pip install -r requirements.txt

Mise à jour pour 2016 : Cependant, vous n'avez probablement pas vraiment envie d'utiliser l'approche ci-dessus. Vérifiez pip-tools y pip-sync qui accomplissent ce que vous cherchez probablement à faire d'une manière beaucoup plus robuste.

https://github.com/nvie/pip-tools

Mise à jour pour mai 2016 :

Vous pouvez maintenant aussi utiliser pip uninstall -r requirements.txt Cependant, cela accomplit essentiellement le contraire - il désinstalle tout ce qui se trouve dans la base de données de l'entreprise. requirements.txt

Mise à jour pour mai 2019 :

Vérifiez pipenv o Poésie . Beaucoup de choses se sont passées dans le monde de la gestion des paquets qui rendent ce genre de question un peu obsolète. En fait, je suis toujours heureux d'utiliser pip-tools, cependant.

28voto

Shinto Joseph Points 766

Vous pouvez maintenant passer le -r requirements.txt argument pour pip uninstall .

pip uninstall -r requirements.txt -y

Au moins à partir de pip 8.1.2, pip help uninstall montre :

...
Uninstall Options:
  -r, --requirement <file>    Uninstall all the packages listed in the given requirements file.  This option can be
                              used multiple times.
...

22voto

dbr Points 66401

Ce n'est pas une caractéristique de pip non. Si vous voulez vraiment une telle chose, vous pourriez écrire un script pour comparer la sortie de pip freeze avec votre requirements.txt mais ce serait probablement plus de tracas que ça n'en vaut la peine.

Utilisation de virtualenv il est plus facile et plus fiable de créer un environnement propre et de procéder à une (ré)installation à partir d'une base de données. requirements.txt comme :

deactivate
rm -rf venv/
virtualenv venv/
source venv/bin/activate
pip install -r requirements.txt

19voto

Michael Mior Points 13475

La réponse courte est non, vous ne pouvez pas faire cela avec pip.

5voto

danmurphy1217 Points 341

Voici une solution simple qui fonctionne :

pip uninstall $(pip freeze) -y

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