2011-02-10 9 views
23

私はpython-aptとpython-debianを見ましたが、パッケージのバージョンを比較する機能がないようです。私は自分自身を書かなければならないのですか、それとも私が使うことができるものはありますか?あなたはapt_pkg.version_compare使用することができDebianパッケージのバージョンを比較するには

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

答えて

34

理想的には、それは次のようなものになります

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.VersionCompareapt_pkg.version_compareになりました。

+0

あなたのパッケージャはそれを別の場所にインストールしたと思います。私は[ここ](http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#apt_pkg.version_compare)を見つけました。そしてそれは私が私の釣り合っている場所と同じです。私はあなたがPython-aptの旧バージョンを持っていると思います。なぜなら、彼らはCamelCaseから離れているからです。なぜそれが文書化されていないのかと思います。 – Tshepang

+0

@Tshepang:確かに、私のpython-aptはかなり古いです。アップデートありがとうございました – unutbu

+0

実際には、コードは正常に動作します。開発者は、より新しいメソッド名のための何らかの別名としてそれを保持するのに十分なほど賢明でした。 – Tshepang

43

おそらくタイトルにはPython(タグはありますが)は言及されていないので、同じ質問をしてもbashの回答を望むときにGoogleが私をここに連れてきました。それはのようだ:

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

少なくともレニーとスクイズインストールでエラーを与えない方法で、レニー-backportsのからのバージョンと新しいようだRubyGemsのバージョンをインストールするには:

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 

おそらく、私は別の質問でこれを行う方法を尋ねたはずです。

関連する問題