web-dev-qa-db-fra.com

Vérifiez si les exigences sont à jour

J'utilise pipfichiers d'exigences pour conserver ma liste de dépendances.

J'essaie également de suivre les meilleures pratiques de gestion des dépendances et de fournir des versions de package précises dans le fichier d'exigences. Par exemple:

Django==1.5.1
lxml==3.0

La question est: Existe-t-il un moyen de dire qu'il existe des versions de package plus récentes disponibles dans l'index de package Python pour les packages répertoriés à l'intérieur requirements.txt?

Pour cet exemple particulier, les dernières versions actuellement disponibles sont 1.6.2 et 3.3.4 pour Django et lxml respectivement.

J'ai essayé pip install --upgrade -r requirements.txt, mais il indique que tout est à jour:

$ pip install --upgrade -r requirements.txt 
Requirement already up-to-date: Django==1.5.1 ...

Notez qu'à ce stade, je ne veux pas exécuter une mise à niveau réelle - je veux juste voir s'il y a des mises à jour disponibles.

47
alecxe

Pip a cette fonctionnalité intégrée. En supposant que vous êtes dans votre type virtualenv:

$ pip list --outdated
psycopg2 (Current: 2.5.1 Latest: 2.5.2)
requests (Current: 2.2.0 Latest: 2.2.1)

$ pip install -U psycopg2 requests

Après cela, les nouvelles versions de psycopg2 et les requêtes seront téléchargées et installées. Alors:

$ pip freeze > requirements.txt

Et vous avez terminé. Ce n'est pas une commande mais l'avantage est que vous n'avez pas besoin de dépendances externes.

92
Max Tepkeev

Je viens de trouver un package python spécifiquement pour la tâche - piprot , avec le slogan suivant:

How rotten are your requirements?

C'est très simple de travailler avec:

$ piprot requirements.txt 
Django (1.5.1) is 315 days out of date. Latest is 1.6.2
lxml (3.0) is 542 days out of date. Latest is 3.3.4
Your requirements are 857 days out of date

Vous pouvez également "pipe" pip freeze à piprot, afin qu'il puisse réellement inspecter la pourriture des packages installés dans votre sandbox/environnement virtuel:

pip freeze | piprot

J'espère que cela aidera quelqu'un à l'avenir.

31
alecxe

Puisque vous avez mentionné que vous aimiez suivre les meilleures pratiques, je suppose que vous utilisez aussi virtualenv, n'est-ce pas? En supposant que c'est le cas, et puisque vous êtes déjà épinglé vos packages, il existe un outil appelé pip-tools que vous pouvez exécuter contre votre virtualenv pour vérifier les mises à jour.

Il y a un inconvénient, et pourquoi j'ai mentionné l'utilisation de virtualenv.

[l'outil] vérifie PyPI et rapporte les mises à jour disponibles. Il utilise la liste des packages actuellement installés pour vérifier les mises à jour, il n'utilise aucun requirements.txt

Si vous l'exécutez dans votre virtualenv, vous pouvez facilement voir quels packages ont des mises à jour disponibles pour votre environnement actif actuel. Si vous n'utilisez pas virtualenv, cependant, il n'est probablement pas préférable de l'exécuter sur le système car vos autres projets peuvent dépendre de différentes versions (ou peuvent ne pas bien fonctionner avec la version mise à jour même s'ils fonctionnent tous actuellement).

D'après la documentation fournie, l'utilisation est simple. Le pip-review vous indique les mises à jour disponibles, mais ne les installe pas.

$ pip-review
requests==0.13.4 available (you have 0.13.2)
redis==2.4.13 available (you have 2.4.9)
rq==0.3.2 available (you have 0.3.0)

Si vous souhaitez également installer automatiquement, l'outil peut également gérer cela: $ pip-review --auto. Il y a aussi un --interactive commutateur que vous pouvez utiliser pour mettre à jour les packages de manière sélective.

Une fois que tout cela est fait, pip-tools fournit un moyen de mettre à jour votre requirements.txt avec les dernières versions: pip-dump. Encore une fois, cela s'exécute sur l'environnement actuellement actif, il est donc recommandé de l'utiliser dans un virtualenv.

L'installation du projet peut être effectuée via pip install pip-tools.

Note de l'auteur: je l'ai utilisé pour de petits projets Django et j'en ai été très satisfait. Une note, cependant, si vous installez pip-tools dans votre environnement virtuel, lorsque vous exécutez pip-dump vous constaterez qu'il est ajouté à votre fichier requirements.txt. Comme mes projets sont petits, j'ai toujours juste supprimé manuellement cette ligne. Si vous disposez d'un script de génération, vous souhaiterez peut-être le supprimer automatiquement avant de le déployer.

9
Andy

Vous pouvez simplement faire quelque chose comme ça dans votre env (virtuel ou non virtuel):

pip freeze | cut -d = -f 1 | xargs -n 1 pip search | grep -B2 'LATEST:'
5
Rico