python-peps/pep-0250.txt

130 lines
4.7 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PEP: 250
Title: Using site-packages on All Platforms
Version $Revision$
Author: gustav@morpheus.demon.co.uk (Paul Moore)
Status: Draft
Type: Standards Track
Created: 2001-03-30
Python-Version: 2.2
Post-History: 30-Mar-2001
Abstract
The standard Python distribution includes a directory
Lib/site-packages, which is used on Unix platforms to hold
locally-installed modules and packages. The site.py module
distributed with Python includes support for locating other
modules in the site-packages directory.
This PEP proposes that the site-packages directory should be used
uniformly across all platforms for locally installed modules.
Motivation
On Windows platforms, the default setting for sys.path does not
include a directory suitable for users to install locally
developed modules. The "expected" location appears to be the
directory containing the Python executable itself. Including
locally developed code in the same directory as installed
executables is not good practice.
Clearly, users can manipulate sys.path, either in a locally
modified site.py, or in a suitable sitecustomize.py, or even via
.pth files. However, there should be a standard location for such
files, rather than relying on every individual site having to set
their own policy.
In addition, with distutils becoming more prevalent as a means of
distributing modules, the need for a standard install location for
distributed modules will become more common. It would be better
to define such a standard now, rather than later when more
distutils-based packages exist which will need rebuilding.
It is relevant to note that prior to Python 2.1, the site-packages
directory was not included in sys.path for Macintosh platforms.
This has been changed in 2.1, and Macintosh includes sys.path now,
leaving Windows as the only major platform with no site-specific
modules directory.
Implementation
The implementation of this feature is fairly trivial. All that
would be required is a change to site.py, to change the section
setting sitedirs. The Python 2.1 version has
if os.sep == '/':
sitedirs = [makepath(prefix,
"lib",
"python" + sys.version[:3],
"site-packages"),
makepath(prefix, "lib", "site-python")]
elif os.sep == ':':
sitedirs = [makepath(prefix, "lib", "site-packages")]
else:
sitedirs = [prefix]
A suitable change would be to simply replace the last 4 lines with
else:
sitedirs == [prefix, makepath(prefix, "lib", "site-packages")]
Changes would also be required to distutils, in the sysconfig.py
file. It is worth noting that this file does not seem to have
been updated in line with the change of policy on the Macintosh,
as of this writing.
Notes
- This change does not preclude packages using the current
location -- the change only adds a directory to sys.path, it
does not remove anything.
- Both the current location (sys.prefix) and the new directory
(site-packages) are included in sitedirs, so that .pth files
will be recognized in either location.
- This proposal adds a single additional site-packages directory
to sitedirs. On Unix platforms, two directories are added, one
for version-independent files (Python code) and one for
version-dependent code (C extensions). This is necessary on
Unix, as the sitedirs include a common (across Python versions)
package location, in /usr/local by default. As there is no such
common location available on Windows, there is also no need for
having two separate package directories.
- If users want to keep DLLs in a single location on Windows,
rather than keeping them in the package directory, the DLLs
subdirectory of the Python install directory is available for
that purpose. Adding an extra directory solely for DLLs should
not be necessary.
Open Issues
- There have been no comments on this proposal from non-Windows
users. In the absence of such comments, it is assumed that there
will be no adverse effects on such platforms caused by the
proposed change. (The author knows of no reason why there should
be).
- There could be issues with applications which embed Python. To
the author's knowledge, there should be no problem as a result
of this change. Again, there have been no comments (supportive
or otherwise) from users who embed Python.
Copyright
This document has been placed in the public domain.
Local Variables:
mode: indented-text
indent-tabs-mode: nil
End: