| \section{\module{site} --- |
| Site-specific configuration hook} |
| |
| \declaremodule{standard}{site} |
| \modulesynopsis{A standard way to reference site-specific modules.} |
| |
| |
| \strong{This module is automatically imported during initialization.} |
| The automatic import can be suppressed using the interpreter's |
| \programopt{-S} option. |
| |
| Importing this module will append site-specific paths to the module |
| search path. |
| \indexiii{module}{search}{path} |
| |
| It starts by constructing up to four directories from a head and a |
| tail part. For the head part, it uses \code{sys.prefix} and |
| \code{sys.exec_prefix}; empty heads are skipped. For |
| the tail part, it uses the empty string (on Windows) or |
| it uses first \file{lib/python\shortversion/site-packages} and then |
| \file{lib/site-python} (on \UNIX and Macintosh). For each of the distinct |
| head-tail combinations, it sees if it refers to an existing directory, |
| and if so, adds it to \code{sys.path} and also inspects the newly added |
| path for configuration files. |
| \indexii{site-python}{directory} |
| \indexii{site-packages}{directory} |
| |
| A path configuration file is a file whose name has the form |
| \file{\var{package}.pth} and exists in one of the four directories |
| mentioned above; its contents are additional items (one |
| per line) to be added to \code{sys.path}. Non-existing items are |
| never added to \code{sys.path}, but no check is made that the item |
| refers to a directory (rather than a file). No item is added to |
| \code{sys.path} more than once. Blank lines and lines beginning with |
| \code{\#} are skipped. Lines starting with \code{import} are executed. |
| \index{package} |
| \indexiii{path}{configuration}{file} |
| |
| For example, suppose \code{sys.prefix} and \code{sys.exec_prefix} are |
| set to \file{/usr/local}. The Python \version\ library is then |
| installed in \file{/usr/local/lib/python\shortversion} (where only the |
| first three characters of \code{sys.version} are used to form the |
| installation path name). Suppose this has a subdirectory |
| \file{/usr/local/lib/python\shortversion/site-packages} with three |
| subsubdirectories, \file{foo}, \file{bar} and \file{spam}, and two |
| path configuration files, \file{foo.pth} and \file{bar.pth}. Assume |
| \file{foo.pth} contains the following: |
| |
| \begin{verbatim} |
| # foo package configuration |
| |
| foo |
| bar |
| bletch |
| \end{verbatim} |
| |
| and \file{bar.pth} contains: |
| |
| \begin{verbatim} |
| # bar package configuration |
| |
| bar |
| \end{verbatim} |
| |
| Then the following directories are added to \code{sys.path}, in this |
| order: |
| |
| \begin{verbatim} |
| /usr/local/lib/python2.3/site-packages/bar |
| /usr/local/lib/python2.3/site-packages/foo |
| \end{verbatim} |
| |
| Note that \file{bletch} is omitted because it doesn't exist; the |
| \file{bar} directory precedes the \file{foo} directory because |
| \file{bar.pth} comes alphabetically before \file{foo.pth}; and |
| \file{spam} is omitted because it is not mentioned in either path |
| configuration file. |
| |
| After these path manipulations, an attempt is made to import a module |
| named \module{sitecustomize}\refmodindex{sitecustomize}, which can |
| perform arbitrary site-specific customizations. If this import fails |
| with an \exception{ImportError} exception, it is silently ignored. |
| |
| Note that for some non-\UNIX{} systems, \code{sys.prefix} and |
| \code{sys.exec_prefix} are empty, and the path manipulations are |
| skipped; however the import of |
| \module{sitecustomize}\refmodindex{sitecustomize} is still attempted. |