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