J'utilise pip
fichiers 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.
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.
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.
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.
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:'