# 29.2. `sysconfig` - 提供对Python配置信息的访问

版本3.2中的新功能。

源代码： Lib / sysconfig.py

`sysconfig`模块提供对Python配置信息的访问，如安装路径列表和与当前平台相关的配置变量。

## 29.2.1. Configuration variables

A Python distribution contains a `Makefile` and a `pyconfig.h` header file that are necessary to build both the Python binary itself and third-party C extensions compiled using `distutils`.

`sysconfig`将这些文件中找到的所有变量放在可以使用`get_config_vars()`或`get_config_var()`访问的字典中。

注意在Windows上，它是一个小得多的集合。

`sysconfig.``get_config_vars`(*args)

  没有参数，返回与当前平台相关的所有配置变量的字典。

  使用参数，返回从查找配置变量字典中的每个参数产生的值的列表。

  对于每个参数，如果未找到该值，则返回`None`。

`sysconfig.``get_config_var`(name)

  返回单个变量名称的值。等同于`get_config_vars().get(name)`。

  如果未找到名称，请返回`None`。

使用示例：

    >>> import sysconfig
    >>> sysconfig.get_config_var('Py_ENABLE_SHARED')
    0
    >>> sysconfig.get_config_var('LIBDIR')
    '/usr/local/lib'
    >>> sysconfig.get_config_vars('AR', 'CXX')
    ['ar', 'g++']

## 29.2.2. Installation paths

Python使用的安装方案因平台和安装选项而异。这些方案存储在基于`os.name`返回值的唯一标识符下的`sysconfig`中。

使用`distutils`或基于Distutils的系统安装的每个新组件都将遵循相同的方案，在正确的位置复制其文件。

Python目前支持七种方案：

- posix_prefix：用于Posix平台（如Linux或Mac OS X）的方案。这是在安装Python或组件时使用的默认方案。
- posix_home：在安装时使用home选项时使用的Posix平台方案。当通过具有特定归属前缀的Distutils安装组件时，使用此方案。
- posix_user：当通过Distutils安装组件并使用用户选项时使用的Posix平台方案。此方案定义位于用户主目录下的路径。
- nt：用于NT平台（如Windows）的方案。
- nt_user：当使用用户选项时，NT平台的方案。

每个方案本身由一系列路径组成，并且每个路径具有唯一的标识符。Python目前使用八个路径：

- stdlib：包含不是平台特定的标准Python库文件的目录。
- platstdlib：包含平台特定的标准Python库文件的目录。
- platlib：特定于站点的平台特定文件的目录。
- purelib：特定于站点的非平台特定文件的目录。
- include：非平台特定头文件的目录。
- platinclude：特定于平台的头文件的目录。
- scripts：脚本文件的目录。
- data：数据文件的目录。

`sysconfig`提供了一些函数来确定这些路径。

`sysconfig.``get_scheme_names`()

  返回包含`sysconfig`中当前支持的所有方案的元组。

`sysconfig.``get_path_names`()

  返回包含当前在`sysconfig`中支持的所有路径名的元组。

`sysconfig.``get_path`(name[, scheme[, vars[, expand]]])

  从名为方案的安装方案中返回与路径名称对应的安装路径。

  名称必须是由`get_path_names()`返回的列表中的值。

  `sysconfig`存储每个平台的每个路径名对应的安装路径，其中包含要展开的变量。对于实例，nt方案的stdlib路径是：`{base}/Lib`。

  `get_path()`将使用`get_config_vars()`返回的变量来展开路径。所有变量具有每个平台的默认值，因此可以调用此函数并获取默认值。

  如果提供scheme，它必须是`get_scheme_names()`返回的列表中的值。否则，将使用当前平台的默认方案。

  如果提供了vars，它必须是一个变量字典，它将更新由`get_config_vars()`返回的字典。

  如果expand设置为`False`，则不会使用变量扩展路径。

  如果未找到名称，请返回`None`。

`sysconfig.``get_paths`([scheme[, vars[, expand]]])

  返回包含与安装方案对应的所有安装路径的字典。有关详细信息，请参阅`get_path()`。

  如果未提供scheme，则将使用当前平台的默认方案。

  如果提供了vars，它必须是将更新用于展开路径的字典的变量字典。

  如果expand设置为False，则不会展开路径。

  如果方案不是现有方案，`get_paths()`将引用`KeyError`。

## 29.2.3. Other functions

`sysconfig.``get_python_version`()

  将`MAJOR.MINOR` Python版本号作为字符串返回。类似于`sys.version[:3]`。

`sysconfig.``get_platform`()

  返回一个标识当前平台的字符串。

  这主要用于区分特定于平台的构建目录和特定于平台的构建分布。通常包括操作系统名称和版本以及体系结构（由`os.uname()`提供），尽管包括的确切信息取决于操作系统；例如对于IRIX架构并不是特别重要（IRIX只能在SGI硬件上运行），但对于Linux，内核版本并不是特别重要。

  返回值的示例：

  - linux-i586
  - linux-alpha（？）
  - solaris-2.6-sun4u
  - irix-5.3
  - irix64-6.2

  Windows将返回以下值之一：

  - win-amd64（64位Windows on AMD64（aka x86_64，Intel64，EM64T等）
  - win-ia64（64位Windows on Itanium）
  - win32（所有其他 - 特别是，sys.platform被返回）

  Mac OS X可以返回：

  - macosx-10.6-ppc
  - macosx-10.4-ppc64
  - macosx-10.3-i386
  - macosx-10.4-脂肪

  对于其他非POSIX平台，目前只返回`sys.platform`。

`sysconfig.``is_python_build`()

  如果当前Python安装是从源代码构建的，则返回`True`。

`sysconfig.``parse_config_h`(fp[, vars])

  解析`config.h`样式文件。

  fp是指向`config.h`类似文件的类文件对象。

  返回包含名称/值对的字典。如果传递一个可选的字典作为第二个参数，它将被使用，而不是一个新的字典，并用文件中读取的值更新。

`sysconfig.``get_config_h_filename`()

  返回`pyconfig.h`的路径。

`sysconfig.``get_makefile_filename`()

  返回`Makefile`的路径。

## 29.2.4. Using `sysconfig` as a script

您可以使用`sysconfig`作为Python的-m选项的脚本：

    $ python -m sysconfig
    Platform: "macosx-10.4-i386"
    Python version: "3.2"
    Current installation scheme: "posix_prefix"

    Paths:
            data = "/usr/local"
            include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
            platinclude = "."
            platlib = "/usr/local/lib/python3.2/site-packages"
            platstdlib = "/usr/local/lib/python3.2"
            purelib = "/usr/local/lib/python3.2/site-packages"
            scripts = "/usr/local/bin"
            stdlib = "/usr/local/lib/python3.2"

    Variables:
            AC_APPLE_UNIVERSAL_BUILD = "0"
            AIX_GENUINE_CPLUSPLUS = "0"
            AR = "ar"
            ARFLAGS = "rc"
            ASDLGEN = "./Parser/asdl_c.py"
            ...

此调用将在标准输出中打印由`get_platform()`，`get_python_version()`，`get_path()`和`get_config_vars()`。