Title: Distutils should provide an uninstall command
Type: enhancement Stage: resolved
Components: Distutils2 Versions: Python 3.3
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: tarek Nosy List: a.badger, alexis, andybuckley, eric.araujo, giampaolo.rodola, philobyte, tarek
Priority: normal Keywords: gsoc

Created on 2008-12-15 22:28 by andybuckley, last changed 2011-07-04 14:35 by eric.araujo. This issue is now closed.

Messages (10)
msg77885 - (view) Author: Andy Buckley (andybuckley) Date: 2008-12-15 22:28
It would make package maintenance easier, as well as integration with
other build systems e.g. autotools (necessary for projects where not
everything is Python), if the distutils supported an uninstallation
command, e.g.

python uninstall

This would presumably require monitoring of which files were installed
where, and it's of course possible to do undesirable things, but exactly
the same counter-arguments exist for autotools, and there the uninstall
target is an important and useful feature for developers, once you know
how to behave in a way to make it safe.
msg78488 - (view) Author: Tarek Ziadé (tarek) * (Python committer) Date: 2008-12-29 21:50
This would require a detailed description on how such a feature would work.
msg80601 - (view) Author: philobyte (philobyte) Date: 2009-01-27 00:24
python uninstall 
should do all the same processing as 'install' but whenever it gets to
the point of copying a file to a system destination, it should instead
unlink the destination.

besides the obvious use, here is another one:
   when upgrading a package, and the new version no longer includes
certain files, just installing the new version will leave leftovers
of the previous version installed.  using uninstall beforehand will
clean out the cruft.
msg80633 - (view) Author: Tarek Ziadé (tarek) * (Python committer) Date: 2009-01-27 07:53
philobyte, this means you have to keep the source somewhere to be able
to run uninstall. This is not handy imho.

What about a uninstall registery in Python that keeps track of the files
installed for each package ? this would let us have an uninstall command
that could run on its own.

"uninstall packagename"
msg80647 - (view) Author: Andy Buckley (andybuckley) Date: 2009-01-27 11:25
If an uninstall registry is feasible, the it could be neat. The
suggested behaviour of unlinking known files based on the source
directory is not all that inconvenient: it's by no means perfect, but it
has its uses and is familiar to many, since it is how GNU autotools behaves.
msg80801 - (view) Author: Tarek Ziadé (tarek) * (Python committer) Date: 2009-01-30 00:39
I will continue to discuss this in distutils-SIG:

Marc-André Lemburg proposed me to introduce the uninstall command from (from mxBase,

So I need to ask for opinions first
msg99870 - (view) Author: Toshio Kuratomi (a.badger) * Date: 2010-02-22 23:23
We're working on this as part of the distutils2 effort.  Current distutils (version 1) will not support uninstall.
msg99873 - (view) Author: Toshio Kuratomi (a.badger) * Date: 2010-02-22 23:28
Targetting 3.3
msg115781 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2010-09-07 15:44
Status update: Josip implemented PEP 376 to provide the installation database and Alexis is working on distutils2.install_tools to provide an uninstall function. User-level tools like pip can reuse this code to provide an uninstall functionality.
msg139773 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011-07-04 14:35
distutils2/packaging now provides a remove function and a pysetup remove command.
Date User Action Args
2011-07-04 14:35:14eric.araujosetstatus: open -> closed
versions: + Python 3.3, - 3rd party
messages: + msg139773

dependencies: - packaging: add tests for old versions cleanup on update
resolution: fixed
stage: resolved
2010-10-22 14:55:51eric.araujosetdependencies: + packaging: add tests for old versions cleanup on update
2010-09-29 23:54:10eric.araujosetversions: + 3rd party, - Python 2.6, Python 2.5, Python 3.1, Python 2.7, Python 3.2
2010-09-07 15:44:42eric.araujosetnosy: + eric.araujo, alexis
messages: + msg115781
2010-06-03 14:47:24eric.araujosetkeywords: + gsoc
nosy: giampaolo.rodola, tarek, a.badger, andybuckley, philobyte
components: + Distutils2, - Distutils
versions: + Python 2.6, Python 2.5, Python 3.1, Python 2.7, Python 3.2, - Python 3.3
2010-02-22 23:28:43a.badgersetmessages: + msg99873
versions: + Python 3.3, - Python 2.6
2010-02-22 23:23:55a.badgersetnosy: + a.badger

messages: + msg99870
versions: + Python 2.6, - Python 2.5
2009-01-30 20:39:09giampaolo.rodolasetnosy: + giampaolo.rodola
2009-01-30 00:39:52tareksetassignee: tarek
messages: + msg80801
2009-01-27 11:25:11andybuckleysetmessages: + msg80647
2009-01-27 07:53:23tareksetmessages: + msg80633
2009-01-27 00:24:39philobytesetnosy: + philobyte
messages: + msg80601
2008-12-29 21:50:55tareksetnosy: + tarek
messages: + msg78488
2008-12-15 22:28:53andybuckleycreate