如何比较Debian软件包版本?

tsh*_*ang 31 python debian apt

我看了看python-apt,并python-debian和他们似乎并不有功能比较软件包版本.我必须自己写,还是我可以使用?

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

>>> v1 = apt.version("1:1.3.10-0.3")
>>> v2 = apt.version("1.3.4-1")
>>> v1 > v2
True
Run Code Online (Sandbox Code Playgroud)

Mar*_*rey 54

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

$ dpkg --compare-versions 11a lt 100a && echo true
true
$ dpkg --compare-versions 11a gt 100a && echo true
$ 
Run Code Online (Sandbox Code Playgroud)

安装一个至少与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
Run Code Online (Sandbox Code Playgroud)

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

  • 据了解,对于 2021 年的 Python 来说,这是最好的解决方案。其他答案中提到的库不支持许多 Debian 版本格式。在这个答案中创建一个调用 bash 命令的 Python 函数就像一个魅力。`return subprocess.call(['dpkg', '--compare-versions', '11a', 'gt', '100a']) == 0` (2认同)

unu*_*tbu 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')        
Run Code Online (Sandbox Code Playgroud)

产量

version a > version b
Run Code Online (Sandbox Code Playgroud)

感谢Tshepang在评论中注意到新版本:apt.VersionCompare现在apt_pkg.version_compare.

  • 此外,`apt.version_compare`不起作用.请改用"apt_pkg.version_compare". (2认同)

Jer*_*vis 8

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')
Run Code Online (Sandbox Code Playgroud)

输出:

version a > version b
Run Code Online (Sandbox Code Playgroud)

  • 答案特别值得赞赏,因为它不需要安装 apt_pkg,这有时可能会出现问题。python-debian 似乎有一个后备模式,可以自行实现版本比较。 (2认同)