39

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

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

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

4 回答 4

71

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

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

要安装至少与来自 lenny-backports 的版本一样新的 ruby​​gems 版本,并且在安装 lenny 和挤压安装时不会出错:

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

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

于 2013-08-23T17:27:34.107 回答
46

您可以使用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.VersionCompareis now apt_pkg.version_compare

于 2011-02-10T13:37:22.533 回答
5

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
于 2020-09-19T11:37:26.987 回答
1

正如您已经提到python-aptpython-debian,但是现在是 2022 年,Python 2.7已经停产,这是您安装的基于 Debian 的系统的 Python 3 代码python3-debian

from debian.debian_support import Version
v1 = Version("1:1.3.10-0.3")
v2 = Version("1.3.4-1")
print(v1 > v2)

python3-debianpython3-apt如果已安装,将自动使用更高效的版本。Version但是您也可以通过从以下方式导入来显式使用它apt

from apt import Version
于 2022-02-10T08:16:35.407 回答