sysconfig
— 提供对 Python 配置信息的访问权限¶
在 3.2 版本中添加。
源代码: Lib/sysconfig.py
sysconfig
模块提供对 Python 配置信息的访问权限,例如安装路径列表和与当前平台相关的配置变量。
配置变量¶
Python 分发包含 Makefile
和 pyconfig.h
头文件,它们对于构建 Python 二进制文件本身和使用 setuptools
编译的第三方 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 使用的安装方案因平台和安装选项而异。这些方案存储在 sysconfig
中,其唯一标识符基于 os.name
返回的值。包安装程序使用这些方案来确定将文件复制到何处。
Python 目前支持九种方案
posix_prefix:用于 Linux 或 macOS 等 POSIX 平台的方案。这是在安装 Python 或组件时使用的默认方案。
posix_home:用于 POSIX 平台的方案,当使用 home 选项时。此方案定义位于特定 home 前缀下的路径。
posix_user:用于 POSIX 平台的方案,当使用 user 选项时。此方案定义位于用户主目录 (
site.USER_BASE
) 下的路径。posix_venv:用于 POSIX 平台上的
Python 虚拟 环境
的方案;默认情况下,它与 posix_prefix 相同。nt:用于 Windows 的方案。这是在安装 Python 或组件时使用的默认方案。
nt_user:用于 Windows 的方案,当使用 user 选项时。
nt_venv:用于 Windows 上的
Python 虚拟 环境
的方案;默认情况下,它与 nt 相同。venv:一个方案,其值来自 posix_venv 或 nt_venv,具体取决于 Python 运行的平台。
osx_framework_user:用于 macOS 的方案,当使用 user 选项时。
每个方案本身都由一系列路径组成,每个路径都有一个唯一标识符。Python 目前使用八个路径
stdlib:包含与平台无关的标准 Python 库文件的目录。
platstdlib:包含与平台相关的标准 Python 库文件的目录。
platlib:用于特定于站点的、特定于平台的文件的目录。
purelib:用于特定于站点的、与平台无关的文件(“纯”Python)的目录。
include:用于 Python C-API 的与平台无关的头文件的目录。
platinclude:用于 Python C-API 的平台特定头文件的目录。
scripts:用于脚本文件的目录。
data:用于数据文件的目录。
用户方案¶
此方案旨在为没有全局 site-packages 目录的写权限或不想安装到该目录的用户提供最便捷的解决方案。
文件将安装到 site.USER_BASE
的子目录中(以下写为 userbase
)。此方案将纯 Python 模块和扩展模块安装在同一位置(也称为 site.USER_SITE
)。
posix_user
¶
路径 |
安装目录 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
scripts |
|
data |
|
nt_user
¶
路径 |
安装目录 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
scripts |
|
data |
|
osx_framework_user
¶
路径 |
安装目录 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
scripts |
|
data |
|
Home 方案¶
“Home 方案”的理念是构建和维护一个个人 Python 模块存储库。此方案的名称源自 Unix 上的“home”目录,因为 Unix 用户通常会让其 home 目录的布局类似于 /usr/
或 /usr/local/
。任何人都可以使用此方案,无论安装的操作系统如何。
posix_home
¶
路径 |
安装目录 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
Prefix 方案¶
当您希望使用一个 Python 安装来执行构建/安装(即运行安装脚本),但将模块安装到另一个 Python 安装的第三方模块目录(或类似于另一个 Python 安装的东西)中时,“前缀方案”很有用。如果这听起来有点不寻常,那是因为用户和 home 方案在前。但是,至少有两种已知的情况前缀方案会很有用。
首先,请考虑许多 Linux 发行版将 Python 放在 /usr
中,而不是更传统的 /usr/local
中。这是完全合适的,因为在这些情况下,Python 是“系统”的一部分,而不是本地附加组件。但是,如果您从源代码安装 Python 模块,您可能希望它们进入 /usr/local/lib/python2.X
而不是 /usr/lib/python2.X
。
另一种可能性是网络文件系统,其中用于写入远程目录的名称与用于读取它的名称不同:例如,作为 /usr/local/bin/python
访问的 Python 解释器可能会在 /usr/local/lib/python2.X
中搜索模块,但这些模块必须安装到,例如,/mnt/@server/export/lib/python2.X
。
posix_prefix
¶
路径 |
安装目录 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
nt
¶
路径 |
安装目录 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
安装路径函数¶
sysconfig
提供了一些函数来确定这些安装路径。
- sysconfig.get_default_scheme()¶
返回当前平台的默认方案名称。
在 3.10 版中添加: 此函数以前名为
_get_default_scheme()
,并被认为是实现细节。3.11 版本中已更改: 当 Python 从虚拟环境中运行时,将返回 venv 方案。
- sysconfig.get_preferred_scheme(key)¶
为 key 指定的安装布局返回首选方案名称。
key 必须是
"prefix"
、"home"
或"user"
。返回值是
get_scheme_names()
中列出的方案名称。它可以传递给sysconfig
函数,这些函数采用 scheme 参数,例如get_paths()
。在 3.10 版本中添加。
3.11 版本中已更改: 当 Python 从虚拟环境中运行且
key="prefix"
时,将返回 venv 方案。
- sysconfig._get_preferred_schemes()¶
返回一个字典,其中包含当前平台上的首选方案名称。Python 实现者和重新分发者可以将他们首选的方案添加到
_INSTALL_SCHEMES
模块级全局值,并修改此函数以返回这些方案名称,例如为系统和语言包管理器提供不同的方案以供使用,以便通过任一方式安装的包不会与通过另一种方式安装的包混合。最终用户不应该使用此函数,而应该使用
get_default_scheme()
和get_preferred_scheme()
。在 3.10 版本中添加。
- 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()¶
如果正在运行的 Python 解释器是从源代码构建的,并且正在从其构建位置运行,而不是从运行
make install
或通过二进制安装程序安装而产生的位置运行,则返回True
。
- 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()
返回的信息。