sysconfig
— 提供對 Python 配置資訊的訪問¶
在 3.2 版本中新增。
原始碼: Lib/sysconfig
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 選項時。此方案定義位於特定主目錄字首下的路徑。
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: 一個方案,其值取決於 Python 執行的平臺,來自 posix_venv 或 nt_venv。
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 |
|
主目錄方案¶
“主目錄方案”背後的想法是構建和維護個人 Python 模組儲存。此方案的名稱源自 Unix 上“主目錄”的概念,因為 Unix 使用者將其主目錄的佈局類似於 /usr/
或 /usr/local/
並不少見。此方案可以由任何人使用,無論他們安裝的是哪個作業系統。
posix_home
¶
路徑 |
安裝目錄 |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
字首方案¶
當您希望使用一個 Python 安裝來執行構建/安裝(即,執行安裝指令碼),但將模組安裝到不同 Python 安裝(或看起來像不同 Python 安裝)的第三方模組目錄中時,“字首方案”很有用。如果這聽起來有點不尋常,那確實如此——這就是為什麼使用者和主目錄方案排在前面的原因。但是,至少有兩種已知的情況,字首方案會很有用。
首先,考慮到許多 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()
中列出的方案名稱。它可以傳遞給帶有 *scheme* 引數的sysconfig
函式,例如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
用作指令碼¶
你可以使用 Python 的 -m 選項將 sysconfig
用作指令碼
$ 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()
返回的資訊。