"ValueError: _system nicht initialisiert" bei Verwendung von apt.VersionCompare


9

Ich habe ein Bash-Skript geschrieben, das zwei Versionszeichenfolgen vergleichen muss, um zu entscheiden, ob eine neue Version heruntergeladen werden soll oder nicht. Der Test basiert auf einem Python-Skript, das apt.VersionCompare()den Versionsvergleich auf die gleiche Weise durchführt 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)

Mit dem Upgrade auf Ubuntu 14.4 funktionierte dies nicht mehr.

Ich habe versucht, das Skript unter /programming/4957514/ wie folgt zu ändern :

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

aber das gibt mir ValueError: _system not initialized. Wie löse ich oder gibt es eine bessere Möglichkeit, Versionen zu vergleichen apt?

Antworten:


6

Seltsamerweise funktioniert der Code, wenn ich ihn über eine interaktive Python-Eingabeaufforderung ausführe. In jedem Fall weist dieser Fehlerbericht auf eine Lösung (?) 1 hin :

Fügen Sie einen Anruf hinzu, apt_pkg.init_system()wie hier dokumentiert (oder import aptauch):

#!/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 Anscheinend hat sich auch der InitSystemFunktionsname von CamelCase zu Unterstrichen geändert.


Haben Sie import aptvor dem Import eine interaktive Eingabeaufforderung ausgeführt apt_pkg? Das würde die Dinge erklären, da dies auch das Modul initialisiert.
Anthon

@Anthon Ich habe meinen Python3-Verlauf überprüft und sehe nicht so aus. Aber jetzt in einer Python-Shell bekomme ich diesen Fehler. Oo
Muru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.