Giá trịError: _system không được khởi tạo khi sử dụng apt.VersionCompare


9

Tôi đã viết một tập lệnh bash phải so sánh hai chuỗi phiên bản để quyết định tải xuống phiên bản mới hay không. Bài kiểm tra dựa trên tập lệnh Python apt.VersionCompare(), phiên bản này so sánh cách aptthực hiện.

#!/usr/bin/env python
import sys, apt
res = apt.VersionCompare(sys.argv[1], sys.argv[2])
if res < 0:
   sys.exit(-1)
if res > 0:
   sys.exit(1)
sys.exit(0)

Với việc nâng cấp lên Ubuntu 14.4, điều này đã ngừng hoạt động.

Tôi đã cố gắng thay đổi tập lệnh theo /programming/4957514/ như dưới đây:

#!/usr/bin/env python
import sys, apt_pkg
res = apt_pkg.version_compare(sys.argv[1], sys.argv[2])
if res < 0:
   sys.exit(-1)
if res > 0:
   sys.exit(1)
sys.exit(0)

nhưng điều này mang lại cho tôi ValueError: _system not initialized. Làm thế nào để giải quyết, hoặc có cách nào tốt hơn để so sánh các phiên bản như thế aptnào?

Câu trả lời:


6

Kỳ lạ là mã hoạt động khi tôi chạy nó từ một dấu nhắc Python tương tác. Ở mức nào, báo cáo lỗi này chỉ ra một giải pháp (?) 1 :

Thêm một cuộc gọi đến apt_pkg.init_system()như được ghi lại ở đây (hoặc làm import aptnhư vậy):

#!/usr/bin/env python
import sys, apt_pkg
apt_pkg.init_system()
res = apt_pkg.version_compare(sys.argv[1], sys.argv[2])
if res < 0:
    sys.exit(-1)
if res > 0:
    sys.exit(1)
sys.exit(0)

1 Rõ ràng InitSystemtên hàm cũng đã thay đổi, từ CamelCase sang sử dụng dấu gạch dưới.


bạn đã tình cờ làm một import aptdấu nhắc tương tác trước khi nhập apt_pkg? Điều đó sẽ giải thích mọi thứ, vì điều đó cũng khởi tạo mô-đun.
Anthon

@Anthon Tôi đã kiểm tra lịch sử python3 của mình, không giống như vậy. Nhưng bây giờ trong một vỏ trăn tôi nhận được lỗi đó. Oo
muru
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.