2011-02-10 1 views
23

필자는 python-apt와 python-debian을 살펴 보았지만 패키지 버전을 비교할 수있는 기능이없는 것으로 보입니다. 나 자신을 써야합니까, 아니면 제가 사용할 수있는 것이 있습니까? 당신은 apt_pkg.version_compare 사용할 수데비안 패키지 버전 비교 방법

>>> 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')   

이 코멘트에 지적에 대해 Tshepang에

version a > version b 

감사를 산출

이상적으로는 같을 것 그최신 버전의 경우: apt.VersionCompare은 이제 apt_pkg.version_compare입니다.

+0

포장 업체가 다른 장소에 포장을 설치했을 것 같습니다. 나는 그것을 발견했다. (http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#apt_pkg.version_compare). 그리고 그것은 제가 또한 지느러미 같은 장소에 관한 것입니다. 또한 Python의 오래된 버전을 가지고 있다고 생각합니다. 왜냐하면 그들은 CamelCase에서 멀어지고 있기 때문입니다. 그래서 그것이 문서화되지 않은 이유입니다. – Tshepang

+0

@Tshepang : 실제로, 파이썬 - 아파트는 꽤 오래되었습니다. 업데이트 주셔서 감사합니다 – unutbu

+0

사실, 코드는 정상적으로 작동합니다. 개발자는 새로운 메소드 이름에 대한 일종의 별칭으로 유지할만큼 신중했습니다. – Tshepang

43

아마도 제목에 파이썬 (태그가 있지만)을 언급하지 않았기 때문에 Google은 같은 질문을하지만 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 

을 그 것 같다 아마 나는 덜 복잡한 대답을 얻기 위해 별도의 질문으로 그것을 어떻게해야하는지 물어야 만했을 것이다.