【问题标题】:How to compare Debian package versions?如何比较 Debian 软件包版本?
【发布时间】:2011-06-24 20:35:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: python debian apt


    【解决方案1】:

    也许是因为标题没有提到 Python(尽管标签提到了),Google 在问同样的问题但希望得到一个 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
    

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

    【讨论】:

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

    你可以使用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

    【讨论】:

    • 我猜你的打包程序将它安装在不同的地方。我找到了here。那也是我找到我的那个地方。我还认为你有一个旧版本的 python-apt,因为它们正在远离 CamelCase,我想这就是它没有记录的原因。
    • @Tshepang:确实,我的 python-apt 已经很老了。感谢更新
    • 实际上,您的代码运行良好。开发人员非常谨慎地将其保留为新方法名称的某种别名。
    • 另外,apt.version_compare 也不起作用。请改用apt_pkg.version_compare
    • @Tshepang:好的,这么说。再次感谢。
    【解决方案3】:

    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
    

    【讨论】:

    • 特别感谢回答,因为它不需要安装 apt_pkg ,这有时会出现问题。 python-debian好像有一个fallback模式,自己实现版本比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2013-04-22
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多