Comment puis-je mettre à niveau des packages spécifiques à l'aide de pip et d'un fichier d'exigences?


437

J'utilise pip avec un fichier d'exigences, dans un virtualenv, pour mes projets Django. J'essaie de mettre à niveau certains packages, notamment Django lui-même, et j'obtiens une erreur concernant les conflits de code source:

Source in `<virtualenv`>/build/Django has version 1.2.3 that conflicts with Django==1.2.4 (from -r requirements/apps.txt (line 3))

C'est après avoir mis à jour le numéro de version de Django de 1.2.3 à 1.2.4 dans mon fichier d'exigences. J'utilise cette commande pour faire la mise à niveau:

pip --install --upgrade -E `<virtualenv dir`> --requirement `<requirements file`>

Je ne trouve aucun indicateur qui déclenche un re-téléchargement total du package. J'ai même essayé d'exécuter une commande de désinstallation d'abord, puis l'installation, mais pas de dés. Peut-être que je manque quelque chose?


1
Veuillez vérifier la réponse de @ dr-jimbob car les versions récentes de pip mettront à jour toutes les autres dépendances dont dépend le package que vous mettez à niveau.
— Lokesh Meher, le

Réponses:


61

Je ne sais pas si c'est exactement votre problème, mais dans mon cas, je n'ai pas pu mettre à niveau Django vers 1.2.4 - je terminais toujours avec la version 1.2.3, j'ai donc désinstallé Django avec:

<virtualenv>/bin/pip uninstall Django

Ensuite, j'ai supprimé le <virtualenv>/build/Djangorépertoire et enfin j'ai installé la bonne version avec:

<virtualenv>/bin/pip install Django

J'espère que cela vous aidera.


53
Ce n'est pas la meilleure pratique. Utilisez pip install Django -Uou pip install Django --upgradecomme décrit dans la réponse de @JoeyG.
— Ahmad

@Ahmad est d'accord. Il devrait y avoir un processus de mise à jour fluide dans pip et env virtuel.
— Parth Joshi

1274

J'ai exécuté la commande suivante et elle est passée de 1.2.3 à 1.4.0

pip install Django --upgrade

Raccourci pour la mise à niveau:

pip install Django -U

Remarque : si le package que vous mettez à niveau a des exigences, cette commande mettra également à niveau toutes les exigences vers les dernières versions disponibles. Dans les versions récentes de pip, vous pouvez empêcher ce comportement en spécifiant--upgrade-strategy only-if-needed . Avec cet indicateur, les dépendances ne seront pas mises à niveau sauf si les versions installées des packages dépendants ne satisfont plus aux exigences du package mis à niveau.


7
Pour moi, cela a mis à jour tous mes emballés et tout foiré !!!! Les documents indiquent: - mettre à niveau tous les packages vers la dernière version disponible. Est-ce correct ou ai-je fait quelque chose de mal?
— Prometheus

4
@OrbiterFleet J'avais besoin de mettre à jour les "demandes", donc je l'ai fait pip install Requests --upgradeet seules les "demandes" ont été mises à niveau. La description indique "mettre à niveau tous les packages spécifiés " lorsque je consulte les documents.
— harperville

31
ATTENTION, il met également à jour toutes les dépendances et peut tout gâcher. la meilleure option consiste à désinstaller et réinstaller le package.
— marcelosalloum

3
pour mettre à niveau l'utilisation d'un package spécifiquepip install --upgrade django==1.4.0
— whale_steward

cela devrait être la bonne réponse selon la question ou la question elle-même est fausse.
— int soumen

51

selon pip docs exemple 3

pip install --upgrade django

mais sur la base de mon expérience, l'utilisation de cette méthode mettra également à niveau tout package s'y rapportant. exemple:

Supposons que vous souhaitiez effectuer une mise à niveau somepackagenécessitant l' django >= 1.2.4utilisation de ce type de méthode, il mettra également à niveau somepackageET djangovers la dernière mise à jour. Juste pour être sûr, faites:

# assume you want to keep django 1.2.4
pip install --upgrade somepackage django==1.2.4

Faire cela mettra à jour somepackageet gardera Django à la version 1.2.4


Bonne prise mais votre explication est déroutante puisque vous avez commencé avec djangocomme package principal puis dans l'exemple que vous utilisez somepackagepuis utilisez djangocomme dépendance.
— Long

34

La commande de raccourci pour --upgrade:

pip install Django --upgrade

Est:

pip install Django -U

7
Que diriez-vous de modifier la réponse existante pour ajouter ce peu d'informations au lieu d'une réponse (incomplète)?
— a1an

@ a1an, veuillez suggérer les informations supplémentaires qui, selon vous, devraient être ajoutées dans une "modification suggérée". Merci
— Aaron Lelevier

4
Je veux dire que vous pouvez modifier la réponse donnée par JoeyG, en ajoutant l'option de raccourci que vous avez fournie dans son contexte.
— a1an

17

Si vous mettez à niveau un package, l'ancien sera désinstallé.

Un moyen pratique de le faire consiste à utiliser cette pip-upgrader qui met également à jour les versions dans votrerequirements.txt fichier pour les packages choisis (ou tous les packages).

Installation

pip install pip-upgrader

Usage

Activez votre virtualenv (important, car il installera également les nouvelles versions des packages mis à niveau dans virtualenv actuel).

cd dans le répertoire de votre projet, puis exécutez:

pip-upgrade

Utilisation avancée

Si les exigences sont placées dans un emplacement non standard, envoyez-les comme arguments:

pip-upgrade path/to/requirements.txt

Si vous savez déjà quel package vous souhaitez mettre à niveau, envoyez-les simplement comme arguments:

pip-upgrade -p django -p celery -p dateutil

Si vous devez mettre à niveau vers la version pré-version / post-version, ajoutez un --prereleaseargument à votre commande.

Divulgation complète: j'ai écrit ce paquet. J'espère que cela aide.


1
existe-t-il une option pour mettre à niveau tous les packages à la fois (c'est-à-dire sans les répertorier) avec cette approche?
— Fan numéro un de Bjorks

1
@MikePalmice yes: pip-upgrade -p allmettra à niveau tous vos packages et mettra à jour le fichier des exigences sans avoir besoin de votre part.
— Simion Agavriloaei

16

Si vous souhaitez uniquement mettre à niveau un package spécifique appelé somepackage, la commande que vous devez utiliser dans les versions récentes de pip est

pip install --upgrade --upgrade-strategy only-if-needed somepackage

Ceci est très utile lorsque vous avez développé une application dans django qui ne fonctionne actuellement qu'avec une version spécifique de django (disons Django = 1.9.x) et que vous souhaitez mettre à niveau un package dépendant avec une correction de bogue / nouvelle fonctionnalité et que le package mis à niveau dépend sur django (mais fonctionne avec disons n'importe quelle version de django après 1.5). Le comportement par défaut de pip install --upgrade django-some-packageserait de mettre à niveau django vers la dernière version disponible qui pourrait autrement casser votre application, bien qu'avec les --upgrade-strategy only-if-neededpackages dépendants, la mise à niveau ne sera désormais que nécessaire.


4

Normalement, pip nettoiera après lui-même et supprimera le contenu du répertoire de construction. La seule fois où il ne le fait pas, c'est:

  1. Vous avez utilisé le --no-install option
  2. Vous utilisez des packages modifiables
  3. L'installation a été annulée ou a été interrompue d'une autre manière.

Dans tous les autres cas, vous ne devriez pas avoir de buildrépertoire qui obstrue votre environnement.


1

La définition d'une version spécifique à mettre à niveau m'a aidé au lieu de la seule commande de mise à niveau.

pip3 install larapy-installer==0.4.01 -U

0

qui a résolu pour moi le problème "pip install -I --upgrade psutil --force" après, désinstallez simplement psutil avec la nouvelle version et hop vous pouvez installer soudainement l'ancienne version (:


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.