2011-02-10 33 views
23

Tôi đã xem python-apt và python-debian, và chúng dường như không có chức năng so sánh các phiên bản gói. Tôi có phải viết của riêng mình hay có thứ gì đó tôi có thể sử dụng không?Cách so sánh các phiên bản gói Debian

Lý tưởng nhất, nó sẽ giống như thế:

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

Trả lời

34

Bạn có thể sử dụng 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')   

mang

version a > version b 

Nhờ Tshepang cho lưu ý trong các ý kiến rằng cho các phiên bản mới hơn: apt.VersionCompare hiện là apt_pkg.version_compare.

+0

Tôi đoán nhà đóng gói của bạn đã cài đặt nó ở một nơi khác. Tôi tìm thấy nó [ở đây] (http://apt.alioth.debian.org/python-apt-doc/library/apt_pkg.html#apt_pkg.version_compare). Và đó là về cùng một nơi tôi cũng vây của tôi. Tôi cũng nghĩ rằng bạn có một phiên bản cũ của python-apt vì chúng đang di chuyển khỏi CamelCase, và tôi đoán đó là lý do tại sao nó không được ghi lại. – Tshepang

+0

@Tshepang: Thật vậy, python-apt của tôi khá cũ. Cảm ơn bạn đã cập nhật – unutbu

+0

Thực ra, mã của bạn hoạt động tốt. Các nhà phát triển đã thận trọng, đủ để giữ nó như một loại bí danh cho các tên phương thức mới hơn. – Tshepang

43

Có lẽ vì tiêu đề không đề cập đến Python (mặc dù các thẻ đã làm), Google đã đưa tôi đến đây khi hỏi cùng một câu hỏi nhưng hy vọng có câu trả lời. Đó có vẻ là:

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

Để cài đặt một phiên bản của rubygems đó là ít nhất là mới vì phiên bản từ lenny-backports theo một cách mà không đưa ra lỗi trên lenny và bóp cài đặt:

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 

Có lẽ tôi nên hỏi làm thế nào để làm điều đó trong một câu hỏi riêng biệt, với hy vọng nhận được một câu trả lời ít clunky.

Các vấn đề liên quan