web-dev-qa-db-fra.com

Mettre à niveau le package sans mettre à niveau les dépendances à l'aide de pip?

J'utilise pip et virtualenv pour mon application python. Je voudrais passer à une nouvelle version de l'application sans toucher aux dépendances. Lorsque j'utilise pip install -U, il essaie de mettre à niveau tous les packages, et même de désinstaller et de réinstaller la même version d'un package de dépendance lorsqu'aucune nouvelle version n'est disponible.

J'ai aussi essayé pip install -U --no-deps mais cela semble équivalent à une installation régulière au lieu d'une mise à niveau. Y a-t-il une combinaison de drapeaux qui fera ce que je veux?

50
Amy G

Je viens d'essayer mon projet virtualenv et pip install -U --no-deps mypackage semble bien fonctionner. Il suffit de télécharger le mypackage et rien d'autre. Comment est votre configuration?

50
Y.H Wong

Aperçu:

  • Installez de nouveaux packages sans mettre à niveau ceux installés: pip install (sans pour autant -U)
  • Mettez à niveau uniquement les packages obsolètes selon les exigences: pip install --upgrade --upgrade-strategy only-if-needed (par défaut dans les nouvelles versions)
  • Mettre à niveau le package et toutes les dépendances vers la dernière version: pip install --upgrade --upgrade-strategy eager (par défaut dans les anciennes versions)
  • Installez ou mettez à niveau les packages répertoriés sans toucher aux dépendances: --no-deps

UPDATE (grâce au commentaire de @ Jether): Si vous utilisez la dernière version de pip, la mise à jour des dépendances uniquement lorsque cela est nécessaire est désormais le comportement par défaut, et vous n'avez rien à faire de spécial! La réponse ci-dessous décrit les étapes pour les anciennes versions de pip (qui fonctionne également pour les versions plus récentes si vous voulez être portable).

Si vous voulez vraiment ne pas toucher aux dépendances, alors la voie à suivre est

pip install -U --no-deps mypackage

Mais je pense que ce que vous voudrez généralement, c'est de ne pas mettre à niveau les dépendances, sauf si cela est nécessaire. Dans ce cas, vous pouvez utiliser:

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

Cela ne met à jour les exigences que si le package requiert une version plus récente que celle installée.

43
Mark

Vous avez raison. J'ai pensé que lorsque j'ai ajouté --no-deps il avait négligé de désinstaller la version existante. Mais je l'ai réessayé et je vois qu'il n'y a pas de problème:

$ pip install -U --no-deps myproj
Downloading/unpacking myproj
  Downloading myproj-1.0-trunk.31072.tar.gz (43Kb): 43Kb downloaded
  Running setup.py Egg_info for package myproj
Installing collected packages: myproj
  Found existing installation: myproj 1.0-trunk.31053
    Uninstalling myproj:
      Successfully uninstalled myproj
  Running setup.py install for myproj
Successfully installed myproj
Cleaning up...
4
Amy G