2013-07-08 3 views
12

저는 파이썬에 관해서는 꽤 초보자입니다. 따라서 나는 미리 용서를 구합니다. :) 즉, 다른 것들 중 일부 리눅스 패키지를 설치하는 스크립트를 만들려고합니다. 먼저 here과 같이 subopen을 사용하려고했습니다. 이것이 결국 작동 할 수는 있지만, 나는 python-apt API을 우연히 만났고, 나는 큰 팬이 아니거나 바퀴를 다시 발명 한 것이 아니기 때문에 시도를하기로 결정했습니다.python-apt API를 사용하여 패키지를 설치하는 방법

python-apt를 사용하여 패키지를 설치하는 예제/튜토리얼을 찾으려고 할 때 문제가 발생합니다. 문서 검색 패키지를 설치하는 몇 가지 방법이있는 PackageManager 클래스를 찾았습니다. 나는이 작업 얻기 위해 몇 가지 간단한 코드를 시도 :이 쉽게 그 일을하지 않는 것

apt_pkg.PackageManager.install("python") 

를 설치하는 방법 대신에 일반 문자열의 apt_pkg.PackageManager는 기대하고있다. 따라서 조금 더 살펴보면, I found this example이 유망 해 보입니다.하지만 실제로 어떤 일이 일어나고 있는지 이해할 수 없기 때문에 사용하기를 꺼려합니다.

그런 다음 누군가 python-apt를 사용하여 패키지를 설치하려고 했습니까? 아니면 일반 old subopen 스타일을 사용해야합니까?

감사합니다.

답변

29

python-apt 데비안 패키지의 apt 모듈을 사용하는 것이 좋습니다. 이것은 기본 C/C++ libapt-xxx 라이브러리를 둘러싼 상위 래퍼이며 파이톤 (Pythonic) 인터페이스를 가지고 있습니다.

가 여기에 libjs-yui-doc 패키지를 설치합니다 예제 스크립트입니다 : apt-get의 사용과 마찬가지로

#!/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 캐시를 수정하려면 수퍼 유저 권한으로 실행해야합니다.

$ sudo ./aptinstall.py 

당신이 패키지는 더 큰 스크립트의 일부로 설치하려고하는 경우, 그것은 아마 단지 필요한 최소한의 시간을 루트 권한으로 인상하는 것이 좋습니다.

GTK 프런트 엔드를 사용하여 패키지를 설치하는 방법을 보여주는 /usr/share/pyshared/apt/progress/gtk2.py:_test() 함수의 작은 예제를 찾을 수 있습니다.

+0

이것은 내가 찾고있는 것입니다. 감사합니다 Austin, 당신은 스타 야. D – AlejandroVK

+2

새 캐시를 활용하려면'cache.update()'다음에'cache.open()'을 호출하고 싶을 것입니다. 그렇지 않으면 이전 캐시가 사용되어 이상한 버그가 발생할 수 있습니다. – lrsjng

+0

설치가 진행되는 동안 잡을 수있는 방법은 무엇입니까? – answerSeeker