Fred Drake | 4a80a3e | 2002-12-23 16:53:59 +0000 | [diff] [blame] | 1 | \section{\module{pkgutil} --- |
| 2 | Package extension utility} |
| 3 | |
| 4 | \declaremodule{standard}{pkgutil} |
| 5 | \modulesynopsis{Utilities to support extension of packages.} |
| 6 | |
| 7 | \versionadded{2.3} |
| 8 | |
Fred Drake | 4a80a3e | 2002-12-23 16:53:59 +0000 | [diff] [blame] | 9 | This module provides a single function: |
| 10 | |
| 11 | \begin{funcdesc}{extend_path}{path, name} |
| 12 | Extend the search path for the modules which comprise a package. |
| 13 | Intended use is to place the following code in a package's |
| 14 | \file{__init__.py}: |
| 15 | |
| 16 | \begin{verbatim} |
| 17 | from pkgutil import extend_path |
| 18 | __path__ = extend_path(__path__, __name__) |
| 19 | \end{verbatim} |
| 20 | |
| 21 | This will add to the package's \code{__path__} all subdirectories of |
| 22 | directories on \code{sys.path} named after the package. This is |
| 23 | useful if one wants to distribute different parts of a single |
| 24 | logical package as multiple directories. |
| 25 | |
| 26 | It also looks for \file{*.pkg} files beginning where \code{*} |
| 27 | matches the \var{name} argument. This feature is similar to |
| 28 | \file{*.pth} files (see the \refmodule{site} module for more |
| 29 | information), except that it doesn't special-case lines starting |
| 30 | with \code{import}. A \file{*.pkg} file is trusted at face value: |
| 31 | apart from checking for duplicates, all entries found in a |
| 32 | \file{*.pkg} file are added to the path, regardless of whether they |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 33 | exist on the filesystem. (This is a feature.) |
Fred Drake | 4a80a3e | 2002-12-23 16:53:59 +0000 | [diff] [blame] | 34 | |
| 35 | If the input path is not a list (as is the case for frozen |
| 36 | packages) it is returned unchanged. The input path is not |
| 37 | modified; an extended copy is returned. Items are only appended |
| 38 | to the copy at the end. |
| 39 | |
| 40 | It is assumed that \code{sys.path} is a sequence. Items of |
| 41 | \code{sys.path} that are not (Unicode or 8-bit) strings referring to |
| 42 | existing directories are ignored. Unicode items on \code{sys.path} |
| 43 | that cause errors when used as filenames may cause this function to |
| 44 | raise an exception (in line with \function{os.path.isdir()} behavior). |
| 45 | \end{funcdesc} |