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

Путь

Установочный каталог

стандартный список

userbase/lib/pythonX.Y

платстдлиб

userbase/lib/pythonX.Y

платлиб

userbase/lib/pythonX.Y/site-packages

чистый лист

userbase/lib/pythonX.Y/site-packages

включать

userbase/include/pythonX.Y

сценарии

userbase/bin

данные

userbase

nt_user

Путь

Установочный каталог

стандартный список

userbase\PythonXY

платстдлиб

userbase\PythonXY

платлиб

userbase\PythonXY\site-packages

чистый лист

userbase\PythonXY\site-packages

включать

userbase\PythonXY\Include

сценарии

userbase\PythonXY\Scripts

данные

userbase

osx_framework_user

Путь

Установочный каталог

стандартный список

userbase/lib/python

платстдлиб

userbase/lib/python

платлиб

userbase/lib/python/site-packages

чистый лист

userbase/lib/python/site-packages

включать

userbase/include/pythonX.Y

сценарии

userbase/bin

данные

userbase

Схема дома

Идея, лежащая в основе «домашней схемы», заключается в том, что вы создаете и поддерживаете личный запас модулей Python. Название этой схемы происходит от идеи «домашнего» каталога в Unix, поскольку для пользователя Unix нет ничего необычного в том, чтобы сделать свой домашний каталог похожим на /usr/ или /usr/local/. Эта схема может быть использована любым пользователем, независимо от операционной системы, которую он устанавливает.

posix_home

Путь

Установочный каталог

стандартный список

home/lib/python

платстдлиб

home/lib/python

платлиб

home/lib/python

чистый лист

home/lib/python

включать

home/include/python

платина включает

home/include/python

сценарии

home/bin

данные

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

Путь

Установочный каталог

стандартный список

prefix/lib/pythonX.Y

платстдлиб

prefix/lib/pythonX.Y

платлиб

prefix/lib/pythonX.Y/site-packages

чистый лист

prefix/lib/pythonX.Y/site-packages

включать

prefix/include/pythonX.Y

платина включает

prefix/include/pythonX.Y

сценарии

prefix/bin

данные

prefix

nt

Путь

Установочный каталог

стандартный список

prefix\Lib

платстдлиб

prefix\Lib

платлиб

prefix\Lib\site-packages

чистый лист

prefix\Lib\site-packages

включать

prefix\Include

платина включает

prefix\Include

сценарии

prefix\Scripts

данные

prefix

Функции пути установки

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().

Вернуться на верх