sysconfig-提供对 Python 配置信息的访问

3.2 版中的新Function。

源代码: Lib/sysconfig.py


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

Configuration variables

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

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

请注意,在 Windows 上,它的设置要小得多。

  • sysconfig. get_config_vars(** args *)
    • 不带参数的情况下,返回与当前平台相关的所有配置变量的字典。

使用自变量,返回一个值列表,该值是pass在配置变量字典中查找每个自变量而得到的。

对于每个参数,如果找不到该值,则返回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++']

Installation paths

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

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

Python 当前支持七个方案:

    • posix_prefix *:用于 POSIX 平台(如 Linux 或 Mac OS X)的方案。这是安装 Python 或组件时使用的默认方案。
    • posix_home :安装时使用 home *选项时使用的 POSIX 平台方案。当pass具有特定 home 前缀的 Distutils 安装组件时,将使用此方案。
    • posix_user :用于pass Distutils 安装组件并使用 user *选项的 POSIX 平台方案。该方案定义了位于用户主目录下的路径。
    • nt *:适用于 Windows 等 NT 平台的方案。
    • nt_user :用于 NT 平台的方案,当使用 user *选项时。

每个方案本身都由一系列路径组成,并且每个路径都有唯一的标识符。 Python 当前使用八个路径:

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

sysconfig提供了一些Function来确定这些路径。

  • sysconfig. get_scheme_names ( )

    • 返回一个包含sysconfig当前支持的所有方案的 Tuples。
  • sysconfig. get_path_names ( )

    • 返回一个 Tuples,其中包含sysconfig当前支持的所有路径名。
  • sysconfig. get_path(* name * [,* scheme * [,* vars * [,* expand *]]])

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

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

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

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

如果提供了* vars *,则它必须是变量字典,该变量字典将passget_config_vars()更新字典返回。

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

如果未找到* name *,则返回None

  • sysconfig. get_paths([模式 [,* vars * [,展开]]])
    • 返回包含与安装方案相对应的所有安装路径的字典。有关更多信息,请参见get_path()

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

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

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

如果* scheme *不是现有方案,则get_paths()将引发KeyError

Other functions

  • sysconfig. get_python_version ( )

    • 以字符串形式返回MAJOR.MINOR Python 版本号。类似于'%d.%d' % sys.version_info[:2]
  • sysconfig. get_platform ( )

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

这主要用于区分特定于平台的构建目录和特定于平台的构建发行版。通常包括 os 名称和版本以及体系结构(由“ os.uname()”提供),尽管所包含的确切信息取决于 os;例如,在 Linux 上,内核版本并不是特别重要。

返回值的示例:

  • linux-i586

  • linux-alpha (?)

  • solaris-2.6-sun4u

Windows 将返回以下之一:

  • win-amd64(AMD64,aka x86_64,Intel64 和 EM64T 上的 64 位 Windows)

  • win32(所有其他语言,特别是 sys.platform 被返回)

Mac OS X 可以返回:

  • macosx-10.6-ppc

  • macosx-10.4-ppc64

  • macosx-10.3-i386

  • macosx-10.4-fat

对于其他非 POSIX 平台,当前仅返回sys.platform

  • sysconfig. is_python_build ( )

    • 如果正在运行的 Python 解释程序是从源代码构建的,并且正在从其构建位置运行,而不是从例如运行make install或pass二进制安装程序进行安装。
  • sysconfig. parse_config_h(* fp * [,* vars *])

    • 解析config.h样式的文件。
  • fp *是指向config.h的文件的类似文件的对象。

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

  • sysconfig. get_config_h_filename ( )

    • 返回pyconfig.h的路径。
  • sysconfig. get_makefile_filename ( )

    • 返回Makefile的路径。

使用 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"
        ...

该调用将在标准输出中打印get_platform()get_python_version()get_path()get_config_vars()返回的信息。