Подтвердить что ты не робот

Как сравнить версии пакетов Debian?

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

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

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

Ответ 1

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

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

Ответ 2

Возможно, из-за того, что в названии не упоминается 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

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