„ValueError: _system nie został zainicjowany” podczas korzystania z apt.VersionCompare

9

Napisałem skrypt bash, który musi porównać dwa ciągi wersji, aby zdecydować się na pobranie nowej wersji lub nie. Test opiera się na skrypcie w Pythonie, który działa tak samo apt.VersionCompare(), jak w przypadku porównania wersji apt.

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

Po aktualizacji do Ubuntu 14.4 przestało to działać.

Próbowałem zmienić skrypt zgodnie z /programming/4957514/ jak poniżej:

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

ale to mi daje ValueError: _system not initialized. Jak rozwiązać, czy jest lepszy sposób na porównanie wersji takich jak aptrobi?

Christa
źródło

Odpowiedzi:

6

O dziwo, kod działa, kiedy uruchamiam go z interaktywnego monitu Pythona. W każdym razie ten raport o błędzie wskazuje na rozwiązanie (?) 1 :

Dodaj połączenie do, apt_pkg.init_system()jak udokumentowano tutaj (lub wykonaj import aptrównież):

#!/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 Najwyraźniej InitSystemzmieniła się także nazwa funkcji, z CamelCase na używanie podkreślników.

muru
źródło
czy zdarzyło Ci się zrobić import aptinteraktywny monit przed importem apt_pkg? To by wyjaśniało rzeczy, ponieważ to inicjalizuje również moduł.
Anthon
@Anthon Sprawdziłem moją historię python3, nie wygląda na to. Ale teraz w powłoce pytona dostaję ten błąd. Oo
muru,