0

各パッケージから次の詳細を取得するために、apt_pkg と apt ライブラリの組み合わせを使用しています。

package.name
package.installedVersion
package.description
package.homepage
package.priority

次の方法で必要なものを取得できましたが、結果を取得するための最良の方法であるかどうかは完全にはわかりません。

import apt_pkg, apt

apt_pkg.InitConfig()
apt_pkg.InitSystem()

aptpkg_cache = apt_pkg.GetCache() #Low level 
apt_cache = apt.Cache() #High level

apt_cache.update()
apt_cache.open()

pkgs = {}
list_pkgs = []

for package in aptpkg_cache.Packages:
       try:
          #I use this to pass in the pkg name from the apt_pkg.packages
          #to the high level apt_cache which allows me to obtain the
          #details I need. Is it better to just stick to one library here?
          #In other words, can I obtain this with just apt_pkg instead of using apt?

          selected_package = apt_cache[package.name]

          #Verify that the package can be upgraded
          if check_pkg_status(package) == "upgradable":
           pkgs["name"] = selected_package.name
               pkgs["version"] = selected_package.installedVersion
               pkgs["desc"] = selected_package.description
               pkgs["homepage"] = selected_package.homepage
               pkgs["severity"] = selected_package.prority

               list_pkgs.append(pkgs)
          else:
               print "Package: " + package.name + " does not exist"
               pass #Not upgradable?

        except:
          pass #This is one of the main reasons why I want to try a different method.
              #I'm using this Try/Catch because there are a lot of times that when
              #I pass in package.name to apt_cache[], I get error that package does not
              #exists... 


def check_pkg_status(package):
        versions = package.VersionList
        version = versions[0]
        for other_version in versions:
            if apt_pkg.VersionCompare(version.VerStr, other_version.VerStr)<0:
                version = other_version

        if package.CurrentVer:
            current = package.CurrentVer
            if apt_pkg.VersionCompare(current.VerStr, version.VerStr)<0:
                return "upgradable"
            else:
                return "current"
        else:
            return "uninstalled"

apt_pkg/apt を使用して、アップグレード/更新候補の可能性のある各パッケージの詳細を取得する良い方法を見つけたいですか?

現在これを行っている方法では、Debian の更新マネージャーが自分のシステムにないパッケージを表示していることに気付いたにもかかわらず、システムに既に存在するパッケージの更新/アップグレードのみを取得します。

4

1 に答える 1

3

次のスクリプトはあなたの python コードに基づいており、私の Ubuntu 12.04 で動作し、python-apt 0.8+ を備えたシステムでも動作するはずです

import apt

apt_cache = apt.Cache() #High level

apt_cache.update()
apt_cache.open()

list_pkgs = []

for package_name in apt_cache.keys():
    selected_package = apt_cache[package_name]

    #Verify that the package can be upgraded
    if selected_package.isUpgradable:
        pkg = dict(
            name=selected_package.name,
            version= selected_package.installedVersion,
            desc= selected_package.description,
            homepage= selected_package.homepage,
            severity= selected_package.priority)
        list_pkgs.append(pkg)

print list_pkgs
于 2013-01-08T12:18:54.503 に答える