17db96d56Sopenharmony_ci:mod:`sysconfig` --- Provide access to Python's configuration information
27db96d56Sopenharmony_ci=========================================================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: sysconfig
57db96d56Sopenharmony_ci   :synopsis: Python's configuration information
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Tarek Ziadé <tarek@ziade.org>
87db96d56Sopenharmony_ci.. sectionauthor:: Tarek Ziadé <tarek@ziade.org>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci.. versionadded:: 3.2
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci**Source code:** :source:`Lib/sysconfig.py`
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci.. index::
157db96d56Sopenharmony_ci   single: configuration information
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci--------------
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ciThe :mod:`sysconfig` module provides access to Python's configuration
207db96d56Sopenharmony_ciinformation like the list of installation paths and the configuration variables
217db96d56Sopenharmony_cirelevant for the current platform.
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ciConfiguration variables
247db96d56Sopenharmony_ci-----------------------
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciA Python distribution contains a :file:`Makefile` and a :file:`pyconfig.h`
277db96d56Sopenharmony_ciheader file that are necessary to build both the Python binary itself and
287db96d56Sopenharmony_cithird-party C extensions compiled using :mod:`distutils`.
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci:mod:`sysconfig` puts all variables found in these files in a dictionary that
317db96d56Sopenharmony_cican be accessed using :func:`get_config_vars` or :func:`get_config_var`.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciNotice that on Windows, it's a much smaller set.
347db96d56Sopenharmony_ci
357db96d56Sopenharmony_ci.. function:: get_config_vars(*args)
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci   With no arguments, return a dictionary of all configuration variables
387db96d56Sopenharmony_ci   relevant for the current platform.
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci   With arguments, return a list of values that result from looking up each
417db96d56Sopenharmony_ci   argument in the configuration variable dictionary.
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   For each argument, if the value is not found, return ``None``.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci.. function:: get_config_var(name)
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci   Return the value of a single variable *name*. Equivalent to
497db96d56Sopenharmony_ci   ``get_config_vars().get(name)``.
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   If *name* is not found, return ``None``.
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ciExample of usage::
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   >>> import sysconfig
567db96d56Sopenharmony_ci   >>> sysconfig.get_config_var('Py_ENABLE_SHARED')
577db96d56Sopenharmony_ci   0
587db96d56Sopenharmony_ci   >>> sysconfig.get_config_var('LIBDIR')
597db96d56Sopenharmony_ci   '/usr/local/lib'
607db96d56Sopenharmony_ci   >>> sysconfig.get_config_vars('AR', 'CXX')
617db96d56Sopenharmony_ci   ['ar', 'g++']
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci.. _installation_paths:
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ciInstallation paths
667db96d56Sopenharmony_ci------------------
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ciPython uses an installation scheme that differs depending on the platform and on
697db96d56Sopenharmony_cithe installation options.  These schemes are stored in :mod:`sysconfig` under
707db96d56Sopenharmony_ciunique identifiers based on the value returned by :const:`os.name`.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ciEvery new component that is installed using :mod:`distutils` or a
737db96d56Sopenharmony_ciDistutils-based system will follow the same scheme to copy its file in the right
747db96d56Sopenharmony_ciplaces.
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ciPython currently supports nine schemes:
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci- *posix_prefix*: scheme for POSIX platforms like Linux or macOS.  This is
797db96d56Sopenharmony_ci  the default scheme used when Python or a component is installed.
807db96d56Sopenharmony_ci- *posix_home*: scheme for POSIX platforms used when a *home* option is used
817db96d56Sopenharmony_ci  upon installation.  This scheme is used when a component is installed through
827db96d56Sopenharmony_ci  Distutils with a specific home prefix.
837db96d56Sopenharmony_ci- *posix_user*: scheme for POSIX platforms used when a component is installed
847db96d56Sopenharmony_ci  through Distutils and the *user* option is used.  This scheme defines paths
857db96d56Sopenharmony_ci  located under the user home directory.
867db96d56Sopenharmony_ci- *posix_venv*: scheme for :mod:`Python virtual environments <venv>` on POSIX
877db96d56Sopenharmony_ci  platforms; by default it is the same as *posix_prefix* .
887db96d56Sopenharmony_ci- *nt*: scheme for NT platforms like Windows.
897db96d56Sopenharmony_ci- *nt_user*: scheme for NT platforms, when the *user* option is used.
907db96d56Sopenharmony_ci- *nt_venv*: scheme for :mod:`Python virtual environments <venv>` on NT
917db96d56Sopenharmony_ci  platforms; by default it is the same as *nt* .
927db96d56Sopenharmony_ci- *venv*: a scheme with values from ether *posix_venv* or *nt_venv* depending
937db96d56Sopenharmony_ci  on the platform Python runs on
947db96d56Sopenharmony_ci- *osx_framework_user*: scheme for macOS, when the *user* option is used.
957db96d56Sopenharmony_ci
967db96d56Sopenharmony_ciEach scheme is itself composed of a series of paths and each path has a unique
977db96d56Sopenharmony_ciidentifier.  Python currently uses eight paths:
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci- *stdlib*: directory containing the standard Python library files that are not
1007db96d56Sopenharmony_ci  platform-specific.
1017db96d56Sopenharmony_ci- *platstdlib*: directory containing the standard Python library files that are
1027db96d56Sopenharmony_ci  platform-specific.
1037db96d56Sopenharmony_ci- *platlib*: directory for site-specific, platform-specific files.
1047db96d56Sopenharmony_ci- *purelib*: directory for site-specific, non-platform-specific files.
1057db96d56Sopenharmony_ci- *include*: directory for non-platform-specific header files for
1067db96d56Sopenharmony_ci  the Python C-API.
1077db96d56Sopenharmony_ci- *platinclude*: directory for platform-specific header files for
1087db96d56Sopenharmony_ci  the Python C-API.
1097db96d56Sopenharmony_ci- *scripts*: directory for script files.
1107db96d56Sopenharmony_ci- *data*: directory for data files.
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci:mod:`sysconfig` provides some functions to determine these paths.
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci.. function:: get_scheme_names()
1157db96d56Sopenharmony_ci
1167db96d56Sopenharmony_ci   Return a tuple containing all schemes currently supported in
1177db96d56Sopenharmony_ci   :mod:`sysconfig`.
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci.. function:: get_default_scheme()
1217db96d56Sopenharmony_ci
1227db96d56Sopenharmony_ci   Return the default scheme name for the current platform.
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci   .. versionadded:: 3.10
1257db96d56Sopenharmony_ci      This function was previously named ``_get_default_scheme()`` and
1267db96d56Sopenharmony_ci      considered an implementation detail.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1297db96d56Sopenharmony_ci      When Python runs from a virtual environment,
1307db96d56Sopenharmony_ci      the *venv* scheme is returned.
1317db96d56Sopenharmony_ci
1327db96d56Sopenharmony_ci.. function:: get_preferred_scheme(key)
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci   Return a preferred scheme name for an installation layout specified by *key*.
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci   *key* must be either ``"prefix"``, ``"home"``, or ``"user"``.
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci   The return value is a scheme name listed in :func:`get_scheme_names`. It
1397db96d56Sopenharmony_ci   can be passed to :mod:`sysconfig` functions that take a *scheme* argument,
1407db96d56Sopenharmony_ci   such as :func:`get_paths`.
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci   .. versionadded:: 3.10
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci   .. versionchanged:: 3.11
1457db96d56Sopenharmony_ci      When Python runs from a virtual environment and ``key="prefix"``,
1467db96d56Sopenharmony_ci      the *venv* scheme is returned.
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci.. function:: _get_preferred_schemes()
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci   Return a dict containing preferred scheme names on the current platform.
1527db96d56Sopenharmony_ci   Python implementers and redistributors may add their preferred schemes to
1537db96d56Sopenharmony_ci   the ``_INSTALL_SCHEMES`` module-level global value, and modify this function
1547db96d56Sopenharmony_ci   to return those scheme names, to e.g. provide different schemes for system
1557db96d56Sopenharmony_ci   and language package managers to use, so packages installed by either do not
1567db96d56Sopenharmony_ci   mix with those by the other.
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci   End users should not use this function, but :func:`get_default_scheme` and
1597db96d56Sopenharmony_ci   :func:`get_preferred_scheme()` instead.
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci   .. versionadded:: 3.10
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci.. function:: get_path_names()
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   Return a tuple containing all path names currently supported in
1677db96d56Sopenharmony_ci   :mod:`sysconfig`.
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci.. function:: get_path(name, [scheme, [vars, [expand]]])
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   Return an installation path corresponding to the path *name*, from the
1737db96d56Sopenharmony_ci   install scheme named *scheme*.
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   *name* has to be a value from the list returned by :func:`get_path_names`.
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci   :mod:`sysconfig` stores installation paths corresponding to each path name,
1787db96d56Sopenharmony_ci   for each platform, with variables to be expanded.  For instance the *stdlib*
1797db96d56Sopenharmony_ci   path for the *nt* scheme is: ``{base}/Lib``.
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci   :func:`get_path` will use the variables returned by :func:`get_config_vars`
1827db96d56Sopenharmony_ci   to expand the path.  All variables have default values for each platform so
1837db96d56Sopenharmony_ci   one may call this function and get the default value.
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   If *scheme* is provided, it must be a value from the list returned by
1867db96d56Sopenharmony_ci   :func:`get_scheme_names`.  Otherwise, the default scheme for the current
1877db96d56Sopenharmony_ci   platform is used.
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   If *vars* is provided, it must be a dictionary of variables that will update
1907db96d56Sopenharmony_ci   the dictionary return by :func:`get_config_vars`.
1917db96d56Sopenharmony_ci
1927db96d56Sopenharmony_ci   If *expand* is set to ``False``, the path will not be expanded using the
1937db96d56Sopenharmony_ci   variables.
1947db96d56Sopenharmony_ci
1957db96d56Sopenharmony_ci   If *name* is not found, raise a :exc:`KeyError`.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci.. function:: get_paths([scheme, [vars, [expand]]])
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   Return a dictionary containing all installation paths corresponding to an
2017db96d56Sopenharmony_ci   installation scheme. See :func:`get_path` for more information.
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci   If *scheme* is not provided, will use the default scheme for the current
2047db96d56Sopenharmony_ci   platform.
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   If *vars* is provided, it must be a dictionary of variables that will
2077db96d56Sopenharmony_ci   update the dictionary used to expand the paths.
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci   If *expand* is set to false, the paths will not be expanded.
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   If *scheme* is not an existing scheme, :func:`get_paths` will raise a
2127db96d56Sopenharmony_ci   :exc:`KeyError`.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ciOther functions
2167db96d56Sopenharmony_ci---------------
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ci.. function:: get_python_version()
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci   Return the ``MAJOR.MINOR`` Python version number as a string.  Similar to
2217db96d56Sopenharmony_ci   ``'%d.%d' % sys.version_info[:2]``.
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci
2247db96d56Sopenharmony_ci.. function:: get_platform()
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ci   Return a string that identifies the current platform.
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci   This is used mainly to distinguish platform-specific build directories and
2297db96d56Sopenharmony_ci   platform-specific built distributions.  Typically includes the OS name and
2307db96d56Sopenharmony_ci   version and the architecture (as supplied by 'os.uname()'), although the
2317db96d56Sopenharmony_ci   exact information included depends on the OS; e.g., on Linux, the kernel
2327db96d56Sopenharmony_ci   version isn't particularly important.
2337db96d56Sopenharmony_ci
2347db96d56Sopenharmony_ci   Examples of returned values:
2357db96d56Sopenharmony_ci
2367db96d56Sopenharmony_ci   - linux-i586
2377db96d56Sopenharmony_ci   - linux-alpha (?)
2387db96d56Sopenharmony_ci   - solaris-2.6-sun4u
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci   Windows will return one of:
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   - win-amd64 (64bit Windows on AMD64, aka x86_64, Intel64, and EM64T)
2437db96d56Sopenharmony_ci   - win32 (all others - specifically, sys.platform is returned)
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci   macOS can return:
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci   - macosx-10.6-ppc
2487db96d56Sopenharmony_ci   - macosx-10.4-ppc64
2497db96d56Sopenharmony_ci   - macosx-10.3-i386
2507db96d56Sopenharmony_ci   - macosx-10.4-fat
2517db96d56Sopenharmony_ci
2527db96d56Sopenharmony_ci   For other non-POSIX platforms, currently just returns :data:`sys.platform`.
2537db96d56Sopenharmony_ci
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci.. function:: is_python_build()
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ci   Return ``True`` if the running Python interpreter was built from source and
2587db96d56Sopenharmony_ci   is being run from its built location, and not from a location resulting from
2597db96d56Sopenharmony_ci   e.g. running ``make install`` or installing via a binary installer.
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci.. function:: parse_config_h(fp[, vars])
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci   Parse a :file:`config.h`\-style file.
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci   *fp* is a file-like object pointing to the :file:`config.h`\-like file.
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci   A dictionary containing name/value pairs is returned.  If an optional
2697db96d56Sopenharmony_ci   dictionary is passed in as the second argument, it is used instead of a new
2707db96d56Sopenharmony_ci   dictionary, and updated with the values read in the file.
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci.. function:: get_config_h_filename()
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ci   Return the path of :file:`pyconfig.h`.
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci.. function:: get_makefile_filename()
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   Return the path of :file:`Makefile`.
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ciUsing :mod:`sysconfig` as a script
2837db96d56Sopenharmony_ci----------------------------------
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ciYou can use :mod:`sysconfig` as a script with Python's *-m* option:
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci.. code-block:: shell-session
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ci    $ python -m sysconfig
2907db96d56Sopenharmony_ci    Platform: "macosx-10.4-i386"
2917db96d56Sopenharmony_ci    Python version: "3.2"
2927db96d56Sopenharmony_ci    Current installation scheme: "posix_prefix"
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci    Paths:
2957db96d56Sopenharmony_ci            data = "/usr/local"
2967db96d56Sopenharmony_ci            include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
2977db96d56Sopenharmony_ci            platinclude = "."
2987db96d56Sopenharmony_ci            platlib = "/usr/local/lib/python3.2/site-packages"
2997db96d56Sopenharmony_ci            platstdlib = "/usr/local/lib/python3.2"
3007db96d56Sopenharmony_ci            purelib = "/usr/local/lib/python3.2/site-packages"
3017db96d56Sopenharmony_ci            scripts = "/usr/local/bin"
3027db96d56Sopenharmony_ci            stdlib = "/usr/local/lib/python3.2"
3037db96d56Sopenharmony_ci
3047db96d56Sopenharmony_ci    Variables:
3057db96d56Sopenharmony_ci            AC_APPLE_UNIVERSAL_BUILD = "0"
3067db96d56Sopenharmony_ci            AIX_GENUINE_CPLUSPLUS = "0"
3077db96d56Sopenharmony_ci            AR = "ar"
3087db96d56Sopenharmony_ci            ARFLAGS = "rc"
3097db96d56Sopenharmony_ci            ...
3107db96d56Sopenharmony_ci
3117db96d56Sopenharmony_ciThis call will print in the standard output the information returned by
3127db96d56Sopenharmony_ci:func:`get_platform`, :func:`get_python_version`, :func:`get_path` and
3137db96d56Sopenharmony_ci:func:`get_config_vars`.
314