Skip to main content

29.2. sysconfig —提供对Python的配置信息的访问

3.2 新版功能.

源代码: Lib/sysconfig.py


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

29.2.1. 配置变量

Python分发包含 Makefilepyconfig.h 头文件,这些头文件是构建Python二进制本身和使用 distutils 编译的第三方C扩展所必需的。

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

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

sysconfig.get_config_vars(*args)

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

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

对于每个参数,如果未找到该值,请返回 None

sysconfig.get_config_var(name)

返回单个变量 name 的值。相当于 get_config_vars().get(name)

如果没有找到 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. 安装路径

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

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

Python目前支持七种方案:

  • posix_prefix:用于Posix平台的方案,如Linux或Mac OS X.这是安装Python或组件时使用的默认方案。

  • posix_home:在安装时使用 home 选项时使用的Posix平台方案。当通过具有特定归属前缀的Distutils安装组件时,使用此方案。

  • posix_user:当通过Distutils安装组件并使用 user 选项时使用的Posix平台方案。该方案定义位于用户主目录下的路径。

  • nt:像Windows这样的NT平台的方案。

  • nt_user:当使用 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]]])

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

name 必须是 get_path_names() 返回的列表中的值。

sysconfig 存储与每个平台的每个路径名称相对应的安装路径,具有要扩展的变量。例如,nt 方案的 stdlib 路径是:{base}/Lib

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

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

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

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

如果没有找到 name,返回 None

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

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

如果没有提供 scheme,将使用当前平台的默认方案。

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

如果 expand 设置为false,则不会扩展路径。

如果 scheme 不是现有计划,get_paths() 将提出 KeyError

29.2.3. 其他功能

sysconfig.get_python_version()

MAJOR.MINOR Python版本号作为字符串返回。类似于 '%d.%d' % sys.version_info[:2]

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()

返回 True,如果正在运行的Python解释器是从源代码构建的,并且正在从其构建位置运行,而不是从某个位置运行。运行 make install 或通过二进制安装程序安装。

sysconfig.parse_config_h(fp[, vars])

解析 config.h 样式文件。

fp 是指向 config.h -like文件的类文件对象。

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

sysconfig.get_config_h_filename()

返回 pyconfig.h 的路径。

sysconfig.get_makefile_filename()

返回 Makefile 的路径。

29.2.4. 使用 sysconfig 作为脚本

您可以使用 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() 返回的信息。