是否有一種優雅且更像Python的方式來檢查軟件包是否安裝在Debian上?檢查是否安裝了軟件包
在bash腳本,我會做:
dpkg -s packagename | grep Status
建議做一個Python腳本一樣嗎?
感謝,
是否有一種優雅且更像Python的方式來檢查軟件包是否安裝在Debian上?檢查是否安裝了軟件包
在bash腳本,我會做:
dpkg -s packagename | grep Status
建議做一個Python腳本一樣嗎?
感謝,
看一看commands
。這對於在命令行上運行並獲取狀態非常有用。
否則,我確定有一些庫可以讓你與apt進行交互。 python-apt可能工作,但它有點生。只是捕獲命令行似乎更容易。
如果你檢查它安裝一個Python模塊,你可以從相關的Python腳本中測試了這個包的存在 - 嘗試導入它,看看你得到一個異常:
import sys
try:
import maybe
except ImportError:
print "Sorry, must install the maybe package to run this program."
sys.exit(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."
這是一個Python的方式:
import apt
cache = apt.Cache()
if cache['package-name'].is_installed:
print "YES it's installed"
else:
print "NO it's NOT installed"
好答案 – jsj 2014-07-09 23:46:35
在沒有安裝軟件包的情況下,您會得到一個關鍵錯誤。還有另外一種方法可以解決這個問題,如果找不到軟件包,可以提供更整潔的輸出。我將把它作爲OP的評論發佈。 – 2017-08-14 14:38:48
我需要一個跨平臺兼容的解決方案,所以我最終使用which。
import subprocess
retval = subprocess.call(["which", "packagename"])
if retval != 0:
print("Packagename not installed!")
雖然它不像上述答案那樣pythonic它在大多數平臺上都能正常工作。
這是一些代碼,如果軟件包已安裝或沒有安裝(在屏幕上觸發亂糟糟的錯誤消息),它將爲您提供一種簡潔的顯示方式。不過,這僅適用於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)
這些不是OP正在尋找的軟件包。 Python軟件包和Debian軟件包管理器的軟件包(很大程度上)是不同的。見:http://en.wikipedia.org/wiki/Dpkg – Oli 2010-08-02 17:03:06
那麼,OP確實詢問是否有從Python腳本內部的方式,所以我不認爲這是一個飛躍,認爲他正在尋找用於檢測Python模塊依賴關係的方法。儘管如此,我希望我的答案更合適。 – PaulMcG 2010-08-02 17:16:06
谷歌送我到這裏尋找這個答案,所以很感激。 – noah 2014-02-07 22:57:36