## page was renamed from UninstallCommand = 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: * "What is needed by an uninstall command to be useful ?": http://www.mail-archive.com/distutils-sig@python.org/msg05188.html * Patch for uninstall (deal with setuptools/easy_install only): http://bugs.python.org/setuptools/issue21