“ValueError: _system not initialized” saat menggunakan apt.VersionCompare

9

Saya menulis skrip bash yang harus membandingkan dua string versi untuk memutuskan untuk mengunduh versi baru atau tidak. Tes ini bergantung pada skrip Python yang melakukan apt.VersionCompare(), yang melakukan perbandingan versi seperti yang aptdilakukannya.

#!/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)

Dengan memutakhirkan ke Ubuntu 14.4 ini berhenti bekerja.

Saya mencoba mengubah skrip berikut /programming/4957514/ seperti di bawah ini:

#!/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)

tapi ini memberiku ValueError: _system not initialized. Bagaimana mengatasinya, atau adakah cara yang lebih baik untuk membandingkan versi seperti aptitu?

Christa
sumber

Jawaban:

6

Anehnya kode ini bekerja ketika saya menjalankannya dari prompt Python interaktif. Bagaimanapun, laporan bug ini menunjukkan solusi (?) 1 :

Tambahkan panggilan ke yang apt_pkg.init_system()didokumentasikan di sini (atau lakukan import aptjuga):

#!/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 Rupanya InitSystemnama fungsi telah berubah juga, dari CamelCase menjadi menggunakan garis bawah.

muru
sumber
apakah Anda kebetulan melakukan import aptprompt interaktif sebelum mengimpor apt_pkg? Itu akan menjelaskan banyak hal, seperti yang menginisialisasi modul juga.
Anthon
@Anthon Saya memeriksa riwayat python3 saya, tidak terlihat seperti itu. Tapi sekarang di shell python saya mendapatkan kesalahan itu. Oo
muru