2013-07-08 63 views
12

當談到Python時,我是一個新手,因此我事先要求寬恕:)。也就是說,我正在嘗試製作一個腳本,其中包含一些Linux軟件包。首先,我試圖使用subopen,如解釋here。雖然這最終可能奏效,但我偶然發現了python-apt API,既然我不是一個大粉絲或者重新發明輪子,我決定嘗試一下。如何使用python-apt API安裝軟件包

試圖找到關於使用python-apt安裝包的示例/教程時出現問題。搜索文檔我發現有一些方法來安裝包的PackageManager類。我嘗試了一些簡單的代碼來得到這個工作:

apt_pkg.PackageManager.install("python") 

這似乎並沒有工作,很容易,安裝方法需要apt_pkg.PackageManager,而不是一個簡單的字符串。因此,看起來多一點,I found this example看起來很有希望,但我有點不願意使用,因爲我不真正瞭解那裏發生的一些事情。

然後,有人試圖用python-apt安裝一個軟件包,還是應該使用普通的subopen樣式?

謝謝!

回答

29

建議使用python-apt Debian軟件包中的apt模塊。這是底層C/C++ libapt-xxx庫的更高級別的包裝,並且有一個Pythonic接口。

下面是一個例子腳本將安裝libjs-yui-doc包:

#!/usr/bin/env python 
# aptinstall.py 

import apt 
import sys 

pkg_name = "libjs-yui-doc" 

cache = apt.cache.Cache() 
cache.update() 

pkg = cache[pkg_name] 
if pkg.is_installed: 
    print "{pkg_name} already installed".format(pkg_name=pkg_name) 
else: 
    pkg.mark_install() 

    try: 
     cache.commit() 
    except Exception, arg: 
     print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg)) 

與使用apt-get,這必須以超級用戶權限運行,以訪問和修改APT緩存。

$ sudo ./aptinstall.py 

如果你正在嘗試一個軟件包安裝爲一個更大的腳本的一部分,它可能是一個好主意,只籌集到root權限所需的最小時間。

您可以在/usr/share/pyshared/apt/progress/gtk2.py:_test()函數中找到一個小示例,其中顯示瞭如何使用GTK前端安裝包。

+0

這正是我所期待的!謝謝奧斯汀,你是一位明星:D – AlejandroVK

+2

你可能想要在'cache.update()'後面調用'cache.open()',以便利用新的緩存。否則,將使用舊的緩存,這可能導致奇怪的錯誤。 – lrsjng

+0

任何方式來捕捉安裝的進度,然後做一些事情,一旦完成? – answerSeeker