2011-02-10 10 views
23

Miré python-apt y python-debian, y no parecen tener la funcionalidad para comparar versiones de paquetes. ¿Tengo que escribir el mío o hay algo que pueda usar?Cómo comparar las versiones del paquete Debian

Idealmente, sería algo como:

>>> v1 = apt.version("1:1.3.10-0.3") 
>>> v2 = apt.version("1.3.4-1") 
>>> v1 > v2 
True 

Respuesta

34

Usted podría utilizar apt_pkg.version_compare:

import apt_pkg 
apt_pkg.init_system() 

a = '1:1.3.10-0.3' 
b = '1.3.4-1' 
vc = apt_pkg.version_compare(a,b) 
if vc > 0: 
    print('version a > version b') 
elif vc == 0: 
    print('version a == version b') 
elif vc < 0: 
    print('version a < version b')   

produce

version a > version b 

Gracias a Tshepang para anotar en los comentarios eso para las versiones más nuevas: apt.VersionCompare ahora es apt_pkg.version_compare.

+0

Supongo que su empaquetador lo instaló en un lugar diferente. Lo encontré [aquí] (http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#apt_pkg.version_compare). Y ese es el mismo lugar en el que yo también llevo el mío. También creo que tienes una versión anterior de python-apt porque se están alejando de CamelCase, y creo que es por eso que no está documentado. – Tshepang

+0

@Tshepang: De hecho, mi python-apt es bastante viejo. Gracias por la actualización – unutbu

+0

En realidad, su código funciona bien. Los desarrolladores fueron lo suficientemente prudentes como para mantenerlo como un tipo de alias para los nombres de métodos más nuevos. – Tshepang

43

Tal vez porque el título no menciona Python (aunque sí las etiquetas), Google me trajo aquí al hacer la misma pregunta pero esperando una respuesta bash. Esa parece ser:

$ dpkg --compare-versions 11a lt 100a && echo true 
true 
$ dpkg --compare-versions 11a gt 100a && echo true 
$ 

Para instalar una versión de rubygems Eso es al menos tan nueva como la versión de lenny-backports de una manera que no da errores en Lenny y exprimir instalaciones:

sudo apt-get install rubygems && 
VERSION=`dpkg-query --show --showformat '${Version}' rubygems` && 
dpkg --compare-versions $VERSION lt 1.3.4-1~bpo50+1 && 
sudo apt-get install -t lenny-backports rubygems 

Tal vez debería haber preguntado cómo hacer eso en una pregunta separada, con la esperanza de obtener una respuesta menos torpe.

Cuestiones relacionadas