sysconfig
— Предоставьте доступ к информации о конфигурации Python¶
Добавлено в версии 3.2.
Исходный код: Lib/sysconfig.py
Модуль sysconfig
предоставляет доступ к информации о конфигурации Python, такой как список путей установки и переменных конфигурации, относящихся к текущей платформе.
Переменные конфигурации¶
Дистрибутив Python содержит Makefile
и pyconfig.h
заголовочные файлы, которые необходимы для создания как самого двоичного файла Python, так и сторонних расширений C, скомпилированных с использованием distutils
.
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. Эта схема определяет пути, расположенные под определенным префиксом 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, когда используется параметр пользователь.
Каждая схема сама по себе состоит из ряда путей, и каждый путь имеет уникальный идентификатор. В настоящее время в Python используется восемь путей:
stdlib: каталог, содержащий стандартные файлы библиотеки Python, которые не зависят от платформы.
platstdlib: каталог, содержащий стандартные файлы библиотеки Python, зависящие от платформы.
platlib: каталог для файлов, относящихся к конкретному сайту и платформе.
purelib: каталог для файлов, относящихся к конкретному сайту и не относящихся к конкретной платформе («чистый» Python).
include: каталог для заголовочных файлов, не относящихся к конкретной платформе, для C-API Python.
platinclude: каталог для файлов заголовков, зависящих от платформы, для C-API Python.
scripts: каталог для файлов скриптов.
data: каталог для файлов данных.
Пользовательская схема¶
Эта схема разработана как наиболее удобное решение для пользователей, которые не имеют разрешения на запись в глобальный каталог пакетов сайта или не хотят устанавливать в него программное обеспечение.
Файлы будут установлены в подкаталоги site.USER_BASE
(далее записанные как userbase
). Эта схема устанавливает модули чистого Python и модули расширения в одно и то же место (также известное как site.USER_SITE
).
posix_user
¶
Путь |
Установочный каталог |
---|---|
стандартный список |
|
платстдлиб |
|
платлиб |
|
чистый лист |
|
включать |
|
сценарии |
|
данные |
|
nt_user
¶
Путь |
Установочный каталог |
---|---|
стандартный список |
|
платстдлиб |
|
платлиб |
|
чистый лист |
|
включать |
|
сценарии |
|
данные |
|
osx_framework_user
¶
Путь |
Установочный каталог |
---|---|
стандартный список |
|
платстдлиб |
|
платлиб |
|
чистый лист |
|
включать |
|
сценарии |
|
данные |
|
Схема дома¶
Идея, лежащая в основе «домашней схемы», заключается в том, что вы создаете и поддерживаете личный запас модулей Python. Название этой схемы происходит от идеи «домашнего» каталога в Unix, поскольку для пользователя Unix нет ничего необычного в том, чтобы сделать свой домашний каталог похожим на /usr/
или /usr/local/
. Эта схема может быть использована любым пользователем, независимо от операционной системы, которую он устанавливает.
posix_home
¶
Путь |
Установочный каталог |
---|---|
стандартный список |
|
платстдлиб |
|
платлиб |
|
чистый лист |
|
включать |
|
платина включает |
|
сценарии |
|
данные |
|
Префиксная схема¶
«Префиксная схема» полезна, когда вы хотите использовать одну установку 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
¶
Путь |
Установочный каталог |
---|---|
стандартный список |
|
платстдлиб |
|
платлиб |
|
чистый лист |
|
включать |
|
платина включает |
|
сценарии |
|
данные |
|
nt
¶
Путь |
Установочный каталог |
---|---|
стандартный список |
|
платстдлиб |
|
платлиб |
|
чистый лист |
|
включать |
|
платина включает |
|
сценарии |
|
данные |
|
Функции пути установки¶
sysconfig
предоставляет некоторые функции для определения этих путей установки.
- sysconfig.get_scheme_names()¶
Возвращает кортеж, содержащий все схемы, поддерживаемые в настоящее время в
sysconfig
.
- sysconfig.get_default_scheme()¶
Возвращает имя схемы по умолчанию для текущей платформы.
Добавлено в версии 3.10: Эта функция ранее называлась
_get_default_scheme()
и рассматривалась как деталь реализации.Изменено в версии 3.11: Когда Python запускается из виртуальной среды, возвращается схема venv.
- sysconfig.get_preferred_scheme(key)¶
Возвращает предпочтительное название схемы для компоновки установки, указанной с помощью клавиши *.
ключ должен быть либо
"prefix"
,"home"
,, либо"user"
.Возвращаемое значение - это имя схемы, указанное в
get_scheme_names()
. Оно может быть передано в функцииsysconfig
, которые принимают аргумент scheme, напримерget_paths()
.Добавлено в версии 3.10.
Изменено в версии 3.11: Когда Python запускается из виртуальной среды и
key="prefix"
, возвращается схема venv.
- sysconfig._get_preferred_schemes()¶
Возвращает dict, содержащий предпочтительные имена схем на текущей платформе. Разработчики и распространители Python могут добавлять свои предпочтительные схемы к глобальному значению
_INSTALL_SCHEMES
на уровне модуля и изменять эту функцию, возвращая эти имена схем, например, предоставляя разные схемы для использования системными и языковыми менеджерами пакетов, чтобы пакеты, установленные любым из них, не смешивались с пакетами, установленными пользователем. другой.Конечным пользователям следует использовать не эту функцию, а вместо нее
get_default_scheme()
иget_preferred_scheme()
.Добавлено в версии 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()
.Если схема не указана, будет использоваться схема по умолчанию для текущей платформы.
Если указан параметр 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-альфа (?)
солярис-2.6-sun4u
Windows вернет один из:
win-amd64 (64-разрядная Windows на AMD64, она же x86_64, Intel 64 и EM64T)
win32 (возвращаются все остальные, в частности, sys.platform)
mac OS может вернуться:
macosx-10.6-кпп
macosx-10.4-ppc64
macosx-10.3-i386
macosx-10.4-жирный
Для других платформ, отличных от 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()
.