sysconfig — Предоставление доступа к конфигурационной информации Python
Добавлен в версии 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 |
|
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 для выполнения сборки/установки (т.е. для запуска скрипта setup), но устанавливать модули в каталог модулей сторонних разработчиков другой установки Python (или чего-то, что выглядит как другая установка Python). Если это звучит немного необычно, так оно и есть — поэтому схемы пользователя и домашней папки идут раньше. Однако есть по крайней мере два известных случая, когда схема префиксов будет полезна.
Во-первых, многие дистрибутивы 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 |
|
include |
|
platinclude |
|
scripts |
|
data |
|
nt
Путь | Директория установки |
|---|---|
stdlib |
|
platstdlib |
|
platlib |
|
purelib |
|
include |
|
platinclude |
|
scripts |
|
data |
|
Функции пути установки
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() -
Возвращает словарь, содержащий предпочтительные имена схем на текущей платформе. Разработчики 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(), для расширения пути. Все переменные имеют значения по умолчанию для каждой платформы, поэтому вы можете вызвать эту функцию и получить значение по умолчанию.Если 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() -
Возвращает номер версии 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 как скрипт с помощью опции 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().
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/sysconfig.html