"ValueError: _система не ініціалізується" під час використання 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 Я перевірив свою історію python3, не схожа на це. Але тепер в оболонці пітона я отримую цю помилку. Оо
муру
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.