added the installer marker + more details from feedback

This commit is contained in:
Tarek Ziadé 2009-06-05 08:35:30 +00:00
parent be912df710
commit dc83f26408
1 changed files with 53 additions and 2 deletions

View File

@ -174,8 +174,15 @@ Adding a RECORD file in the .egg-info directory
A `RECORD` file will be added inside the `.egg-info` directory at installation A `RECORD` file will be added inside the `.egg-info` directory at installation
time. The `RECORD` file will hold the list of installed files. These correspond time. The `RECORD` file will hold the list of installed files. These correspond
to the files listed by the `record` option of the `install` command, and will to the files listed by the `record` option of the `install` command, and will
always be generated. This will allow uninstallation, as explained later in this be generated by default. This will allow uninstallation, as explained later in this
PEP. This RECORD file is inspired from PEP 262 FILES [#pep262]_. PEP. The `install` command will also provide an option to prevent the `RECORD`
file from being written and this option should be used when creating system
packages.
Third-party installation tools also should not overwrite or delete files
that are not in a RECORD file without prompting or warning.
This RECORD file is inspired from PEP 262 FILES [#pep262]_.
The RECORD format The RECORD format
----------------- -----------------
@ -227,6 +234,21 @@ Notice that:
- `zlib` and `zlib-2.5.2.egg-info` are located in `site-packages` so the file - `zlib` and `zlib-2.5.2.egg-info` are located in `site-packages` so the file
paths are relative to it. paths are relative to it.
Adding an INSTALLER file in the .egg-info directory
===================================================
The `install` command will have a new option called `installer`. This option
is the name of the tool used to invoke the installation. It's an normalized
lower-case string matching `[a-z0-9_\-\.]`.
$ python setup.py install --installer=pkg-system
It will default to `distutils` if not provided.
When a project is installed, the INSTALLER file is generated in the
`.egg-info` directory with this value, to keep track of **who** installed the
project. The file is a single-line text file.
New APIs in pkgutil New APIs in pkgutil
=================== ===================
@ -453,6 +475,9 @@ empty directories left behind.
If the project is not found, a ``DistutilsUninstallError`` will be raised. If the project is not found, a ``DistutilsUninstallError`` will be raised.
Filtering
---------
To make it a reference API for third-party projects that wish to control To make it a reference API for third-party projects that wish to control
how `uninstall` works, a second callable argument can be used. It will be how `uninstall` works, a second callable argument can be used. It will be
called for each file that is removed. If the callable returns `True`, the called for each file that is removed. If the callable returns `True`, the
@ -475,6 +500,32 @@ Examples::
Of course, a third-party tool can use ``pkgutil`` APIs to implement Of course, a third-party tool can use ``pkgutil`` APIs to implement
its own uninstall feature. its own uninstall feature.
Installer marker
----------------
As explained earlier in this PEP, the `install` command adds an `INSTALLER`
file in the `.egg-info` directory with the name of the installer.
To avoid removing projects that where installed by another packaging system,
the ``uninstall`` function takes an extra argument ``installer`` which default
to ``distutils``.
When called, ``uninstall`` will control that the ``INSTALLER`` file matches
this argument. If not, it will raise a ``DistutilsUninstallError``::
>>> uninstall('zlib')
Traceback (most recent call last):
...
DistutilsUninstallError: zlib was installed by 'cool-pkg-manager'
>>> uninstall('zlib', installer='cool-pkg-manager')
This allows a third-party application to use the ``uninstall`` function
and make sure it's the only program that can remove a project it has
previously installed. This is useful when a third-party program that relies
on Distutils APIs does extra steps on the system at installation time,
it has to undo at uninstallation time.
Backward compatibility and roadmap Backward compatibility and roadmap
================================== ==================================