«ValueError: _system not initialized» при использовании apt.VersionCompare

9

Я написал скрипт bash, который должен сравнить две строки версии, чтобы решить, загружать новую версию или нет. Тест основан на скрипте Python apt.VersionCompare(), который выполняет сравнение версий, как это 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)

При обновлении до Ubuntu 14.4 это перестало работать.

Я попытался изменить скрипт, следуя /programming/4957514/, как показано ниже:

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

но это дает мне ValueError: _system not initialized. Как решить, или есть лучший способ сравнить версии, как это aptделает?

Криста
источник

Ответы:

6

Странно, код работает, когда я запускаю его из интерактивной подсказки Python. В любом случае, этот отчет об ошибке указывает на решение (?) 1 :

Добавьте вызов, apt_pkg.init_system()как задокументировано здесь (или сделайте import aptтак же):

#!/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 Очевидно, InitSystemимя функции также изменилось, с CamelCase на использование подчеркивания.

Мур
источник
Вы делали import aptинтерактивное приглашение перед импортом apt_pkg? Это объяснило бы вещи, поскольку это также инициализирует модуль.
Anthon
@Anthon Я проверил свою историю с python3, похоже, нет. Но теперь в оболочке Python я получаю эту ошибку. Оо
Муру