2010-08-02 666 views
13

是否有一種優雅且更像Python的方式來檢查軟件包是否安裝在Debian上?檢查是否安裝了軟件包

在bash腳本,我會做:

dpkg -s packagename | grep Status 

建議做一個Python腳本一樣嗎?

感謝,

回答

1

看一看commands。這對於在命令行上運行並獲取狀態非常有用。

否則,我確定有一些庫可以讓你與apt進行交互。 python-apt可能工作,但它有點生。只是捕獲命令行似乎更容易。

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

這些不是OP正在尋找的軟件包。 Python軟件包和Debian軟件包管理器的軟件包(很大程度上)是不同的。見:http://en.wikipedia.org/wiki/Dpkg – Oli 2010-08-02 17:03:06

+0

那麼,OP確實詢問是否有從Python腳本內部的方式,所以我不認爲這是一個飛躍,認爲他正在尋找用於檢測Python模塊依賴關係的方法。儘管如此,我希望我的答案更合適。 – PaulMcG 2010-08-02 17:16:06

+2

谷歌送我到這裏尋找這個答案,所以很感激。 – noah 2014-02-07 22:57:36

1

稍微更好,你的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." 
12

這是一個Python的方式:

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

好答案 – jsj 2014-07-09 23:46:35

+0

在沒有安裝軟件包的情況下,您會得到一個關鍵錯誤。還有另外一種方法可以解決這個問題,如果找不到軟件包,可以提供更整潔的輸出。我將把它作爲OP的評論發佈。 – 2017-08-14 14:38:48

0

我需要一個跨平臺兼容的解決方案,所以我最終使用which

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

雖然它不像上述答案那樣pythonic它在大多數平臺上都能正常工作。

0

這是一些代碼,如果軟件包已安裝或沒有安裝(在屏幕上觸發亂糟糟的錯誤消息),它將爲您提供一種簡潔的顯示方式。不過,這僅適用於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)