如何比较Debian软件包版本?

时间:2011-02-10 13:14:32

标签: python debian apt

我查看了python-aptpython-debian,但它们似乎没有比较软件包版本的功能。我必须自己编写,还是可以使用?

理想情况下,它看起来像:

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

3 个答案:

答案 0 :(得分:50)

也许是因为标题没有提及Python(虽然标签有),谷歌在问同样的问题时却把我带到了这里,但希望得到一个bash的答案。这似乎是:

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

安装一个至少与lenny-backports版本一样新的rubygems版本,其方式不会给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

也许我应该在一个单独的问题中询问如何做到这一点,希望得到一个不那么笨重的答案。

答案 1 :(得分:41)

您可以使用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 :(得分:0)

python-debian也可以做到这一点。它的使用方式与python-apt几乎相同:

from debian import debian_support 

a = '1:1.3.10-0.3'
b = '1.3.4-1'
vc = debian_support.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