2013-07-08 38 views
12

Tôi khá là một newbie khi nói đến Python, do đó tôi xin lỗi trước :). Điều đó nói rằng, tôi đang cố gắng tạo một kịch bản, trong số những thứ khác, cài đặt một số gói Linux. Trước tiên, tôi đã cố gắng sử dụng subopen như được giải thích here. Trong khi điều này cuối cùng có thể làm việc, tôi stumbled khi python-apt API và kể từ khi tôi không phải là một fan hâm mộ lớn hoặc tái phát minh ra bánh xe, tôi quyết định thử.Làm thế nào để cài đặt một gói bằng cách sử dụng python-apt API

Sự cố xảy ra khi cố gắng tìm các ví dụ/hướng dẫn về cách cài đặt gói bằng python-apt. Tìm kiếm tài liệu tôi tìm thấy lớp PackageManager có một số phương pháp để cài đặt một gói. Tôi đã thử một số mã đơn giản để làm việc này:

apt_pkg.PackageManager.install("python") 

này dường như không làm việc đó một cách dễ dàng, phương pháp cài đặt hy vọng apt_pkg.PackageManager thay vì một chuỗi đồng bằng. Vì vậy, tìm kiếm nhiều hơn một chút, I found this example có vẻ đầy hứa hẹn, nhưng tôi hơi miễn cưỡng khi sử dụng vì tôi thực sự không hiểu một số điều đang xảy ra ở đó.

Sau đó, có ai cố gắng cài đặt gói sử dụng python-apt hay tôi nên sử dụng kiểu phụ nhỏ đồng bằng không?

Cảm ơn!

Trả lời

29

Bạn nên sử dụng mô-đun apt từ gói Debian python-apt. Đây là trình bao bọc cấp cao hơn xung quanh các thư viện C/C++ libapt-xxx cơ bản và có giao diện Pythonic.

Dưới đây là một kịch bản ví dụ mà sẽ cài đặt gói 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)) 

Như với việc sử dụng các apt-get, điều này phải được chạy với quyền superuser để truy cập và sửa đổi các bộ nhớ cache APT.

$ sudo ./aptinstall.py 

Nếu bạn đang cố gắng cài đặt gói như một phần của tập lệnh lớn hơn, có thể là chỉ nên nâng cao đặc quyền gốc trong thời gian tối thiểu bắt buộc.

Bạn có thể tìm thấy một ví dụ nhỏ trong hàm /usr/share/pyshared/apt/progress/gtk2.py:_test() cho biết cách cài đặt gói bằng giao diện người dùng GTK.

+0

Đây chính xác là những gì tôi đang tìm kiếm! Cảm ơn Austin, bạn là một ngôi sao: D – AlejandroVK

+2

Bạn có thể muốn gọi 'cache.open()' sau 'cache.update()', để sử dụng bộ nhớ cache mới. Nếu không, bộ nhớ cache cũ sẽ được sử dụng có thể dẫn đến các lỗi lạ. – lrsjng

+0

Bất kỳ cách nào để nắm bắt tiến trình cài đặt, sau đó thực hiện điều gì đó khác sau khi kết thúc? – answerSeeker

Các vấn đề liên quan