Документация Python неофициальный перевод
Содержание страницы

sysconfig – Предоставляет доступ к конфигурационной информации Pythonsysconfig – Provide access to Python’s configuration information

Новое в версии 3.2.

Исходный код: Lib/sysconfig.py


Модуль sysconfig предоставляет доступ к конфигурационной информации Python, например к списку путей установки и переменным конфигурации, актуальным для текущей платформы.

Переменные конфигурацииConfiguration variables

Дистрибутив 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++']

Пути установкиInstallation paths

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: каталог для не зависящих от платформы заголовочных файлов C-API Python.

  • platinclude: каталог для зависящих от платформы заголовочных файлов C-API Python.

  • scripts: каталог для файлов скриптов.

  • data: каталог для файлов данных.

Пользовательская схемаUser scheme

Эта схема предназначена как наиболее удобное решение для пользователей, у которых нет прав на запись в глобальный каталог 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

include

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

include

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

include

userbase/include/pythonX.Y

сценарии

userbase/bin

данные

userbase

Домашняя схемаHome scheme

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

posix_home

Путь

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

stdlib

home/lib/python

platstdlib

home/lib/python

platlib

home/lib/python

purelib

home/lib/python

include

home/include/python

platinclude

home/include/python

сценарии

home/bin

данные

home

Префиксная схемаPrefix scheme

Префиксная схема полезна, если вы хотите использовать одну установку 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

prefix/lib/pythonX.Y

platstdlib

prefix/lib/pythonX.Y

platlib

prefix/lib/pythonX.Y/site-packages

purelib

prefix/lib/pythonX.Y/site-packages

include

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

include

prefix\Include

platinclude

prefix\Include

сценарии

prefix\Scripts

данные

prefix

Функции путей установкиInstallation path functions

sysconfig предоставляет несколько функций для определения этих путей установки.

sysconfig.get_scheme_names()

Возвращает кортеж со всеми схемами, которые в настоящее время поддерживаются в sysconfig.

sysconfig.get_default_scheme()

Возвращает имя схемы по умолчанию для текущей платформы.

Новое в версии 3.10: Ранее эта функция называлась _get_default_scheme() и считалась деталью реализации.

Изменено в версии 3.11: Если Python запускается из виртуального окружения, возвращается схема venv.

sysconfig.get_preferred_scheme(key)

Возвращает предпочтительное имя схемы для раскладки установки, заданной параметром key.

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.

Другие функцииOther functions

sysconfig.get_python_version()

Возвращает номер версии Python MAJOR.MINOR в виде строки. Аналогично '%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 в качестве скриптаUsing sysconfig as a script

Можно использовать 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().