python package pip pypi requirements.txt

python - Compruebe si los requisitos están actualizados



package pip (4)

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

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

Django==1.5.1 lxml==3.0

La pregunta es: ¿hay alguna forma de saber que existen versiones de paquetes más nuevas disponibles en el Índice de Paquetes de Python para los paquetes que se enumeran dentro de 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.txt , pero 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 deseo ejecutar una actualización real, solo quiero ver si hay actualizaciones disponibles.


Acabo de encontrar un paquete de Python específicamente para la tarea, piprot , con el siguiente eslogan:

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 "canalizar" el comando pip freeze a piprot , de modo que realmente puede inspeccionar qué tan podridos están los paquetes instalados en su entorno de arena / virtual:

pip freeze | piprot

Espero que ayude a alguien en el futuro.


Pip tiene esta funcionalidad incorporada. Suponiendo que estás dentro de tu tipo de 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 las nuevas versiones de psycopg2 y las solicitudes. Entonces:

$ pip freeze > requirements.txt

Y ya está hecho. Este no es un comando, pero la ventaja es que no necesita ninguna dependencia externa.


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

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


Ya que mencionó que le gustaría seguir las mejores prácticas, supongo que también está usando virtualenv, ¿correcto? Suponiendo que ese sea el caso, y dado que ya está pinning sus paquetes, hay una herramienta llamada pip-tools que puede ejecutar en su virtualenv para buscar actualizaciones.

Hay un lado negativo, y por eso mencioné el uso de virtualenv sin embargo.

[la herramienta] comprueba PyPI e informa las actualizaciones disponibles. Utiliza la lista de paquetes instalados actualmente para buscar actualizaciones, no usa 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á usando virtualenv, probablemente no sea mejor ejecutarlo en el sistema, ya que sus otros proyectos pueden depender de versiones diferentes (o pueden no funcionar bien con una versión actualizada, incluso si todos funcionan actualmente).

De la documentación provista, el uso es simple. La 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 interruptor --interactive que puede usar para actualizar paquetes de forma selectiva.

Una vez hecho todo esto, pip-tools proporciona una manera de actualizar tus Requirements.txt con las versiones más recientes: pip-dump . De nuevo, esto se ejecuta en el entorno activo actual, por lo que se recomienda su uso dentro de un virtualenv.

La instalación del proyecto se puede realizar 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. Una nota, sin embargo, si instala pip-tools en su entorno virtual, cuando ejecute pip-dump encontrará que se agrega a su archivo Requirements.txt. Como mis proyectos son pequeños, siempre he eliminado 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.