web-dev-qa-db-fra.com

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

J'utilise pip avec un fichier de configuration, dans virtualenv, pour mes projets Django. J'essaie de mettre à jour certains paquets, 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 la mise à jour du numéro de version de Django de 1.2.3 à 1.2.4 dans mon fichier de configuration. J'utilise cette commande pour effectuer 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?

388
gcaprio

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

<virtualenv>/bin/pip uninstall Django

Ensuite, j'ai supprimé le répertoire <virtualenv>/build/Django et finalement j'ai installé la version appropriée avec:

<virtualenv>/bin/pip install Django

J'espère que cela aidera.

56

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

pip install Django --upgrade

Raccourci pour la mise à niveau:

pip install Django -U

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

1168
JoeyG

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 tous les packages qui y sont liés. exemple:

Supposons que vous souhaitiez mettre à niveau somepackage nécessitant Django >= 1.2.4 à l'aide de ce type de méthode, il mettra également à niveau somepackage ET Django vers la dernière mise à jour. Juste pour être en sécurité faire:

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

Cela permettra de mettre à jour somepackage et de garder Django vers la version 1.2.4

49
whale_steward

La commande de raccourci pour --upgrade:

pip install Django --upgrade

Est:

pip install Django -U
31
Aaron Lelevier

Si vous souhaitez uniquement mettre à niveau un package spécifique appelé somepackage, la commande à 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 fonctionnera actuellement qu'avec une version spécifique de Django (par exemple, Django = 1.9.x) et que vous souhaitez mettre à niveau un paquet dépendant avec une correction de bogue/une nouvelle fonctionnalité et le paquet mis à niveau dépendent de Django (mais fonctionne avec n'importe quelle version de Django après la version 1.5). Le comportement par défaut de pip install --upgrade Django-some-package consiste à mettre à niveau Django vers la dernière version disponible, ce qui risquerait sinon de casser votre application, bien que les packages dépendants --upgrade-strategy only-if-needed ne soient mis à niveau que si nécessaire.

14
dr jimbob

Si vous mettez à jour un paquet, l'ancien sera désinstallé.

Pour ce faire, utilisez un pip-upgrader qui met également à jour les versions de votre fichier requirements.txt pour les packages choisis (ou tous les packages).

Installation

pip install pip-upgrader

Utilisation

Activez votre virtualenv (important, car il installera également les nouvelles versions des packages mis à niveau dans le 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 sous forme d'arguments:

pip-upgrade path/to/requirements.txt

Si vous savez déjà quel paquet vous voulez mettre à jour, envoyez-les simplement comme arguments:

pip-upgrade -p Django -p celery -p dateutil

Si vous devez effectuer une mise à niveau vers une version préliminaire ou postérieure, ajoutez l'argument --prerelease à votre commande.

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

13
Simion Agavriloaei

Normalement, pip se nettoie et supprime le contenu du répertoire de construction. La seule fois où cela ne se produit pas, c'est si:

  1. Vous avez utilisé l'option --no-install
  2. Vous utilisez des packages modifiables
  3. L'installation a été annulée ou a été interrompue.

Dans tous les autres cas, vous ne devriez pas avoir le répertoire build qui obstrue votre environnement.

4
Burhan Khalid

cela a résolu pour moi le problème "pip install -I --upgrade psutil --force", il suffit ensuite de désinstaller psutil avec la nouvelle version et hop vous pouvez installer tout à coup l’ancienne version (:

0
Eran Hpac