2013-07-08 883 views
12

kullanarak bir paketi yüklemek için. Bununla birlikte, diğer şeylerin yanı sıra bazı Linux paketlerini yükleyen bir betik yapmaya çalışıyorum. İlk önce here açıklandığı gibi subopen kullanmayı denedim. Bu işe, sonunda mümkün olmakla birlikte, ben python-apt API tökezledi ve ben büyük bir hayranıyım veya tekerleği yeniden icat değilim çünkü ben denemeye karar verdi. piton-apt kullanarak bir paket yükleme hakkında örnekler/öğreticiler bulunmaya çalışılırkennasıl :) böylece ben önceden foregiveness yalvarıyorum, bu Python gelince oldukça acemi olduğum piton-apt API

Sorun geliyor. Dokümantasyonun aranması Bir paketin kurulması için bazı yöntemlerin kullanıldığı PackageManager sınıfını buldum. Ben bu çalışma almak için bazı basit kod çalıştı: Bu kolayca bu işe görünmüyor

apt_pkg.PackageManager.install("python") 

yüklemek yöntem yerine düz dizesinin apt_pkg.PackageManager bekliyor. Böylece, biraz daha fazla, I found this example umut verici görünüyor, ama gerçekten orada neler olup bittiğini anlamak için biraz isteksiz değilim.

Sonra herkes piton-apt kullanarak bir paket yüklemeye çalıştı yoksa düz eski subopen stilini kullanmak için gitmeli?

Teşekkürler!

cevap

29

O python-apt Debian paketinden apt modülü kullanmak önerilir. Bu, altta yatan C/C++ libapt-xxx kitaplıklarının etrafında daha yüksek düzeyli bir sarıcıdır ve bir Pythonic arabirimine sahiptir.

İşte libjs-yui-doc paketini kuracak bir betik örneği: apt-get kullanımıyla olduğu gibi

#!/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)) 

, bu erişebilir ve APT önbelleği değiştirmek için superuser hakları ile çalıştırılmalıdır.

$ sudo ./aptinstall.py 

bir paket daha büyük bir senaryonun parçası olarak yüklemeye çalışıyorsanız, muhtemelen sadece gerekli minimum zaman için kök ayrıcalıkları yükseltmek için iyi bir fikirdir.

Bir GTK ön uç kullanarak bir paketin nasıl yükleneceğini gösteren /usr/share/pyshared/apt/progress/gtk2.py:_test() işlevinde küçük bir örnek bulabilirsiniz.

+0

Bu benim aradığım tam olarak ne! Teşekkürler Austin, sen bir yıldızsın: D – AlejandroVK

+2

Yeni önbellek kullanmak için muhtemelen 'cache.open() 'cache.update()' den sonra aramak istersiniz. Aksi halde, garip hatalara yol açabilecek eski önbellek kullanılacaktır. – lrsjng

+0

Bir yükleme işleminin ilerlemesini yakalamanın herhangi bir yolu, daha sonra bitirdikten sonra başka bir şey yapmak? – answerSeeker

İlgili konular