Как сравнить версии пакетов Debian? - PullRequest
30 голосов
/ 10 февраля 2011

Я посмотрел на python-apt и python-debian, и у них, похоже, нет функциональности для сравнения версий пакетов. Должен ли я написать свой или я могу что-то использовать?

В идеале это будет выглядеть примерно так:

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

Ответы [ 2 ]

51 голосов
/ 23 августа 2013

Возможно, из-за того, что в названии не упоминается Python (хотя в тегах есть), Google привел меня сюда, когда я задавал тот же вопрос, но надеялся получить ответ bash.Это выглядит следующим образом:

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

Чтобы установить версию rubygems, которая, по крайней мере, столь же нова, как и версия из lenny-backports, таким образом, чтобы не было ошибок при установке lenny и squeeze:

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

Возможно, мне следовало бы спросить, как это сделать, в отдельном вопросе, в надежде получить менее неуклюжий ответ.

41 голосов
/ 10 февраля 2011

Вы можете использовать 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')        

доходность

version a > version b

Спасибо Тшепангу за то, что он отметил в комментариях, что для более новых версий: apt.VersionCompare сейчас apt_pkg.version_compare.

...