sysconfig — Предоставляет доступ к информации о конфигурации Python

Добавлено в версии 3.2.


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

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

Дистрибутив Python содержит заголовочный файл Makefile и pyconfig.h, необходимые для сборки как самого двоичного файла Python, так и сторонних скомпилированных с использованием distutils расширений C.

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.

Каждый новый компонент, установленный с использованием distutils или системы на основе Distutils, будет следовать той же схеме, чтобы копирует свой файл в нужные места.

В настоящее время Python поддерживает семь схем:

  • posix_prefix: схема для платформ POSIX, например, Linux или Mac OS X. Это схема по умолчанию, используемая при установке Python или компонента.
  • posix_home: схема для платформ POSIX, используемая, когда при установке используется параметр home. Эта схема используется, когда компонент устанавливается через Distutils с определенным домашним префиксом.
  • posix_user: схема для POSIX-платформ, используемая при установке компонента через Distutils и использовании опции user. Эта схема определяет пути, расположенные в домашнем каталоге пользователя.
  • nt: схема для платформ NT, например, Windows.
  • nt_user: схема для платформ NT, когда используется опция user.

Каждая схема сама состоит из ряда путей, и каждый путь имеет уникальный идентификатор. В настоящее время Python использует восемь путей:

  • stdlib: каталог, содержащий стандартные файлы библиотеки Python, не зависящие от платформы.
  • platstdlib: каталог, содержащий стандартные файлы библиотеки Python, зависящие от платформы.
  • platlib: каталог для файлов, специфичных для сайта и платформы.
  • purelib: каталог для файлов, не зависящих от платформы, для конкретных сайтов.
  • include: каталог для файлов заголовков, не зависящих от платформы.
  • platinclude: каталог для файлов заголовков для конкретной платформы.
  • scripts: каталог для файлов скриптов.
  • data: каталог для файлов данных.

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

sysconfig.get_scheme_names()

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

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 не найден, возвращает None.

sysconfig.get_paths([scheme[, vars[, expand]]])

Возвращает словарь, содержащий все пути установки, соответствующие схеме установки. См. get_path() для получения дополнительной информации.

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

Если предоставлен vars, это должен быть словарь переменных, который будет обновлять словарь, используемый для расширения путей.

Если для expand установлено значение ложь, пути не будут расширены.

Если scheme не является существующей схемой, get_paths() вызовет KeyError.

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

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)

Mac OS X может вернуться:

  • 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-11.4-AMD64"
Python version: "3.8"
Current installation scheme: "posix_prefix"

Paths:
        data = "/usr/local"
        include = "/Users/maksim/Dev/svn.python.org/py3k/Include"
        platinclude = "."
        platlib = "/usr/local/lib/python3.8/site-packages"
        platstdlib = "/usr/local/lib/python3.8"
        purelib = "/usr/local/lib/python3.8/site-packages"
        scripts = "/usr/local/bin"
        stdlib = "/usr/local/lib/python3.8"

Variables:
        AC_APPLE_UNIVERSAL_BUILD = "0"
        AIX_GENUINE_CPLUSPLUS = "0"
        AR = "ar"
        ARFLAGS = "rc"
        ...

Данный вызов напечатает в стандартном выводе информацию, возвращенную get_platform(), get_python_version(), get_path() и get_config_vars().