sysconfig — 提供对 Python 配置信息的访问 — Python 文档

来自菜鸟教程
Python/docs/3.10/library/sysconfig
跳转至:导航、​搜索

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

3.2 版中的新功能。


源代码: :source:`Lib/sysconfig.py`



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

配置变量

Python 发行版包含一个 Makefile 和一个 pyconfig.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++']

安装路径

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

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

Python 目前支持六种方案:

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

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

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

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

sysconfig.get_scheme_names()
返回一个包含 sysconfig 当前支持的所有方案的元组。
sysconfig.get_default_scheme()

返回当前平台的默认方案名称。

在 3.10 版更改: 该函数以前被命名为 _get_default_scheme() 并考虑了一个实现细节。

sysconfig.get_preferred_scheme(key)

返回由 key 指定的安装布局的首选方案名称。

key 必须是 "prefix""home""user"

返回值是 get_scheme_names() 中列出的方案名称。 它可以传递给采用 scheme 参数的 sysconfig 函数,例如 get_paths()

3.10 版中的新功能。

sysconfig._get_preferred_schemes()

返回包含当前平台上首选方案名称的字典。 Python 实现者和再分发者可以将他们的首选方案添加到 _INSTALL_SCHEMES 模块级全局值,并修改此函数以返回这些方案名称,例如 为系统和语言包管理器提供不同的方案以供使用,因此其中一个安装的包不会与另一个安装的包混合。

最终用户不应使用此函数,而应使用 get_default_scheme()get_preferred_scheme()

3.10 版中的新功能。

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,则引发 KeyError

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

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

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

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

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

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


其他功能

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

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

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

返回值示例:

  • linux-i586

  • linux-alpha (?)

  • solaris-2.6-sun4u

Windows 将返回以下之一:

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

  • win32(所有其他人 - 特别是返回 sys.platform)

macOS 可以返回:

  • macosx-10.6-ppc

  • macosx-10.4-ppc64

  • macosx-10.3-i386

  • macosx-10.4-fat

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

sysconfig.is_python_build()
返回 True 如果正在运行的 Python 解释器是从源代码构建的,并且是从它的构建位置运行,而不是从例如导致的位置运行 运行 make install 或通过二进制安装程序安装。
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() 返回的信息]。