• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1:mod:`sysconfig` --- Provide access to Python's configuration information
2=========================================================================
3
4.. module:: sysconfig
5   :synopsis: Python's configuration information
6
7.. moduleauthor:: Tarek Ziadé <tarek@ziade.org>
8.. sectionauthor:: Tarek Ziadé <tarek@ziade.org>
9
10.. versionadded:: 3.2
11
12**Source code:** :source:`Lib/sysconfig.py`
13
14.. index::
15   single: configuration information
16
17--------------
18
19The :mod:`sysconfig` module provides access to Python's configuration
20information like the list of installation paths and the configuration variables
21relevant for the current platform.
22
23Configuration variables
24-----------------------
25
26A 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`.
29
30: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`.
32
33Notice that on Windows, it's a much smaller set.
34
35.. function:: get_config_vars(*args)
36
37   With no arguments, return a dictionary of all configuration variables
38   relevant for the current platform.
39
40   With arguments, return a list of values that result from looking up each
41   argument in the configuration variable dictionary.
42
43   For each argument, if the value is not found, return ``None``.
44
45
46.. function:: get_config_var(name)
47
48   Return the value of a single variable *name*. Equivalent to
49   ``get_config_vars().get(name)``.
50
51   If *name* is not found, return ``None``.
52
53Example of usage::
54
55   >>> 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++']
62
63.. _installation_paths:
64
65Installation paths
66------------------
67
68Python uses an installation scheme that differs depending on the platform and on
69the installation options.  These schemes are stored in :mod:`sysconfig` under
70unique identifiers based on the value returned by :const:`os.name`.
71
72Every new component that is installed using :mod:`distutils` or a
73Distutils-based system will follow the same scheme to copy its file in the right
74places.
75
76Python currently supports six schemes:
77
78- *posix_prefix*: scheme for POSIX platforms like Linux or macOS.  This is
79  the default scheme used when Python or a component is installed.
80- *posix_home*: scheme for POSIX platforms used when a *home* option is used
81  upon installation.  This scheme is used when a component is installed through
82  Distutils with a specific home prefix.
83- *posix_user*: scheme for POSIX platforms used when a component is installed
84  through Distutils and the *user* option is used.  This scheme defines paths
85  located under the user home directory.
86- *nt*: scheme for NT platforms like Windows.
87- *nt_user*: scheme for NT platforms, when the *user* option is used.
88- *osx_framework_user*: scheme for macOS, when the *user* option is used.
89
90Each scheme is itself composed of a series of paths and each path has a unique
91identifier.  Python currently uses eight paths:
92
93- *stdlib*: directory containing the standard Python library files that are not
94  platform-specific.
95- *platstdlib*: directory containing the standard Python library files that are
96  platform-specific.
97- *platlib*: directory for site-specific, platform-specific files.
98- *purelib*: directory for site-specific, non-platform-specific files.
99- *include*: directory for non-platform-specific header files.
100- *platinclude*: directory for platform-specific header files.
101- *scripts*: directory for script files.
102- *data*: directory for data files.
103
104:mod:`sysconfig` provides some functions to determine these paths.
105
106.. function:: get_scheme_names()
107
108   Return a tuple containing all schemes currently supported in
109   :mod:`sysconfig`.
110
111
112.. function:: get_default_scheme()
113
114   Return the default scheme name for the current platform.
115
116   .. versionchanged:: 3.10
117      This function was previously named ``_get_default_scheme()`` and
118      considered an implementation detail.
119
120
121.. function:: get_preferred_scheme(key)
122
123   Return a preferred scheme name for an installation layout specified by *key*.
124
125   *key* must be either ``"prefix"``, ``"home"``, or ``"user"``.
126
127   The return value is a scheme name listed in :func:`get_scheme_names`. It
128   can be passed to :mod:`sysconfig` functions that take a *scheme* argument,
129   such as :func:`get_paths`.
130
131   .. versionadded:: 3.10
132
133
134.. function:: _get_preferred_schemes()
135
136   Return a dict containing preferred scheme names on the current platform.
137   Python implementers and redistributors may add their preferred schemes to
138   the ``_INSTALL_SCHEMES`` module-level global value, and modify this function
139   to return those scheme names, to e.g. provide different schemes for system
140   and language package managers to use, so packages installed by either do not
141   mix with those by the other.
142
143   End users should not use this function, but :func:`get_default_scheme` and
144   :func:`get_preferred_scheme()` instead.
145
146   .. versionadded:: 3.10
147
148
149.. function:: get_path_names()
150
151   Return a tuple containing all path names currently supported in
152   :mod:`sysconfig`.
153
154
155.. function:: get_path(name, [scheme, [vars, [expand]]])
156
157   Return an installation path corresponding to the path *name*, from the
158   install scheme named *scheme*.
159
160   *name* has to be a value from the list returned by :func:`get_path_names`.
161
162   :mod:`sysconfig` stores installation paths corresponding to each path name,
163   for each platform, with variables to be expanded.  For instance the *stdlib*
164   path for the *nt* scheme is: ``{base}/Lib``.
165
166   :func:`get_path` will use the variables returned by :func:`get_config_vars`
167   to expand the path.  All variables have default values for each platform so
168   one may call this function and get the default value.
169
170   If *scheme* is provided, it must be a value from the list returned by
171   :func:`get_scheme_names`.  Otherwise, the default scheme for the current
172   platform is used.
173
174   If *vars* is provided, it must be a dictionary of variables that will update
175   the dictionary return by :func:`get_config_vars`.
176
177   If *expand* is set to ``False``, the path will not be expanded using the
178   variables.
179
180   If *name* is not found, raise a :exc:`KeyError`.
181
182
183.. function:: get_paths([scheme, [vars, [expand]]])
184
185   Return a dictionary containing all installation paths corresponding to an
186   installation scheme. See :func:`get_path` for more information.
187
188   If *scheme* is not provided, will use the default scheme for the current
189   platform.
190
191   If *vars* is provided, it must be a dictionary of variables that will
192   update the dictionary used to expand the paths.
193
194   If *expand* is set to false, the paths will not be expanded.
195
196   If *scheme* is not an existing scheme, :func:`get_paths` will raise a
197   :exc:`KeyError`.
198
199
200Other functions
201---------------
202
203.. function:: get_python_version()
204
205   Return the ``MAJOR.MINOR`` Python version number as a string.  Similar to
206   ``'%d.%d' % sys.version_info[:2]``.
207
208
209.. function:: get_platform()
210
211   Return a string that identifies the current platform.
212
213   This is used mainly to distinguish platform-specific build directories and
214   platform-specific built distributions.  Typically includes the OS name and
215   version and the architecture (as supplied by 'os.uname()'), although the
216   exact information included depends on the OS; e.g., on Linux, the kernel
217   version isn't particularly important.
218
219   Examples of returned values:
220
221   - linux-i586
222   - linux-alpha (?)
223   - solaris-2.6-sun4u
224
225   Windows will return one of:
226
227   - win-amd64 (64bit Windows on AMD64, aka x86_64, Intel64, and EM64T)
228   - win32 (all others - specifically, sys.platform is returned)
229
230   macOS can return:
231
232   - macosx-10.6-ppc
233   - macosx-10.4-ppc64
234   - macosx-10.3-i386
235   - macosx-10.4-fat
236
237   For other non-POSIX platforms, currently just returns :data:`sys.platform`.
238
239
240.. function:: is_python_build()
241
242   Return ``True`` if the running Python interpreter was built from source and
243   is being run from its built location, and not from a location resulting from
244   e.g. running ``make install`` or installing via a binary installer.
245
246
247.. function:: parse_config_h(fp[, vars])
248
249   Parse a :file:`config.h`\-style file.
250
251   *fp* is a file-like object pointing to the :file:`config.h`\-like file.
252
253   A dictionary containing name/value pairs is returned.  If an optional
254   dictionary is passed in as the second argument, it is used instead of a new
255   dictionary, and updated with the values read in the file.
256
257
258.. function:: get_config_h_filename()
259
260   Return the path of :file:`pyconfig.h`.
261
262.. function:: get_makefile_filename()
263
264   Return the path of :file:`Makefile`.
265
266
267Using :mod:`sysconfig` as a script
268----------------------------------
269
270You can use :mod:`sysconfig` as a script with Python's *-m* option:
271
272.. code-block:: shell-session
273
274    $ python -m sysconfig
275    Platform: "macosx-10.4-i386"
276    Python version: "3.2"
277    Current installation scheme: "posix_prefix"
278
279    Paths:
280            data = "/usr/local"
281            include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
282            platinclude = "."
283            platlib = "/usr/local/lib/python3.2/site-packages"
284            platstdlib = "/usr/local/lib/python3.2"
285            purelib = "/usr/local/lib/python3.2/site-packages"
286            scripts = "/usr/local/bin"
287            stdlib = "/usr/local/lib/python3.2"
288
289    Variables:
290            AC_APPLE_UNIVERSAL_BUILD = "0"
291            AIX_GENUINE_CPLUSPLUS = "0"
292            AR = "ar"
293            ARFLAGS = "rc"
294            ...
295
296This call will print in the standard output the information returned by
297:func:`get_platform`, :func:`get_python_version`, :func:`get_path` and
298:func:`get_config_vars`.
299