How to install a package using the python-apt API
Question: I'm quite a newbie when it comes to Python, thus I beg foregiveness beforehand
:). That said, I'm trying to make a script that, among other things, installs
some Linux packages. First I tried to use subopen as explained
[here](http://stackoverflow.com/questions/8481943/using-apt-get-install-xxx-
inside-python-script). While this can eventually work, I stumbled upon the
[python-apt API](http://apt.alioth.debian.org/python-apt-doc/) and since I'm
not a big fan or re-inventing the wheel, I decided to give a try.

Problem comes when trying to find examples/tutorials on installing a package
using python-apt. Searching the documentation I found the
[PackageManager](http://apt.alioth.debian.org/python-apt-
doc/library/apt_pkg.html#apt_pkg.PackageManager) class that has some methods
to install a package. I tried some simple code to get this working:

    
    
    apt_pkg.PackageManager.install("python")
    

This does not seem to work that easily, the install method expects
apt_pkg.PackageManager instead of a plain String. Thus, looking a bit more, [I
found this example](http://mancoosi.org/~abate/aptget-installation-plan) that
looks promising, but I'm a bit reluctant to use since I don't really
understand some of what is happening there.

Then, has anyone tried to install a package using python-apt or should I go
for using plain-old subopen style?

Thanks!


Answer: It's recommended to use the `apt` module from the `python-apt` Debian package.
This is a higher level wrapper around the underlying C/C++ `libapt-xxx`
libraries and has a Pythonic interface.

Here's an example script which will install the `libjs-yui-doc` package:

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

As with the use of `apt-get`, this must be run with superuser privileges to
access and modify the APT cache.

    
    
    $ sudo ./aptinstall.py
    

If you're attempting a package install as part of a larger script, it's
probably a good idea to only raise to root privileges for the minimal time
required.

You can find a small example in the
`/usr/share/pyshared/apt/progress/gtk2.py:_test()` function showing how to
install a package using a GTK front-end.

