Differences between revisions 2 and 3
Revision 2 as of 2008-09-25 16:18:48
Size: 3379
Editor: www
Comment: Add references
Revision 3 as of 2008-11-15 14:00:53
Size: 3379
Editor: localhost
Comment: converted to 1.6 markup
No differences found!

Rationale

The ability to uninstall packages installed by the install command is a long-time waited feature for distutils/setuptools. This document describe the design and features of such a facility.

An uninstall feature should be implemented for both distutils and setuptools: the setuptools uninstall command would then reuse the distutils one.

What should be the behavior of an uninstall command ?

  • pure distutils (wo setuptools): only remove files installed by the install command from the same source tree.
  • setuptools: should be able to remove eggs, deal with .pth.
  • easy_install: may remove the dependencies (ala apt-get autoremove).

distutils command

Problems to solve:

  • how to record the files installed
  • where to put the generated list of files
  • how to decide which package location to remove

Possible solutions:

How to record the files installed

use the same facility as install --record to record the list of files to remove

Where to put the generated list

The list itself should be put in .egg-info (since it is built by both distutils and setuptools install command). The problem is how to get access to this list when several packages are installed (e.g. different site-packages, user vs system package, etc...). Several possible solutions:

  • uninstall would take a record option, using the file generated by install --record. Can be a first step.
  • put the location of the record in the build directory: hosed when the build directory is removed. But easy to get previously-installed location
  • In the source tree itself ? Invasive. Easy to get last-installed location.

Removing last installed version is a useful feature for people who follow some projects from svn, and get caught when some modules are renamed inside the package.

Maybe another useful features:

  • python setup.py uninstall --prefix=path -> should remove the package installed with python setup.py install --prefix=path

  • should be possible to avoid generating the record file (for OS distributors ?), although I am not sure whether this is useful. The rationale would be to avoid removing a system-wide package by accident. On OS with proper user protection, it won't be possible to do anything, and on windows, it is no worse than removing by rd-like commands, and requires the same effort.

setuptools command

  • should deal with eggs, versions ?
  • ability to remove a specified version

easy_install command

  • based on setuptools uninstall

Central management for packages

A nice solution may be for python to have a centralized system to record installed packages. But how to deal with user python vs system python ? Putting some info into $HOME or equivalent cannot accomodate multiple python interpreters installed by users; putting them into a location 'owned' by the python interpreter is not usable when the python is system wide. More than likely to be hard to agree on implementation.

References

See:

Distutils/Proposals/UninstallCommand (last edited 2009-01-31 16:17:11 by 61)

Unable to edit the page? See the FrontPage for instructions.