Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to install a package using the python-apt API

Tags:

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. While this can eventually work, I stumbled upon the python-apt API 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 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 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!

like image 392
AlejandroVK Avatar asked Jul 08 '13 23:07

AlejandroVK


People also ask

How do I install a package from a Python project?

To install a package that includes a setup.py file, open a command or terminal window and: cd into the root directory where setup.py is located. Enter: python setup.py install.

What is Python apt package?

Python APT's library provides access to almost every functionality supported by the underlying apt-pkg and apt-inst libraries. This means that it is possible to rewrite frontend programs like apt-cdrom in Python, and this is relatively easy, as can be seen in e.g. Writing your own apt-cdrom.

What is the command to install package in Python?

The pip command has options for installing, upgrading and deleting packages, and can be run from the Windows command line. By default, pip installs packages located in the Python Package Index (PyPI), but can also install from other indexes.


1 Answers

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() cache.open()  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.

like image 60
Austin Phillips Avatar answered Oct 23 '22 07:10

Austin Phillips