Spec-Zone.ru › Python 3.12

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

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

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

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

include

userbase/include/pythonX.Y

scripts

userbase/bin

data

userbase

nt_user

Путь

Директория установки

stdlib

userbase\PythonXY

platstdlib

userbase\PythonXY

platlib

userbase\PythonXY\site-packages

purelib

userbase\PythonXY\site-packages

include

userbase\PythonXY\Include

scripts

userbase\PythonXY\Scripts

data

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

scripts

userbase/bin

data

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

include

home/include/python

platinclude

home/include/python

scripts

home/bin

data

home

Схема префиксов

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

scripts

prefix/bin

data

prefix

nt

Путь

Директория установки

stdlib

prefix\Lib

platstdlib

prefix\Lib

platlib

prefix\Lib\site-packages

purelib

prefix\Lib\site-packages

include

prefix\Include

platinclude

prefix\Include

scripts

prefix\Scripts

data

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)

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

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

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.12/library/sysconfig.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API