blob: 2de55d86c38f487ebefa37d45855506ca1004f59 [file] [log] [blame]
Tarek Ziadé18755702010-02-02 23:17:47 +00001:mod:`sysconfig` --- Provide access to Python's configuration information
2=========================================================================
3
4.. module:: sysconfig
5 :synopsis: Python's configuration information
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04006
Éric Araujo19f9b712011-08-19 00:49:18 +02007.. moduleauthor:: Tarek Ziadé <tarek@ziade.org>
8.. sectionauthor:: Tarek Ziadé <tarek@ziade.org>
9
Raymond Hettingera1993682011-01-27 01:20:32 +000010.. versionadded:: 3.2
11
Éric Araujo19f9b712011-08-19 00:49:18 +020012**Source code:** :source:`Lib/sysconfig.py`
13
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040014.. index::
15 single: configuration information
16
Raymond Hettingera1993682011-01-27 01:20:32 +000017--------------
18
Tarek Ziadé18755702010-02-02 23:17:47 +000019The :mod:`sysconfig` module provides access to Python's configuration
Tarek Ziadé667882f2010-02-11 20:47:18 +000020information like the list of installation paths and the configuration variables
21relevant for the current platform.
Tarek Ziadé18755702010-02-02 23:17:47 +000022
23Configuration variables
24-----------------------
25
Benjamin Petersond7c3ed52010-06-27 22:32:30 +000026A Python distribution contains a :file:`Makefile` and a :file:`pyconfig.h`
27header file that are necessary to build both the Python binary itself and
28third-party C extensions compiled using :mod:`distutils`.
Tarek Ziadé18755702010-02-02 23:17:47 +000029
Tarek Ziadé667882f2010-02-11 20:47:18 +000030:mod:`sysconfig` puts all variables found in these files in a dictionary that
31can be accessed using :func:`get_config_vars` or :func:`get_config_var`.
Tarek Ziadé18755702010-02-02 23:17:47 +000032
33Notice that on Windows, it's a much smaller set.
34
Andre Delfinodcc997c2020-12-16 22:37:28 -030035.. function:: get_config_vars(*args)
Tarek Ziadé18755702010-02-02 23:17:47 +000036
Tarek Ziadé667882f2010-02-11 20:47:18 +000037 With no arguments, return a dictionary of all configuration variables
38 relevant for the current platform.
Tarek Ziadé18755702010-02-02 23:17:47 +000039
Tarek Ziadé667882f2010-02-11 20:47:18 +000040 With arguments, return a list of values that result from looking up each
41 argument in the configuration variable dictionary.
Tarek Ziadé18755702010-02-02 23:17:47 +000042
Tarek Ziadé667882f2010-02-11 20:47:18 +000043 For each argument, if the value is not found, return ``None``.
44
Tarek Ziadé18755702010-02-02 23:17:47 +000045
46.. function:: get_config_var(name)
47
48 Return the value of a single variable *name*. Equivalent to
Tarek Ziadé667882f2010-02-11 20:47:18 +000049 ``get_config_vars().get(name)``.
Tarek Ziadé18755702010-02-02 23:17:47 +000050
Tarek Ziadé667882f2010-02-11 20:47:18 +000051 If *name* is not found, return ``None``.
Tarek Ziadé18755702010-02-02 23:17:47 +000052
53Example of usage::
54
Tarek Ziadé667882f2010-02-11 20:47:18 +000055 >>> import sysconfig
56 >>> sysconfig.get_config_var('Py_ENABLE_SHARED')
57 0
58 >>> sysconfig.get_config_var('LIBDIR')
59 '/usr/local/lib'
60 >>> sysconfig.get_config_vars('AR', 'CXX')
61 ['ar', 'g++']
Tarek Ziadé18755702010-02-02 23:17:47 +000062
63
64Installation paths
65------------------
66
Tarek Ziadé667882f2010-02-11 20:47:18 +000067Python uses an installation scheme that differs depending on the platform and on
68the installation options. These schemes are stored in :mod:`sysconfig` under
69unique identifiers based on the value returned by :const:`os.name`.
Tarek Ziadé18755702010-02-02 23:17:47 +000070
71Every new component that is installed using :mod:`distutils` or a
Tarek Ziadé667882f2010-02-11 20:47:18 +000072Distutils-based system will follow the same scheme to copy its file in the right
73places.
Tarek Ziadé18755702010-02-02 23:17:47 +000074
75Python currently supports seven schemes:
76
Mathieu Dupuy65460562020-05-17 21:29:51 +000077- *posix_prefix*: scheme for POSIX platforms like Linux or Mac OS X. This is
Tarek Ziadé667882f2010-02-11 20:47:18 +000078 the default scheme used when Python or a component is installed.
Mathieu Dupuy65460562020-05-17 21:29:51 +000079- *posix_home*: scheme for POSIX platforms used when a *home* option is used
Tarek Ziadé667882f2010-02-11 20:47:18 +000080 upon installation. This scheme is used when a component is installed through
Tarek Ziadé18755702010-02-02 23:17:47 +000081 Distutils with a specific home prefix.
Mathieu Dupuy65460562020-05-17 21:29:51 +000082- *posix_user*: scheme for POSIX platforms used when a component is installed
Tarek Ziadé667882f2010-02-11 20:47:18 +000083 through Distutils and the *user* option is used. This scheme defines paths
Tarek Ziadé18755702010-02-02 23:17:47 +000084 located under the user home directory.
Tarek Ziadé667882f2010-02-11 20:47:18 +000085- *nt*: scheme for NT platforms like Windows.
86- *nt_user*: scheme for NT platforms, when the *user* option is used.
Tarek Ziadé18755702010-02-02 23:17:47 +000087
88Each scheme is itself composed of a series of paths and each path has a unique
Tarek Ziadé667882f2010-02-11 20:47:18 +000089identifier. Python currently uses eight paths:
Tarek Ziadé18755702010-02-02 23:17:47 +000090
Tarek Ziadé667882f2010-02-11 20:47:18 +000091- *stdlib*: directory containing the standard Python library files that are not
92 platform-specific.
93- *platstdlib*: directory containing the standard Python library files that are
94 platform-specific.
95- *platlib*: directory for site-specific, platform-specific files.
96- *purelib*: directory for site-specific, non-platform-specific files.
97- *include*: directory for non-platform-specific header files.
98- *platinclude*: directory for platform-specific header files.
99- *scripts*: directory for script files.
100- *data*: directory for data files.
Tarek Ziadé18755702010-02-02 23:17:47 +0000101
Tarek Ziadé667882f2010-02-11 20:47:18 +0000102:mod:`sysconfig` provides some functions to determine these paths.
Tarek Ziadé18755702010-02-02 23:17:47 +0000103
104.. function:: get_scheme_names()
105
106 Return a tuple containing all schemes currently supported in
107 :mod:`sysconfig`.
108
Tarek Ziadé667882f2010-02-11 20:47:18 +0000109
Tzu-ping Chungd9251332021-04-27 16:45:55 +0800110.. function:: get_default_scheme()
111
112 Return the default scheme name for the current platform.
113
114 .. versionchanged:: 3.10
115 This function was previously named ``_get_default_scheme()`` and
116 considered an implementation detail.
117
118
119.. function:: get_preferred_scheme(key)
120
121 Return a preferred scheme name for an installation layout specified by *key*.
122
123 *key* must be either ``"prefix"``, ``"home"``, or ``"user"``.
124
125 The return value is a scheme name listed in :func:`get_scheme_names`. It
126 can be passed to :mod:`sysconfig` functions that take a *scheme* argument,
127 such as :func:`get_paths`.
128
129 .. versionadded:: 3.10
130
131
132.. function:: _get_preferred_schemes()
133
134 Return a dict containing preferred scheme names on the current platform.
135 Python implementers and redistributors may add their preferred schemes to
136 the ``_INSTALL_SCHEMES`` module-level global value, and modify this function
137 to return those scheme names, to e.g. provide different schemes for system
138 and language package managers to use, so packages installed by either do not
139 mix with those by the other.
140
141 End users should not use this function, but :func:`get_default_scheme` and
142 :func:`get_preferred_scheme()` instead.
143
144 .. versionadded:: 3.10
145
146
Tarek Ziadé18755702010-02-02 23:17:47 +0000147.. function:: get_path_names()
148
149 Return a tuple containing all path names currently supported in
150 :mod:`sysconfig`.
151
152
153.. function:: get_path(name, [scheme, [vars, [expand]]])
154
155 Return an installation path corresponding to the path *name*, from the
156 install scheme named *scheme*.
157
158 *name* has to be a value from the list returned by :func:`get_path_names`.
159
Tarek Ziadé667882f2010-02-11 20:47:18 +0000160 :mod:`sysconfig` stores installation paths corresponding to each path name,
161 for each platform, with variables to be expanded. For instance the *stdlib*
162 path for the *nt* scheme is: ``{base}/Lib``.
Tarek Ziadé18755702010-02-02 23:17:47 +0000163
164 :func:`get_path` will use the variables returned by :func:`get_config_vars`
Tarek Ziadé667882f2010-02-11 20:47:18 +0000165 to expand the path. All variables have default values for each platform so
166 one may call this function and get the default value.
Tarek Ziadé18755702010-02-02 23:17:47 +0000167
168 If *scheme* is provided, it must be a value from the list returned by
Éric Araujo2bddc532011-11-29 16:34:58 +0100169 :func:`get_scheme_names`. Otherwise, the default scheme for the current
Tarek Ziadé18755702010-02-02 23:17:47 +0000170 platform is used.
171
Tarek Ziadé667882f2010-02-11 20:47:18 +0000172 If *vars* is provided, it must be a dictionary of variables that will update
173 the dictionary return by :func:`get_config_vars`.
Tarek Ziadé18755702010-02-02 23:17:47 +0000174
Tarek Ziadé667882f2010-02-11 20:47:18 +0000175 If *expand* is set to ``False``, the path will not be expanded using the
176 variables.
Tarek Ziadé18755702010-02-02 23:17:47 +0000177
Miss Islington (bot)51518262021-07-26 12:35:33 -0700178 If *name* is not found, raise a :exc:`KeyError`.
Tarek Ziadé18755702010-02-02 23:17:47 +0000179
180
181.. function:: get_paths([scheme, [vars, [expand]]])
182
Tarek Ziadé667882f2010-02-11 20:47:18 +0000183 Return a dictionary containing all installation paths corresponding to an
Tarek Ziadé18755702010-02-02 23:17:47 +0000184 installation scheme. See :func:`get_path` for more information.
185
186 If *scheme* is not provided, will use the default scheme for the current
187 platform.
188
Tarek Ziadé667882f2010-02-11 20:47:18 +0000189 If *vars* is provided, it must be a dictionary of variables that will
190 update the dictionary used to expand the paths.
Tarek Ziadé18755702010-02-02 23:17:47 +0000191
Serhiy Storchaka4adf01c2016-10-19 18:30:05 +0300192 If *expand* is set to false, the paths will not be expanded.
Tarek Ziadé18755702010-02-02 23:17:47 +0000193
194 If *scheme* is not an existing scheme, :func:`get_paths` will raise a
195 :exc:`KeyError`.
196
197
198Other functions
199---------------
200
201.. function:: get_python_version()
202
Tarek Ziadé667882f2010-02-11 20:47:18 +0000203 Return the ``MAJOR.MINOR`` Python version number as a string. Similar to
Serhiy Storchaka885bdc42016-02-11 13:10:36 +0200204 ``'%d.%d' % sys.version_info[:2]``.
Tarek Ziadé18755702010-02-02 23:17:47 +0000205
Tarek Ziadé667882f2010-02-11 20:47:18 +0000206
Tarek Ziadé18755702010-02-02 23:17:47 +0000207.. function:: get_platform()
208
209 Return a string that identifies the current platform.
210
211 This is used mainly to distinguish platform-specific build directories and
Tarek Ziadé667882f2010-02-11 20:47:18 +0000212 platform-specific built distributions. Typically includes the OS name and
Benjamin Peterson06930632017-09-04 16:36:05 -0700213 version and the architecture (as supplied by 'os.uname()'), although the
214 exact information included depends on the OS; e.g., on Linux, the kernel
215 version isn't particularly important.
Tarek Ziadé18755702010-02-02 23:17:47 +0000216
217 Examples of returned values:
218
219 - linux-i586
220 - linux-alpha (?)
221 - solaris-2.6-sun4u
Tarek Ziadé18755702010-02-02 23:17:47 +0000222
223 Windows will return one of:
224
Andre Delfino55f41e42018-12-05 16:45:30 -0300225 - win-amd64 (64bit Windows on AMD64, aka x86_64, Intel64, and EM64T)
Tarek Ziadé18755702010-02-02 23:17:47 +0000226 - win32 (all others - specifically, sys.platform is returned)
227
Tarek Ziadé667882f2010-02-11 20:47:18 +0000228 Mac OS X can return:
Tarek Ziadé18755702010-02-02 23:17:47 +0000229
230 - macosx-10.6-ppc
231 - macosx-10.4-ppc64
232 - macosx-10.3-i386
233 - macosx-10.4-fat
234
Tarek Ziadé667882f2010-02-11 20:47:18 +0000235 For other non-POSIX platforms, currently just returns :data:`sys.platform`.
Tarek Ziadé18755702010-02-02 23:17:47 +0000236
237
Tarek Ziadé667882f2010-02-11 20:47:18 +0000238.. function:: is_python_build()
Tarek Ziadé18755702010-02-02 23:17:47 +0000239
Vinay Sajip37cac762016-08-25 15:13:24 +0100240 Return ``True`` if the running Python interpreter was built from source and
241 is being run from its built location, and not from a location resulting from
242 e.g. running ``make install`` or installing via a binary installer.
Tarek Ziadé18755702010-02-02 23:17:47 +0000243
244
Tarek Ziadé667882f2010-02-11 20:47:18 +0000245.. function:: parse_config_h(fp[, vars])
Tarek Ziadé18755702010-02-02 23:17:47 +0000246
Tarek Ziadé667882f2010-02-11 20:47:18 +0000247 Parse a :file:`config.h`\-style file.
Tarek Ziadé18755702010-02-02 23:17:47 +0000248
Tarek Ziadé667882f2010-02-11 20:47:18 +0000249 *fp* is a file-like object pointing to the :file:`config.h`\-like file.
Tarek Ziadé18755702010-02-02 23:17:47 +0000250
251 A dictionary containing name/value pairs is returned. If an optional
Tarek Ziadé667882f2010-02-11 20:47:18 +0000252 dictionary is passed in as the second argument, it is used instead of a new
253 dictionary, and updated with the values read in the file.
Tarek Ziadé18755702010-02-02 23:17:47 +0000254
255
Tarek Ziadé667882f2010-02-11 20:47:18 +0000256.. function:: get_config_h_filename()
Tarek Ziadé18755702010-02-02 23:17:47 +0000257
Tarek Ziadé667882f2010-02-11 20:47:18 +0000258 Return the path of :file:`pyconfig.h`.
Tarek Ziadéa7514992010-05-25 09:44:36 +0000259
Barry Warsawebbef6f2010-09-20 15:29:53 +0000260.. function:: get_makefile_filename()
261
262 Return the path of :file:`Makefile`.
263
Lumír 'Frenzy' Balhar90d02e52021-04-23 14:02:41 +0200264
Tarek Ziadéa7514992010-05-25 09:44:36 +0000265Using :mod:`sysconfig` as a script
266----------------------------------
267
Martin Panter1050d2d2016-07-26 11:18:21 +0200268You can use :mod:`sysconfig` as a script with Python's *-m* option:
269
270.. code-block:: shell-session
Tarek Ziadéa7514992010-05-25 09:44:36 +0000271
272 $ python -m sysconfig
273 Platform: "macosx-10.4-i386"
274 Python version: "3.2"
275 Current installation scheme: "posix_prefix"
276
277 Paths:
278 data = "/usr/local"
279 include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
280 platinclude = "."
281 platlib = "/usr/local/lib/python3.2/site-packages"
282 platstdlib = "/usr/local/lib/python3.2"
283 purelib = "/usr/local/lib/python3.2/site-packages"
284 scripts = "/usr/local/bin"
285 stdlib = "/usr/local/lib/python3.2"
286
287 Variables:
288 AC_APPLE_UNIVERSAL_BUILD = "0"
289 AIX_GENUINE_CPLUSPLUS = "0"
290 AR = "ar"
291 ARFLAGS = "rc"
Tarek Ziadéa7514992010-05-25 09:44:36 +0000292 ...
293
294This call will print in the standard output the information returned by
295:func:`get_platform`, :func:`get_python_version`, :func:`get_path` and
296:func:`get_config_vars`.