我查看了python-apt
和python-debian
,但它们似乎没有比较软件包版本的功能。我必须自己编写,还是可以使用?
理想情况下,它看起来像:
>>> v1 = apt.version("1:1.3.10-0.3")
>>> v2 = apt.version("1.3.4-1")
>>> v1 > v2
True
答案 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