First version of the PEP.
This commit is contained in:
parent
575b7cd011
commit
9eb77a56dc
|
@ -0,0 +1,97 @@
|
||||||
|
PEP: 0297
|
||||||
|
Title: Support for System Upgrades
|
||||||
|
Version: $Revision$
|
||||||
|
Author: mal@lemburg.com (Marc-André Lemburg)
|
||||||
|
Status: Draft
|
||||||
|
Type: Standards Track
|
||||||
|
Python-Version: 2.3
|
||||||
|
Created: 19-Jul-2001
|
||||||
|
Post-History:
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
|
||||||
|
This PEP proposes strategies to allow the Python standard library
|
||||||
|
to be upgraded in parts without having to reinstall the complete
|
||||||
|
distribution or having to wait for a new patch level release.
|
||||||
|
|
||||||
|
Problem
|
||||||
|
|
||||||
|
Python currently does not allow overriding modules or packages in
|
||||||
|
the standard library per default. Even though this is possible by
|
||||||
|
defining a PYTHONPATH environment variable (the paths defined in
|
||||||
|
this variable are prepended to the Python standard library path),
|
||||||
|
there is no standard way of achieving this without changing the
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
Since Python's standard library is starting to host packages which
|
||||||
|
are also available separately, e.g. the distutils, email and PyXML
|
||||||
|
packages, which can also be installed independently of the Python
|
||||||
|
distribution, it is desireable to have an option to upgrade these
|
||||||
|
packages without having to wait for a new patch level release of
|
||||||
|
the Python interpreter to bring along the changes.
|
||||||
|
|
||||||
|
Proposed Solutions
|
||||||
|
|
||||||
|
This PEP proposes two different but not necessarily conflicting
|
||||||
|
solutions:
|
||||||
|
|
||||||
|
1. Adding a new standard search path to sys.path:
|
||||||
|
$stdlibpath/system-packages just before the $stdlibpath
|
||||||
|
entry. This complements the already existing entry for site
|
||||||
|
add-ons $stdlibpath/site-packages which is appended to the
|
||||||
|
sys.path at interpreter startup time.
|
||||||
|
|
||||||
|
To make use of this new standard location, distutils will need
|
||||||
|
to grow support for installing certain packages in
|
||||||
|
$stdlibpath/system-packages rather than the standard location
|
||||||
|
for third-party packages $stdlibpath/site-packages.
|
||||||
|
|
||||||
|
2. Tweaking distutils to install directly into $stdlibpath for the
|
||||||
|
system upgrades rather than into $stdlibpath/site-packages.
|
||||||
|
|
||||||
|
The first solution has a few advantages over the second:
|
||||||
|
|
||||||
|
* upgrades can be easily identified (just look in
|
||||||
|
$stdlibpath/system-packages)
|
||||||
|
|
||||||
|
* upgrades can be deinstalled without affecting the rest
|
||||||
|
of the interpreter installation
|
||||||
|
|
||||||
|
* modules can be virtually removed from packages; this is
|
||||||
|
due to the way Python imports packages: once it finds the
|
||||||
|
top-level package directory it stay in this directory for
|
||||||
|
all subsequent package submodule imports
|
||||||
|
|
||||||
|
* the approach has an overall much cleaner design than the
|
||||||
|
hackish install on top of an existing installation approach
|
||||||
|
|
||||||
|
The only advantages of the second approach are that the Python
|
||||||
|
interpreter does not have to changed and that it works with
|
||||||
|
older Python versions.
|
||||||
|
|
||||||
|
Both solutions require changes to distutils. These changes can
|
||||||
|
also be implemented by package authors, but it would be better to
|
||||||
|
define a standard way of switching on the proposed behaviour.
|
||||||
|
|
||||||
|
Scope
|
||||||
|
|
||||||
|
Solution 1: Python 2.3 and up
|
||||||
|
Solution 2: all Python versions supported by distutils
|
||||||
|
|
||||||
|
Credits
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
References
|
||||||
|
|
||||||
|
None
|
||||||
|
|
||||||
|
Copyright
|
||||||
|
|
||||||
|
This document has been placed in the public domain.
|
||||||
|
|
||||||
|
|
||||||
|
Local Variables:
|
||||||
|
mode: indented-text
|
||||||
|
indent-tabs-mode: nil
|
||||||
|
End:
|
Loading…
Reference in New Issue