2010-05-18 7 views
38

J'utilise pip et virtualenv pour mon application python. Je voudrais passer à une nouvelle version de l'application sans toucher aux dépendances. Quand j'utilise pip install -U, il essaie de mettre à jour tous les paquets, et même désinstalle et réinstalle la même version d'un paquet de dépendances quand il n'y a pas de nouvelle version disponible.Mettre à niveau le paquet sans mettre à jour les dépendances en utilisant pip?

J'ai également essayé pip install -U --no-deps mais cela semble équivalent à une installation normale au lieu d'une mise à niveau. Y at-il une combinaison de drapeaux qui fera ce que je veux?

+0

bonne question. Je crois que http://stackoverflow.com/questions/2875232/list-python-package-dependencies-without-loading-them - si vous ne pouvez même pas lister les dépendances à l'avance, vous semblez être bloqué. – denis

Répondre

43

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

+0

Ma confusion est venue de la différence de comportement lorsque vous donnez à un pip une tarball spécifique par rapport à un nom de paquet. Carl Meyer a eu une explication utile: http://groups.google.com/group/python-virtualenv/msg/d702c251a6dc40a5 –

+0

Je recommande fortement d'exécuter 'pip check' par la suite pour vérifier s'il y a des problèmes avec des dépendances de dépendances manquantes. – Flimm

4

Vous avez raison. Je pensais que quand j'ai ajouté --no-deps il avait négligé de désinstaller la version existante. Mais je l'ai essayé à nouveau et voir 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... 
25

MISE À JOUR (merci à @ commentaire de Jéther): Si vous utilisez la dernière version de pépin, puis la mise à jour uniquement les dépendances en cas de besoin est maintenant la valeur par défaut comportement, et vous n'avez pas besoin de faire quelque chose 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 les dépendances, alors en effet la voie à suivre est

pip install -U --no-deps mypackage 

Mais je pense que ce que vous voulez habituellement est de ne pas mettre à jour les dépendances à moins qu'il est nécessaire. Dans ce cas, vous pouvez utiliser:

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

Cela ne met à jour les exigences si le package nécessite une version plus récente que est installé.

+0

Ceci est maintenant la nouvelle stratégie par défaut dans pip: https://github.com/pypa/pip/pull/4500 – Jether

+0

LoL, je viens de copier aveuglément la commande de la réponse et il a en effet installé quelques ['mypackage'] (https : //pypi.python.org/pypi/Mypackage/0.1) dans mon python. – ImportanceOfBeingErnest