sysconfig
— Предоставьте доступ к информации о конфигурации Python¶
Added in version 3.2.
Источник: Lib/sysconfig
Модуль sysconfig
предоставляет доступ к конфигурационной информации Python, такой как список путей установки и конфигурационные переменные, относящиеся к текущей платформе.
Конфигурационные переменные¶
Дистрибутив Python содержит Makefile
и pyconfig.h
заголовочный файл, которые необходимы для сборки как самого двоичного файла Python, так и сторонних расширений на языке C, скомпилированных с помощью setuptools
.
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: схема для POSIX-платформ, таких как Linux или macOS. Эта схема используется по умолчанию при установке Python или компонента.
posix_home: схема для POSIX-платформ, когда используется опция home. Эта схема определяет пути, расположенные под определенным домашним префиксом.
posix_user: схема для платформ POSIX, когда используется опция user. Эта схема определяет пути, расположенные в домашнем каталоге пользователя (
site.USER_BASE
).posix_venv: схема для
Python virtual environments
на POSIX-платформах; по умолчанию она такая же, как posix_prefix.nt: схема для Windows. Это схема по умолчанию, используемая при установке Python или компонента.
nt_user: схема для Windows, когда используется опция user.
nt_venv: схема для
Python virtual environments
в Windows; по умолчанию она такая же, как и 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 |
|
включить |
|
скрипты |
|
данные |
|
nt_user
¶
Путь |
Каталог установки |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
включить |
|
скрипты |
|
данные |
|
osx_framework_user
¶
Путь |
Каталог установки |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
включить |
|
скрипты |
|
данные |
|
Схема дома¶
Идея «домашней схемы» заключается в том, что вы создаете и поддерживаете личный тайник модулей Python. Название этой схемы происходит от идеи «домашней» директории в Unix, поскольку нередко пользователи Unix делают свою домашнюю директорию похожей на /usr/
или /usr/local/
. Эту схему может использовать любой пользователь, независимо от того, для какой операционной системы он устанавливает программу.
posix_home
¶
Путь |
Каталог установки |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
включить |
|
platinclude |
|
скрипты |
|
данные |
|
Префиксная схема¶
Префиксная схема» полезна, когда вы хотите использовать одну установку Python для сборки/установки (то есть для запуска сценария установки), но устанавливать модули в каталог сторонних модулей другой установки Python (или чего-то, что выглядит как другая установка Python). Если это звучит несколько необычно, то так оно и есть - именно поэтому схемы user и home идут впереди. Однако есть как минимум два известных случая, когда схема префиксов может быть полезна.
Во-первых, обратите внимание, что многие дистрибутивы Linux помещают Python в /usr
, а не в более традиционный /usr/local
. Это вполне уместно, поскольку в таких случаях Python является частью «системы», а не локальным дополнением. Однако если вы устанавливаете модули Python из исходных текстов, вы, вероятно, захотите поместить их в /usr/local/lib/python2.X
, а не в /usr/lib/python2.X
.
Другая возможность - сетевая файловая система, в которой имя, используемое для записи в удаленный каталог, отличается от имени, используемого для его чтения: например, интерпретатор Python, доступный как /usr/local/bin/python
, может искать модули в /usr/local/lib/python2.X
, но эти модули должны быть установлены, скажем, в /mnt/@server/export/lib/python2.X
.
posix_prefix
¶
Путь |
Каталог установки |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
включить |
|
platinclude |
|
скрипты |
|
данные |
|
nt
¶
Путь |
Каталог установки |
---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
включить |
|
platinclude |
|
скрипты |
|
данные |
|
Функции пути установки¶
sysconfig
предоставляет некоторые функции для определения этих путей установки.
- sysconfig.get_scheme_names()¶
Возвращает кортеж, содержащий все схемы, поддерживаемые в настоящее время в
sysconfig
.
- sysconfig.get_default_scheme()¶
Возвращает имя схемы по умолчанию для текущей платформы.
Added in version 3.10: Ранее эта функция называлась
_get_default_scheme()
и считалась деталью реализации.Изменено в версии 3.11: Когда Python запускается из виртуальной среды, возвращается схема venv.
- sysconfig.get_preferred_scheme(key)¶
Возвращает предпочтительное имя схемы для схемы установки, указанной key.
Ключ должен быть либо
"prefix"
, либо"home"
, либо"user"
.Возвращаемое значение - это имя схемы, перечисленное в
get_scheme_names()
. Оно может быть передано в функцииsysconfig
, принимающие аргумент схема, напримерget_paths()
.Added in version 3.10.
Изменено в версии 3.11: Когда Python запускается из виртуальной среды и
key="prefix"
, возвращается схема venv.
- sysconfig._get_preferred_schemes()¶
Возвращает dict, содержащий имена предпочтительных схем на текущей платформе. Реализаторы и редистрибьюторы Python могут добавлять свои предпочтительные схемы к глобальному значению
_INSTALL_SCHEMES
на уровне модуля и модифицировать эту функцию для возврата этих имен схем, например, для обеспечения различных схем для системных и языковых менеджеров пакетов, чтобы пакеты, установленные одним из них, не смешивались с пакетами, установленными другим.Конечные пользователи не должны использовать эту функцию, а вместо нее использовать
get_default_scheme()
иget_preferred_scheme()
.Added in version 3.10.
- sysconfig.get_path_names()¶
Возвращает кортеж, содержащий все имена путей, поддерживаемые в настоящее время в
sysconfig
.
- sysconfig.get_path(name[, scheme[, vars[, expand]]])¶
Возвращает путь установки, соответствующий пути name, из схемы установки с именем scheme.
name должно быть значением из списка, возвращаемого
get_path_names()
.sysconfig
хранит пути установки, соответствующие каждому имени пути, для каждой платформы, с переменными для расширения. Например, путь stdlib для схемы nt имеет вид:{base}/Lib
.get_path()
будет использовать переменные, возвращаемыеget_config_vars()
, для расширения пути. Все переменные имеют значения по умолчанию для каждой платформы, поэтому можно вызвать эту функцию и получить значение по умолчанию.Если указана схема, она должна быть значением из списка, возвращенного командой
get_scheme_names()
. В противном случае используется схема по умолчанию для текущей платформы.Если указано vars, то это должен быть словарь переменных, которые будут обновлять словарь, возвращаемый
get_config_vars()
.Если для параметра expand установлено значение
False
, путь не будет расширяться с помощью переменных.Если имя не найдено, вызовите сообщение
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 (64-разрядная Windows на AMD64, также известная как 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
в качестве сценария с помощью опции -m в Python:
$ 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()
.