apt.VersionCompareを使用すると、「ValueError:_system not initialize」


9

新しいバージョンをダウンロードするかどうかを決定するために2つのバージョン文字列を比較する必要がある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関数名もキャメルケースからアンダースコアの使用に変更されました。


import aptインポートする前に、インタラクティブプロンプトでを実行しましたapt_pkgか?これは、モジュールも初期化するため、説明になります。
Anthon、2014

@Anthon python3の履歴を確認しましたが、似ていません。しかし、今ではpythonシェルでそのエラーが発生します。Oo
muru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.