PEP: Use site-packages on all platforms

Moore, Paul Paul.Moore at
Fri Mar 30 14:32:05 CEST 2001

Attached is a first draft of a proposal to use the "site-packages" directory
for locally installed modules, on all platforms instead of just on Unix. If
the consensus is that this is a worthwhile proposal, I'll submit it as a
formal PEP.

Any advice or suggestions welcomed - I've never written a PEP before - I
hope I've got the procedure right...

Paul Moore

Title: Install local packages in site-packages on all platforms
Version $Revision$
Author: Paul Moore <gustav at>
Status: Draft
Type: Standards Track
Python-Version: 2.2
Created: 2001-03-30
Post-History: TBA


    The standard Python distribution includes a directory Lib/site-packages,
    which is used on Unix platforms to hold locally-installed modules and
    packages. The module distributed with Python includes support
    locating modules in this directory.

    This PEP proposes that the site-packages directory should be used
    uniformly across all platforms for locally installed modules.


    On Windows platforms, the default setting for sys.path does not include
    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
    as installed executables is not good practice.

    Clearly, users can manipulate sys.path, either in a locally modified, or in a suitable, 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
    such a standard now, rather than later when more distutils-based
    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
    as the only major platform with no site-specific modules directory.


    The implementation of this feature is fairly trivial. All that would be
    required is a change to, to change the section setting sitedirs.
    The Python 2.1 version has

        if os.sep == '/':
            sitedirs = [makepath(prefix,
                                 "python" + sys.version[:3],
                        makepath(prefix, "lib", "site-python")]
        elif os.sep == ':':
            sitedirs = [makepath(prefix, "lib", "site-packages")]
            sitedirs = [prefix]

    A suitable change would be to simply replace the last 4 lines with

            sitedirs = [makepath(prefix, "lib", "site-packages")]

    Changes would also be required to distutils, in the file.
    is worth noting that this file does not seem to have been updated in
    with the change of policy on the Macintosh, as of this writing.


    1. It would be better if this change could be included in Python 2.1, as
       changing something of this nature is better done sooner, rather than
       later, to reduce the backward-compatibility burden. This is extremely
       unlikely to happen at this late stage in the release cycle, however.

    2. This change does not preclude packages using the current location -
       the change only adds a directory to sys.path, it does not remove

    3. In the Windows distribution of Python 2.1 (beta 1), the
       Lib\site-packages directory has been removed. It would need to be


    This document has been placed in the public domain.

More information about the Python-list mailing list