【发布时间】:2011-06-24 20:35:29
【问题描述】:
我查看了python-apt 和python-debian,它们似乎没有比较软件包版本的功能。我必须自己写吗,或者有什么我可以使用的吗?
理想情况下,它看起来像:
>>> v1 = apt.version("1:1.3.10-0.3")
>>> v2 = apt.version("1.3.4-1")
>>> v1 > v2
True
【问题讨论】:
我查看了python-apt 和python-debian,它们似乎没有比较软件包版本的功能。我必须自己写吗,或者有什么我可以使用的吗?
理想情况下,它看起来像:
>>> v1 = apt.version("1:1.3.10-0.3")
>>> v2 = apt.version("1.3.4-1")
>>> v1 > v2
True
【问题讨论】:
也许是因为标题没有提到 Python(尽管标签提到了),Google 在问同样的问题但希望得到一个 bash 答案时把我带到了这里。好像是:
$ dpkg --compare-versions 11a lt 100a && echo true
true
$ dpkg --compare-versions 11a gt 100a && echo true
$
要安装至少与来自 lenny-backports 的版本一样新的 rubygems 版本,并且在安装 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
也许我应该在一个单独的问题中询问如何做到这一点,希望得到一个不那么笨拙的答案。
【讨论】:
return subprocess.call(['dpkg', '--compare-versions', '11a', 'gt', '100a']) == 0
你可以使用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 在 cmets 中指出
对于较新的版本:apt.VersionCompare 现在是 apt_pkg.version_compare。
【讨论】:
apt.version_compare 也不起作用。请改用apt_pkg.version_compare。
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
【讨论】: