Tarek Ziadé | 1b93fc1 | 2010-02-02 22:27:58 +0000 | [diff] [blame^] | 1 | :mod:`sysconfig` --- Provide access to Python's configuration information |
| 2 | ========================================================================= |
| 3 | |
| 4 | .. module:: sysconfig |
| 5 | :synopsis: Python's configuration information |
| 6 | .. moduleauthor:: Tarek Ziade <tarek@ziade.org> |
| 7 | .. sectionauthor:: Tarek Ziade <tarek@ziade.org> |
| 8 | .. versionadded:: 2.7 |
| 9 | .. index:: |
| 10 | single: configuration information |
| 11 | |
| 12 | The :mod:`sysconfig` module provides access to Python's configuration |
| 13 | information like the list of installation paths and the configuration |
| 14 | variables relevant for the current platform. |
| 15 | |
| 16 | Configuration variables |
| 17 | ----------------------- |
| 18 | |
| 19 | A Python distribution contains a :file:`Makefile` file and a :file:`python.h` |
| 20 | that are used to build the Python binary itself, but also any C extension |
| 21 | created in a third party project and compiled using :mod:`distutils`. |
| 22 | |
| 23 | :mod:`sysconfig` put all variables found in these files in a dictionnary |
| 24 | that can be accessed using :func:`get_config_vars` or :func:`get_config_var`. |
| 25 | |
| 26 | Notice that on Windows, it's a much smaller set. |
| 27 | |
| 28 | .. function:: get_config_vars(\*args) |
| 29 | |
| 30 | With no arguments, return a dictionary of all configuration |
| 31 | variables relevant for the current platform. |
| 32 | |
| 33 | With arguments, return a list of values that result from looking up |
| 34 | each argument in the configuration variable dictionary. |
| 35 | |
| 36 | For each argument, if the value is not found, returns None. |
| 37 | |
| 38 | .. function:: get_config_var(name) |
| 39 | |
| 40 | Return the value of a single variable *name*. Equivalent to |
| 41 | get_config_vars().get(name). |
| 42 | |
| 43 | If *name* is not found, return None. |
| 44 | |
| 45 | Example of usage:: |
| 46 | |
| 47 | >>> import sysconfig |
| 48 | >>> sysconfig.get_config_var('Py_ENABLE_SHARED') |
| 49 | 0 |
| 50 | >>> sysconfig.get_config_var('LIBDIR') |
| 51 | '/usr/local/lib' |
| 52 | >>> sysconfig.get_config_vars('AR', 'CXX') |
| 53 | ['ar', 'g++'] |
| 54 | |
| 55 | |
| 56 | Installation paths |
| 57 | ------------------ |
| 58 | |
| 59 | Python uses an installation scheme that differs depending on the platform |
| 60 | and on the installation options. These schemes are stored in :mod:`sysconfig` |
| 61 | under unique identifiers based on the value returned by :const:`os.name`. |
| 62 | |
| 63 | Every new component that is installed using :mod:`distutils` or a |
| 64 | Distutils-based system will follow the same scheme to copy its file in the |
| 65 | right places. |
| 66 | |
| 67 | Python currently supports seven schemes: |
| 68 | |
| 69 | - *posix_prefix*: scheme for posix platforms like Linux or Mac OS X. This is the |
| 70 | default scheme used when Python or a component is installed. |
| 71 | - *posix_home*: scheme for posix platform used when a *home* option is used |
| 72 | upon installation. This scheme is used when a component is installed through |
| 73 | Distutils with a specific home prefix. |
| 74 | - *posix_user*: scheme for posix platform used when a component is installed |
| 75 | through Distutils and the *user* option is used. This scheme defines paths |
| 76 | located under the user home directory. |
| 77 | - *nt*: scheme for nt platforms like Windows. |
| 78 | - *nt_user*: scheme for nt platforms, when the *user* option is used. |
| 79 | - *os2*: scheme for OS2 platforms. |
| 80 | - *os2_home*: scheme for OS2 patforms, when the *user* option is used. |
| 81 | |
| 82 | Each scheme is itself composed of a series of paths and each path has a unique |
| 83 | identifier. Python currently uses eight paths: |
| 84 | |
| 85 | - *stdlib*: directory containing the standard Python library files that are |
| 86 | not platform-specific. |
| 87 | - *platstdlib*: directory containing the standard Python library files that |
| 88 | are platform-specific files. |
| 89 | - *platlib*: directory for the site-specific, platform-specific files. |
| 90 | - *purelib*: directory for the site-specific, non platform-specific files. |
| 91 | - *include*: directory containing the non-platform-specific header files. |
| 92 | - *platinclude*: directory containing the platform-specific header files. |
| 93 | - *scripts*: directory containing the script files. |
| 94 | - *data*: directory containing the data files. |
| 95 | |
| 96 | :mod:`sysconfig` provides some functions to read these paths. |
| 97 | |
| 98 | .. function:: get_scheme_names() |
| 99 | |
| 100 | Return a tuple containing all schemes currently supported in |
| 101 | :mod:`sysconfig`. |
| 102 | |
| 103 | .. function:: get_path_names() |
| 104 | |
| 105 | Return a tuple containing all path names currently supported in |
| 106 | :mod:`sysconfig`. |
| 107 | |
| 108 | |
| 109 | .. function:: get_path(name, [scheme, [vars, [expand]]]) |
| 110 | |
| 111 | Return an installation path corresponding to the path *name*, from the |
| 112 | install scheme named *scheme*. |
| 113 | |
| 114 | *name* has to be a value from the list returned by :func:`get_path_names`. |
| 115 | |
| 116 | :mod:`sysconfig` stores installation paths corresponding to the each |
| 117 | path name, for each platform, with variables to be expanded. For instance |
| 118 | the `stdlib` path for the `nt` scheme is: `{base}/Lib`. |
| 119 | |
| 120 | :func:`get_path` will use the variables returned by :func:`get_config_vars` |
| 121 | to expand the path. All variables have default values for each platform |
| 122 | so one may call this function and get the default value. |
| 123 | |
| 124 | If *scheme* is provided, it must be a value from the list returned by |
| 125 | :func:`get_path_names`. Otherwise, the default scheme for the current |
| 126 | platform is used. |
| 127 | |
| 128 | If *vars* is provided, it must be a dictionnary of variables that will |
| 129 | update the dictionnary return by :func:`get_config_vars`. |
| 130 | |
| 131 | If *expand* is set to False, the path will not be expanded using |
| 132 | the variables. |
| 133 | |
| 134 | If *name* is not found, return None. |
| 135 | |
| 136 | |
| 137 | .. function:: get_paths([scheme, [vars, [expand]]]) |
| 138 | |
| 139 | Return a dictionnary containing all installation paths corresponding to an |
| 140 | installation scheme. See :func:`get_path` for more information. |
| 141 | |
| 142 | If *scheme* is not provided, will use the default scheme for the current |
| 143 | platform. |
| 144 | |
| 145 | If *vars* is provided, it must be a dictionnary of variables that will |
| 146 | update the dictionnary used to expand the paths. |
| 147 | |
| 148 | If *expand* is set to False, the paths will not be expanded. |
| 149 | |
| 150 | If *scheme* is not an existing scheme, :func:`get_paths` will raise a |
| 151 | :exc:`KeyError`. |
| 152 | |
| 153 | |
| 154 | Other functions |
| 155 | --------------- |
| 156 | |
| 157 | .. function:: get_python_version() |
| 158 | |
| 159 | Return the MAJOR.MINOR Python version number as a string. Similar to |
| 160 | ``sys.version[:3]``. |
| 161 | |
| 162 | .. function:: get_platform() |
| 163 | |
| 164 | Return a string that identifies the current platform. |
| 165 | |
| 166 | This is used mainly to distinguish platform-specific build directories and |
| 167 | platform-specific built distributions. Typically includes the OS name |
| 168 | and version and the architecture (as supplied by 'os.uname()'), |
| 169 | although the exact information included depends on the OS; eg. for IRIX |
| 170 | the architecture isn't particularly important (IRIX only runs on SGI |
| 171 | hardware), but for Linux the kernel version isn't particularly |
| 172 | important. |
| 173 | |
| 174 | Examples of returned values: |
| 175 | |
| 176 | - linux-i586 |
| 177 | - linux-alpha (?) |
| 178 | - solaris-2.6-sun4u |
| 179 | - irix-5.3 |
| 180 | - irix64-6.2 |
| 181 | |
| 182 | Windows will return one of: |
| 183 | |
| 184 | - win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) |
| 185 | - win-ia64 (64bit Windows on Itanium) |
| 186 | - win32 (all others - specifically, sys.platform is returned) |
| 187 | |
| 188 | Mac OS X can return : |
| 189 | |
| 190 | - macosx-10.6-ppc |
| 191 | - macosx-10.4-ppc64 |
| 192 | - macosx-10.3-i386 |
| 193 | - macosx-10.4-fat |
| 194 | |
| 195 | For other non-POSIX platforms, currently just returns 'sys.platform'. |
| 196 | |
| 197 | |
| 198 | .. function:: is_python_build(): |
| 199 | |
| 200 | Returns True if the current Python installation was built from source. |
| 201 | |
| 202 | |
| 203 | .. function:: parse_config_h(fp[, vars]): |
| 204 | |
| 205 | Parse a config.h-style file. |
| 206 | |
| 207 | *fp* is a file-like object pointing to the config.h-like file. |
| 208 | |
| 209 | A dictionary containing name/value pairs is returned. If an optional |
| 210 | dictionary is passed in as the second argument, it is used instead of a |
| 211 | new dictionary, and updated with the values read in the file. |
| 212 | |
| 213 | |
| 214 | .. function:: get_config_h_filename(): |
| 215 | |
| 216 | Returns the path of pyconfig.h |
| 217 | |
| 218 | |