2011-02-10 19 views
23

Ho guardato a python-apt e python-debian e sembra che non abbiano funzionalità per confrontare le versioni dei pacchetti. Devo scrivere il mio, o c'è qualcosa che posso usare?Come confrontare le versioni dei pacchetti Debian

Idealmente, sarebbe simile:

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

risposta

34

Si potrebbe utilizzare 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')   

cede

version a > version b 

Grazie a Tshepang per notare nei commenti quello per le versioni più recenti: apt.VersionCompare è ora apt_pkg.version_compare.

+0

Immagino che il tuo packager l'abbia installato in un posto diverso. L'ho trovato [qui] (http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#apt_pkg.version_compare). E questo è lo stesso posto in cui vado anche io. Penso anche che tu abbia una vecchia versione di python-apt perché si stanno allontanando da CamelCase, e immagino sia per questo che non è documentato. – Tshepang

+0

@Tshepang: In effetti, il mio python-apt è piuttosto vecchio. Grazie per l'aggiornamento – unutbu

+0

In realtà, il tuo codice funziona correttamente. Gli sviluppatori erano abbastanza prudenti da tenerlo come una sorta di alias per i nuovi nomi dei metodi. – Tshepang

43

Forse perché il titolo non menziona Python (anche se i tag lo fanno), Google mi ha portato qui quando ha fatto la stessa domanda ma sperando in una risposta bash. Che sembra essere:

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

di installare una versione di rubygems che è almeno altrettanto nuova come la versione da Lenny-backport in un modo che dà nessun errore su Lenny e spremere le installazioni:

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 

Forse avrei dovuto chiedere come farlo in una domanda separata, nella speranza di ottenere una risposta meno grossa.

Problemi correlati