访问Python的配置信息

可以通过sysconfig模块访问Python安装的配置信息。例如,安装路径列表和特定于安装平台的配置变量。

sysconfig模块提供以下功能来访问配置变量

sysconfig.get_config_vars()

不带参数的情况下,此函数返回与当前平台相关的所有配置变量的字典。

>>> import sysconfig
>>> sysconfig.get_config_vars()
{'prefix': 'E:\\python37', 'exec_prefix': 'E:\\python37', 'py_version': '3.7.2', 'py_version_short':
'3.7', 'py_version_nodot': '37', 'installed_base': 'E:\\python37', 'base': 'E:\\python37',
'installed_platbase': 'E:\\python37', 'platbase': 'E:\\python37', 'projectbase': 'E:\\python37',
'abiflags': '', 'LIBDEST': 'E:\\python37\\Lib', 'BINLIBDEST': 'E:\\python37\\Lib', 'INCLUDEPY':
'E:\\python37\\Include', 'EXT_SUFFIX': '.pyd', 'EXE': '.exe', 'VERSION': '37', 'BINDIR':
'E:\\python37', 'SO': '.pyd', 'userbase': 'C:\\Users\\acer\\AppData\\Roaming\\Python', 'srcdir':
'E:\\python37'}

带有参数,返回特定键的值列表。对于每个参数,如果找不到该值,则返回None。

>>> sysconfig.get_config_vars('base','EXE')
['E:\\python37', '.exe']

sysconfig.get_config_var()

此函数返回单个变量名称的值。这等效于get_config_vars()。get(name)。如果找不到名称,则该函数返回None。

>>> sysconfig.get_config_var('VERSION')
'37'
>>> sysconfig.get_config_var('srcdir')
'E:\\python37'

Python使用的安装方案因平台和安装选项而异。当前支持以下方案:

posix_prefix适用于Linux或Mac OS X等Posix平台的方案。
posix_home安装时使用home选件时使用的Posix平台的配置方案。
posix_user通过Distutils安装组件并使用user选项时使用的Posix平台的配置方案。
ntWindows等NT平台的方案。
nt_userNT平台的配置方案,当使用用户选项时

get_path_names()

此函数返回一个元组,其中包含sysconfig当前支持的所有路径名。

>>> sysconfig.get_path_names()
('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', 'scripts', 'data')

每个方案由具有唯一标识符的各种路径组成。路径名称如下:

标准库包含非平台特定标准Python库文件的目录。
平台库目录,其中包含特定于平台的标准Python库文件。
平台库特定于站点,特定于平台的文件的目录。
纯库特定于站点的,非特定于平台的文件的目录。
包括非平台专用头文件的目录。
platinclude平台专用头文件的目录。
剧本脚本文件的目录。
数据数据文件的目录。

get_path()

此函数从名为scheme的安装方案中返回与该路径名相对应的安装路径。

>>> sysconfig.get_path('include')
'E:\\python37\\Include'


>>> sysconfig.get_platform()
'win-amd64'

get_python_version()

此函数以字符串形式返回MAJOR.MINOR Python版本号。

get_platform()

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

配置变量及其值也可以使用带有–m选项的sysconfig模块来访问。

E:\python37>python -m sysconfig
Platform: "win-amd64"
Python version: "3.7"
Current installation scheme: "nt"
Paths:
   data = "E:\python37"
   include = "E:\python37\Include"
   platinclude = "E:\python37\Include"
   platlib = "E:\python37\Lib\site-packages"
   platstdlib = "E:\python37\Lib"
   purelib = "E:\python37\Lib\site-packages"
   scripts = "E:\python37\Scripts"
   stdlib = "E:\python37\Lib"
Variables:
   BINDIR = "E:\python37"
   BINLIBDEST = "E:\python37\Lib"
   EXE = ".exe"
   EXT_SUFFIX = ".pyd"
   INCLUDEPY = "E:\python37\Include"
   LIBDEST = "E:\python37\Lib"
   SO = ".pyd"
   VERSION = "37"
   abiflags = ""
   base = "E:\python37"
   exec_prefix = "E:\python37"
   installed_base = "E:\python37"
   installed_platbase = "E:\python37"
   platbase = "E:\python37"
   prefix = "E:\python37"
   projectbase = "E:\python37"
   py_version = "3.7.2"
   py_version_nodot = "37"
   py_version_short = "3.7"
   srcdir = "E:\python37"
   userbase = "C:\Users\acer\AppData\Roaming\Python"