python apt_pkg是否可以获取单个pkg的详细信息?

python apt_pkg是否可以获取单个pkg的详细信息?,python,debian,apt,Python,Debian,Apt,我一直在使用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_pk

我一直在使用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\u包装,apt
apt_pkg.InitConfig()
apt_pkg.InitSystem()
aptpkg_cache=apt_pkg.GetCache()#低级别
apt_cache=apt.cache()#高级别
apt_cache.update()
apt_cache.open()
pkgs={}
列表\包装=[]
对于aptpkg_cache.Packages中的包:
尝试:
#我使用它从apt_pkg.packages传入pkg名称
#到高级apt_缓存,该缓存允许我获取
#我需要详细资料。在这里只保留一个图书馆更好吗?
#换句话说,我是否可以仅使用apt_pkg而不是使用apt来获得此信息?
选定的\u package=apt\u缓存[package.name]
#验证包是否可以升级
如果检查包装状态(包装)=“可升级”:
pkgs[“name”]=所选的_package.name
pkgs[“版本”]=选定的\u软件包。已安装版本
包装[“说明”]=所选包装。说明
pkgs[“主页”]=选定的_package.homepage
pkgs[“严重性”]=所选的\u package.prority
列表_pkgs.append(pkgs)
其他:
打印“包:+Package.name+”不存在
通过?不可升级?
除:
通过——这是我想尝试另一种方法的主要原因之一。
#我使用这个Try/Catch是因为有很多时候
#我将package.name传递给apt_cache[],我得到的错误是package没有
#存在。。。
def检查包装状态(包装):
versions=package.VersionList
版本=版本[0]
对于版本中的其他_版本:

如果apt_pkg.VersionCompare(version.VerStr,other_version.VerStr)以下脚本基于您的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

以下脚本基于您的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

看到这个并签出python apt文档我一直在研究文档,不久前我确实看到了这个链接,我对此发表了评论(AttributeError:“Package”对象没有属性“isUpgradeable”…–Dayan Jan 3,20:55),但是谢谢。看到这个并签出python apt文档我一直在研究文档,不久前我确实查看了这个链接,我对它发表了评论(AttributeError:“Package”对象没有“isUpgradeable”属性…-Dayan 1月3日20:55),但谢谢。这让我感到很惊讶,我得到了195个可用更新的列表,但当我运行updater时,它显示201???@Dayan可能是某些升级版的pkgs有了新的依赖项,因此需要安装更多的pkgs。试着比较一下这两个列表,看看缺少的六项是什么这让我很惊讶,我得到了一个195个可用更新的列表,但当我运行updater时,它向我显示201???@Dayan它可能是一些升级版本的pkgs有了新的依赖项,从而带来了更多的pkgs来安装。试着比较这两个列表,看看缺少的六个列表中有什么