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

userbase/lib/pythonX.Y

platstdlib

userbase/lib/pythonX.Y

platlib

userbase/lib/pythonX.Y/site-packages

purelib

userbase/lib/pythonX.Y/site-packages

включить

userbase/include/pythonX.Y

скрипты

userbase/bin

данные

userbase

nt_user

Путь

Каталог установки

stdlib

userbase\PythonXY

platstdlib

userbase\PythonXY

platlib

userbase\PythonXY\site-packages

purelib

userbase\PythonXY\site-packages

включить

userbase\PythonXY\Include

скрипты

userbase\PythonXY\Scripts

данные

userbase

osx_framework_user

Путь

Каталог установки

stdlib

userbase/lib/python

platstdlib

userbase/lib/python

platlib

userbase/lib/python/site-packages

purelib

userbase/lib/python/site-packages

включить

userbase/include/pythonX.Y

скрипты

userbase/bin

данные

userbase

Схема дома

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

posix_home

Путь

Каталог установки

stdlib

home/lib/python

platstdlib

home/lib/python

platlib

home/lib/python

purelib

home/lib/python

включить

home/include/python

platinclude

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

Путь

Каталог установки

stdlib

prefix/lib/pythonX.Y

platstdlib

prefix/lib/pythonX.Y

platlib

prefix/lib/pythonX.Y/site-packages

purelib

prefix/lib/pythonX.Y/site-packages

включить

prefix/include/pythonX.Y

platinclude

prefix/include/pythonX.Y

скрипты

prefix/bin

данные

prefix

nt

Путь

Каталог установки

stdlib

prefix\Lib

platstdlib

prefix\Lib

platlib

prefix\Lib\site-packages

purelib

prefix\Lib\site-packages

включить

prefix\Include

platinclude

prefix\Include

скрипты

prefix\Scripts

данные

prefix

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

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