Verifica si los requisitos están actualizados

5 minutos de lectura

avatar de usuario
alejandro

Estoy usando pip archivos de requisitos por mantener mi lista de dependencias.

También trato de seguir las mejores prácticas para administrar dependencias y proporcionar versiones de paquetes precisas dentro del archivo de requisitos. Por ejemplo:

Django==1.5.1
lxml==3.0

La pregunta es: ¿Hay alguna manera de saber si hay versiones de paquetes más nuevas disponibles en el índice de paquetes de Python para los paquetes enumerados en el interior? requirements.txt?

Para este ejemplo en particular, las últimas versiones disponibles actualmente son 1.6.2 y 3.3.4 para Django y lxml respectivamente.

He intentado pip install --upgrade -r requirements.txtpero dice que todo está actualizado:

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

Tenga en cuenta que en este momento no quiero ejecutar una actualización real, solo quiero ver si hay actualizaciones disponibles.

Pip tiene esta funcionalidad incorporada. Asumiendo que estás dentro de tu tipo 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

Después de eso, se descargarán e instalarán nuevas versiones de psycopg2 y solicitudes. Después:

$ pip freeze > requirements.txt

Y ya está. Este no es un comando, pero la ventaja es que no necesita dependencias externas.

  • Esta es la respuesta correcta. Los otros son útiles para saber, pero esto no utiliza herramientas adicionales.

    – 0atman

    9 de julio de 2015 a las 9:21


  • pip list --outdated funciona lento para muchos paquetes instalados. Y pip search <package> no es muy útil: da versiones de desarrollo como las más recientes y produce demasiada basura. ¿Existe un comando para verificar con precisión solo uno o algunos paquetes en busca de actualizaciones (que en realidad haría tropezar con pip install -U) por lo tanto, ¿una especie de ejecución de simulación?

    – kxr

    03/04/2017 a las 18:37


  • @kxr Acabo de comprobar los documentos de pip para estar seguro y, a partir de hoy, no creo que sea posible.

    – Max Tepkeev

    03/04/2017 a las 19:58

avatar de usuario
alejandro

Acabo de encontrar un paquete de python específicamente para la tarea: piprotcon el siguiente lema:

How rotten are your requirements?

Es muy sencillo trabajar con:

$ 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

También puede “tubería” pip freeze a piprot comando, por lo que en realidad puede inspeccionar qué tan podridos están los paquetes instalados en su sandbox/entorno virtual:

pip freeze | piprot

Espero que ayude a alguien en el futuro.

  • Me encanta cómo piprot suma todos los días al final.

    – tobych

    3 de septiembre de 2015 a las 1:48

  • @TobyChampion sí, a veces es un poco deprimente, especialmente si sabes que no puedes actualizar algo que se lanzó hace más de 1 año 🙂

    – alecxe

    3 de septiembre de 2015 a las 1:53

  • congelación de pepitas | piprot no funciona para mí: piprot (0.9.6) y pip (1.5.6) de todos modos piprot requirements.txt funciona muy bien

    – yucer

    10 de marzo de 2016 a las 10:01

  • Ya no se mantiene 🙁

    – Sohaib Farooqui

    28 de abril de 2021 a las 12:47

Como mencionó que le gusta seguir las mejores prácticas, supongo que también está usando virtualenv, ¿correcto? Suponiendo que ese sea el caso, y dado que ya está fijación sus paquetes, hay una herramienta llamada pip-herramientas que puede ejecutar contra su virtualenv para buscar actualizaciones.

Sin embargo, hay un inconveniente, y por qué mencioné el uso de virtualenv.

[the tool] comprueba PyPI e informa de las actualizaciones disponibles. Utiliza la lista de paquetes actualmente instalados para buscar actualizaciones, no utiliza ningún requisito.txt

Si lo ejecuta en su virtualenv, puede ver fácilmente qué paquetes tienen actualizaciones disponibles para su entorno activo actual. Sin embargo, si no está utilizando virtualenv, probablemente no sea mejor ejecutarlo en el sistema, ya que sus otros proyectos pueden depender de diferentes versiones (o pueden no funcionar bien con la versión actualizada, incluso si todos funcionan actualmente).

De la documentación provista, el uso es simple. los pip-review muestra qué actualizaciones están disponibles, pero no las instala.

$ 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 también desea instalar automáticamente, la herramienta también puede manejar eso: $ pip-review --auto. También hay un --interactive modificador que puede usar para actualizar paquetes de forma selectiva.

Una vez hecho todo esto, pip-tools proporciona una forma de actualizar su requirements.txt con las versiones más recientes: pip-dump. Nuevamente, esto se ejecuta en el entorno actualmente activo, por lo que se recomienda su uso dentro de un virtualenv.

La instalación del proyecto se puede lograr a través de pip install pip-tools.

Nota del autor: lo he usado para pequeños proyectos de Django y estoy muy satisfecho con él. Sin embargo, una nota, si instala pip-tools en su entorno virtual, cuando ejecuta pip-dump encontrará que se agrega a su archivo requirements.txt. Como mis proyectos son pequeños, siempre eliminé manualmente esa línea. Si tiene un script de compilación de algún tipo, es posible que desee eliminarlo automáticamente antes de implementarlo.

  • pip-tools es definitivamente el paquete que voy a usar, gracias por señalarlo. También verifique la respuesta que he proporcionado: según tengo entendido, pip-tools funciona con su entorno virtual, pero piprot utiliza el enfoque de “solo requisitos”, ¿correcto?

    – alecxe

    08/04/2014 a las 20:56

  • @alecxe Así es como se ve. no había visto piprot antes de. Eso también se ve muy interesante. Gracias por mencionarlo.

    – Andy

    08/04/2014 a las 21:46

  • Acabo de instalar la última versión de pip-toolspero no tengo pip-review archivo en mi camino. ¿Algo cambió?

    – Vadim Kótov

    19 de enero de 2017 a las 12:29

  • No sé si es lo mismo (yo también tengo tu problema @vadim, pero encontré pip-review aquí: github.com/jgongrijp/pip-revisión

    – thorwhalen

    21 oct 2019 a las 20:16


  • pip-review se movió a otro proyecto como @thorwhalen ya mencionó y vinculó. Discusión de por qué aquí

    – RoachLord

    13 de noviembre de 2020 a las 10:54


Simplemente puede hacer algo como esto en su entorno (virtual o no virtual):

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

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad