我查看了python-apt
和python-debian
,它们似乎没有比较软件包版本的功能。我需要自己编写代码吗?还是有现成的工具可以使用?
理想情况下,它应该像这样:
>>> v1 = apt.version("1:1.3.10-0.3")
>>> v2 = apt.version("1.3.4-1")
>>> v1 > v2
True
也许是因为标题没有提到Python(尽管标签中有),当我询问同样的问题但希望得到bash答案时,谷歌将我带到了这里。这似乎是:
$ dpkg --compare-versions 11a lt 100a && echo true
true
$ dpkg --compare-versions 11a gt 100a && echo true
$
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
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
apt.VersionCompare
现在是apt_pkg.version_compare
。apt.version_compare
无法使用。请改用 apt_pkg.version_compare
。 - tshepangapt_pkg.version_compare()
,就会出现ValueError: _system not initialized
的错误。 - Nathan Osmanapt_pkg.init_system()
的调用。请参见http://unix.stackexchange.com/q/172311/3330。 - unutbupython-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
你已经提到了 python-apt
和 python-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-debian
会自动使用更高效的版本 python3-apt
,如果已经安装。但是你也可以通过从 apt
导入 Version
来显式地使用它:
from apt import Version
return subprocess.call(['dpkg', '--compare-versions', '11a', 'gt', '100a']) == 0
- Pierredpkg
可用。 - Philip Couling