检查是否已安装软件包

时间:2010-08-02 12:58:36

标签: python debian

是否有一种优雅且更像Python的方法来检查Debian上是否安装了软件包?

在bash脚本中,我会这样做:

dpkg -s packagename | grep Status

建议在Python脚本中执行相同的操作吗?

谢谢,

8 个答案:

答案 0 :(得分:16)

这是一种pythonic方式:

import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
    print "YES it's installed"
else:
    print "NO it's NOT installed"

答案 1 :(得分:3)

如果要检查是否存在安装Python模块的软件包,可以在依赖的Python脚本中对此进行测试 - 尝试导入它并查看是否出现异常:

import sys
try:
    import maybe
except ImportError:
    print "Sorry, must install the maybe package to run this program."
    sys.exit(1)

答案 2 :(得分:2)

一个稍微好一点,希望是你的bash示例的惯用版本:

import os, subprocess
devnull = open(os.devnull,"w")
retval = subprocess.call(["dpkg","-s","coreutils"],stdout=devnull,stderr=subprocess.STDOUT)
devnull.close()
if retval != 0:
    print "Package coreutils not installed."

答案 3 :(得分:2)

这是一些代码,可以让您以一种简洁的方式显示是否已安装软件包(不会在屏幕上触发混乱的错误消息)。但这仅适用于Python 3。

import apt
cache = apt.Cache()
cache.open()

response = "Package Installed."
try:
    cache['notapkg'].is_installed
except KeyError:
    response = "Package Not Installed."

print(response)

答案 4 :(得分:1)

看看commands。它对于在命令行上运行并获取状态非常有用。

否则,我确信有一些库可以让你与apt交互。 python-apt可能会有效,但它有点原始。只是捕获命令行似乎更容易。

答案 5 :(得分:0)

我需要一个跨平台兼容的解决方案,因此我最终使用which

import subprocess
retval = subprocess.call(["which", "packagename"])
if retval != 0:
    print("Packagename not installed!")

虽然它不像上述答案那样具有pythonic,但它确实可以在大多数平台上运行。

答案 6 :(得分:0)

受先前答案的启发,这对Python 2和Python 3都很好,并且避免了尝试/捕获关键错误的情况:

=ARRAYFORMULA(IF(IFERROR(IF(IFERROR(REGEXEXTRACT(A1:A, "\d+")), , "♦"))<>"", 1))

答案 7 :(得分:0)

我也有同样的疑问。搜索了互联网的每个角落,但没有找到。 但最后经过一些实验我做到了!!

  • 代码:
  1. import os
  2. packagename = "figlet" # Type in your package name
  3. os.system("dpkg -s "+packagename" | grep Status")

使用 python 代码输入任何终端:

  • 代码:
  1. import os
  2. os.system("YOUR TERMINAL COMMAND HERE")