Как сравнить версии пакетов Debian?
Я посмотрел на python-apt
и python-debian
, и у них, похоже, нет функциональности для сравнения версий пакетов. Должен ли я написать свой или я могу что-то использовать?
В идеале это будет выглядеть примерно так:
>>> v1 = apt.version("1:1.3.10-0.3")
>>> v2 = apt.version("1.3.4-1")
>>> v1 > v2
True
Ответы
Ответ 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
Возможно, я должен был спросить, как сделать это в отдельном вопросе, в надежде получить менее неуклюжий ответ.