2011-02-10 10 views
23

Spojrzałem na python-apt i python-debian i nie mają funkcjonalności porównywania wersji pakietów. Czy muszę napisać własną, czy jest coś, z czego mogę skorzystać?Jak porównać wersje pakietów Debiana

Idealnie byłoby to wyglądać mniej więcej tak:

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

Odpowiedz

34

można użyć 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')   

daje w wyniku

version a > version b 

Dzięki Tshepang dla zauważyć w komentarzach to dla nowszych wersji: apt.VersionCompare jest teraz apt_pkg.version_compare.

+0

Zgaduję, że twój pakujący zainstalował go w innym miejscu. Znalazłem go [tutaj] (http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#apt_pkg.version_compare). I to jest to samo w tym samym miejscu, co ja też. Myślę też, że masz starą wersję Pythona-apt, ponieważ odsuwają się od CamelCase, i myślę, że właśnie dlatego nie jest to udokumentowane. – Tshepang

+0

@ Tshepang: Rzeczywiście, mój python-apt jest dość stary. Dzięki za aktualizację – unutbu

+0

W rzeczywistości Twój kod działa poprawnie. Deweloperzy byli na tyle ostrożni, aby zachować go jako swego rodzaju alias dla nowszych nazw metod. – Tshepang

43

Być może dlatego, że w tytule nie ma wzmianki o Pythonie (mimo że znaczniki to robią), Google sprowadził mnie tutaj, zadając to samo pytanie, ale mając nadzieję na odpowiedź bash. To wydaje się być:

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

Aby zainstalować wersję RubyGems to przynajmniej jako nowy jak wersja z lenny-backports w sposób, który nie daje żadnych błędów na lenny i wycisnąć Instalacje:

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 

Być może powinienem był zapytać, jak to zrobić w osobnym pytaniu, w nadziei uzyskania mniej przylegającej odpowiedzi.