2

I'm was trying this on Linux mint. I have been researching on how to remove packages using the python-apt API. The piece of code below was all I could come up with but nothing happens when I run it. I am trying to remove a single package right now but later I would like to remove a list of packages from a text file. I tried to use the answer found in this post and re-engineered it for removing but my logic does not work. Please give me some input.

#!/usr/bin/env python
# aptuninnstall.py

import apt
import sys


def remove():
    pkg_name = "chromium-browser"
    cache = apt.cache.Cache()
    cache.update()
    pkg = cache[pkg_name]
    pkg.marked_delete
    resolver = apt.cache.ProblemResolver(cache)
    for pkg in cache.get_changes():
        if pkg.is_installed:
            resolver.remove(pkg)
        else:
            print (pkg_name + " not installed so not removed")
    try:
        cache.commit()
    except Exception, arg:
        print >> sys.stderr, "Sorry, package removal failed [{err}]".format(err=str(arg))

remove()

1 Answer 1

1

After reading the docs and trying different things, I more or less fixed my problem by coming up with the code below. If someone has a better way, please post. I still want to learn a lot

#!/usr/bin/env python
# aptremove.py

import apt
import apt_pkg
import sys


def remove():
    pkg_name = "chromium-browser"
    cache = apt.cache.Cache()
    cache.open(None)
    pkg = cache[pkg_name]
    cache.update()
    pkg.mark_delete(True, purge=True)
    resolver = apt.cache.ProblemResolver(cache)

    if pkg.is_installed is False:
        print (pkg_name + " not installed so not removed")
    else:
        for pkg in cache.get_changes():
            if pkg.mark_delete:
                print pkg_name + " is installed and will be removed"
                print " %d package(s) will be removed" % cache.delete_count
                resolver.remove(pkg)
    try:
        cache.commit()
        cache.close()
    except Exception, arg:
        print >> sys.stderr, "Sorry, package removal failed [{err}]".format(err=str(arg))

remove()

In order to get the package list from a file, I took this approach for now.

#!/usr/bin/env python
# aptremove.py

import apt
import apt_pkg
import sys


def remove():
    cache = apt.cache.Cache()
    cache.open(None)
    resolver = apt.cache.ProblemResolver(cache)

    with open("apps-to-remove") as input:
        for pkg_name in input:
            pkg = cache[pkg_name.strip()]
            pkg.mark_delete(True, purge=True)
        input.close()
        cache.update()

    if pkg.is_installed is False:
        print (pkg_name + " not installed so not removed")
    else:
        for pkg in cache.get_changes():
            if pkg.mark_delete:
                print pkg_name + " is installed and will be removed"
                print " %d package(s) will be removed" % cache.delete_count
                resolver.remove(pkg)
    try:
        cache.commit()
        cache.close()
        print "starting"
    except Exception, arg:
        print >> sys.stderr, "Sorry, package removal failed [{err}]".format(err=str(arg))

remove()
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.