[Python-checkins] r75414 - peps/trunk/pep-0376.txt
tarek.ziade
python-checkins at python.org
Wed Oct 14 20:39:18 CEST 2009
Author: tarek.ziade
Date: Wed Oct 14 20:39:17 2009
New Revision: 75414
Log:
applying Carl's changes
Modified:
peps/trunk/pep-0376.txt
Modified: peps/trunk/pep-0376.txt
==============================================================================
--- peps/trunk/pep-0376.txt (original)
+++ peps/trunk/pep-0376.txt Wed Oct 14 20:39:17 2009
@@ -30,7 +30,7 @@
The arguments passed to that function describe the distribution, like
its `name`, its `version`, and so on.
-Disutils provides, among other things, **commands** that can be called
+Distutils provides, among other things, **commands** that can be called
through the shell using the `setup.py` script. An `sdist` command is provided
for instance to create a source distribution archive. An `install` command
is also provided to perform an installation of the distribution in the Python
@@ -169,14 +169,12 @@
This `.egg-info` directory contains a `PKG-INFO` file built by the
`write_pkg_file` method of the `Distribution` class in Distutils.
-This change is not impacting Python itself because the metadata files are not
+This change does not impact Python itself because the metadata files are not
used anywhere yet in the standard library besides Distutils.
-However, it is impacting the `setuptools` and `pip` projects, but given
-the fact that they already work with a directory that contains a `PKG-INFO`
-file, the change will have no deep consequences. That said, packages installed
-other existing pre-standardisation formats are ignored by the new
-system, as explained in the backward compatibility section of this document.
+It does impact the `setuptools` and `pip` projects, but given the fact that
+they already work with a directory that contains a `PKG-INFO` file, the change
+will have no deep consequences.
Let's take an example of the new format with the `docutils` distribution.
The elements installed in `site-packages` are::
@@ -318,6 +316,33 @@
`.egg-info` directory with this value, to keep track of **who** installed the
distribution. The file is a single-line text file.
+Adding a REQUESTED file in the .egg-info directory
+==================================================
+
+Some install tools automatically detect unfulfilled dependencies and
+install them. In these cases, it is useful to track which
+distributions were installed purely as a dependency, so if their
+dependent distribution is later uninstalled, the user can be alerted
+to the orphaned dependency.
+
+If a distribution is installed by direct user request (the usual
+case), a file REQUESTED is added to the .egg-info directory of the
+installed distribution. The REQUESTED file may be empty, or may
+contain a marker comment line beginning with the "#" character.
+
+If an install tool installs a distribution automatically, as a
+dependency of another distribution, the REQUESTED file should not be
+created.
+
+The ``install`` command of distutils by default creates the REQUESTED
+file. It accepts --requested and --no-requested options to explicitly
+specify whether the file is created.
+
+If a package that was already installed on the system as a dependency
+is later installed by name, the distutils ``install`` command will
+create the REQUESTED file in the .egg-info directory of the existing
+installation.
+
New APIs in pkgutil
===================
@@ -368,6 +393,10 @@
- ``metadata``: A ``DistributionMetadata`` instance loaded with the
distribution's PKG-INFO file.
+- ``requested``: A boolean that indicates whether the REQUESTED
+ metadata file is present (in other words, whether the package was
+ installed by user request).
+
And following methods:
- ``get_installed_files(local=False)`` -> iterator of (path, md5, size)
@@ -445,6 +474,9 @@
>>> dist.get_egginfo_file('PKG-INFO')
<open file at ...>
+ >>> dist.requested
+ True
+
PEP 262 replacement
===================
@@ -550,17 +582,24 @@
another distribution. Although it makes sure that all the files it removes
are not used by any other distribution, by using the uninstall function.
+Also note that this uninstall script pays no attention to the
+REQUESTED metadata; that is provided only for use by external tools to
+provide more advanced dependency management.
Backward compatibility and roadmap
==================================
-These changes doesn't introduce any compatibility problems with the previous
+These changes don't introduce any compatibility problems with the previous
version of Distutils, and will also work with existing third-party tools.
-Although, a backport of the new Distutils for 2.5, 2.6, 3.0 and 3.1 is
-provided so people can benefit from these new features.
-
-The plan is to integrate them for Python 2.7 and Python 3.2
+The plan is to include the functionality outlined in this PEP in distutils for
+Python 2.7 and Python 3.2. A backport of the new distutils for 2.5, 2.6, 3.0
+and 3.1 is provided so people can benefit from these new features.
+
+Distributions installed using existing, pre-standardization formats do not have
+the necessary metadata available for the new API, and thus will be
+ignored. Third-party tools may of course to continue to support previous
+formats in addition to the new format, in order to ease the transition.
References
@@ -602,8 +641,8 @@
.. [#prototype]
http://bitbucket.org/tarek/pep376/
-Aknowledgments
-==============
+Acknowledgements
+================
Jim Fulton, Ian Bicking, Phillip Eby, and many people at Pycon and Distutils-SIG.
More information about the Python-checkins
mailing list