2001-04-18 06:28:11 -04:00
|
|
|
|
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
|
2001-06-05 13:01:55 -04:00
|
|
|
|
Post-History: 30-Mar-2001
|
2001-04-18 06:28:11 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
2001-06-05 13:01:55 -04:00
|
|
|
|
sitedirs == [prefix, makepath(prefix, "lib", "site-packages")]
|
2001-04-18 06:28:11 -04:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
2001-06-05 13:01:55 -04:00
|
|
|
|
- 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.
|
2001-04-18 06:28:11 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Copyright
|
|
|
|
|
|
|
|
|
|
This document has been placed in the public domain.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
End:
|