sysconfig.md
1> **Источник:** https://python-all.ru/3.10/library/sysconfig.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) – Предоставляет доступ к конфигурационной информации Python89Новое в версии 3.2.1011**Исходный код:** [Lib/sysconfig.py](https://python-all.ru/src/3.10/Lib/sysconfig.py)1213---1415Модуль [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) предоставляет доступ к конфигурационной информации Python, например к списку путей установки и переменным конфигурации, актуальным для текущей платформы.1617## Переменные конфигурации1819Дистрибутив Python содержит файлы `Makefile` и `pyconfig.h`, необходимые для сборки как самого бинарного файла Python, так и сторонних C-расширений, скомпилированных с помощью [`distutils`](https://python-all.ru/3.10/library/distutils.html#module-distutils).2021[`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) помещает все переменные из этих файлов в словарь, к которому можно обратиться с помощью [`get_config_vars()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_config_vars) или [`get_config_var()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_config_var).2223Обратите внимание: в Windows этот набор значительно меньше.2425#### `sysconfig.get_config_vars(*args)`2627Без аргументов возвращает словарь всех переменных конфигурации, актуальных для текущей платформы.2829С аргументами возвращает список значений, полученных в результате поиска каждого аргумента в словаре переменных конфигурации.3031Для каждого аргумента, если значение не найдено, возвращается `None`.3233#### `sysconfig.get_config_var(name)`3435Возвращает значение одной переменной *name*. Эквивалентно `get_config_vars().get(name)`.3637Если *name* не найден, возвращается `None`.3839Пример использования:4041```python42>>> import sysconfig43>>> sysconfig.get_config_var('Py_ENABLE_SHARED')44045>>> sysconfig.get_config_var('LIBDIR')46'/usr/local/lib'47>>> sysconfig.get_config_vars('AR', 'CXX')48['ar', 'g++']49```5051## Пути установки5253Python использует схему установки, которая различается в зависимости от платформы и параметров установки. Эти схемы хранятся в [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) под уникальными идентификаторами, основанными на значении, возвращаемом [`os.name`](https://python-all.ru/3.10/library/os.html#os.name).5455Каждый новый компонент, устанавливаемый с помощью [`distutils`](https://python-all.ru/3.10/library/distutils.html#module-distutils) или системы на основе Distutils, будет следовать той же схеме для копирования своих файлов в нужные места.5657Python в настоящее время поддерживает шесть схем:5859- *posix\_prefix*: схема для POSIX-платформ, таких как Linux или macOS. Это схема по умолчанию, используемая при установке Python или компонента.60- *posix\_home*: схема для платформ POSIX, используемая при указании опции *home* при установке. Эта схема применяется, когда компонент устанавливается через Distutils с определённым префиксом home.61- *posix\_user*: схема для платформ POSIX, используемая при установке компонента через Distutils с опцией *user*. Эта схема определяет пути, расположенные в домашнем каталоге пользователя.62- *nt*: схема для платформ NT, таких как Windows.63- *nt\_user*: схема для платформ NT, когда используется опция *user*.64- *osx\_framework\_user*: схема для macOS, когда используется опция *user*.6566Каждая схема состоит из набора путей, и каждый путь имеет уникальный идентификатор. Python в настоящее время использует восемь путей:6768- *stdlib*: каталог, содержащий файлы стандартной библиотеки Python, которые не зависят от платформы.69- *platstdlib*: каталог, содержащий файлы стандартной библиотеки Python, которые зависят от платформы.70- *platlib*: каталог для специфичных для сайта и платформы файлов.71- *purelib*: каталог для специфичных для сайта, не зависящих от платформы файлов.72- *include*: каталог для не зависящих от платформы заголовочных файлов.73- *platinclude*: каталог для зависящих от платформы заголовочных файлов.74- *scripts*: каталог для файлов скриптов.75- *data*: каталог для файлов данных.7677[`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) предоставляет несколько функций для определения этих путей.7879#### `sysconfig.get_scheme_names()`8081Возвращает кортеж со всеми схемами, которые в настоящее время поддерживаются в [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig).8283#### `sysconfig.get_default_scheme()`8485Возвращает имя схемы по умолчанию для текущей платформы.8687Новое в версии 3.10: Ранее эта функция называлась `_get_default_scheme()` и считалась деталью реализации.8889#### `sysconfig.get_preferred_scheme(key)`9091Возвращает предпочтительное имя схемы для раскладки установки, заданной параметром *key*.9293*key* должен быть `"prefix"`, `"home"` или `"user"`.9495Возвращаемое значение – это имя схемы из списка в [`get_scheme_names()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_scheme_names). Его можно передавать функциям [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig), которые принимают аргумент *scheme*, например [`get_paths()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_paths).9697Новое в версии 3.10.9899#### `sysconfig._get_preferred_schemes()`100101Возвращает словарь с предпочтительными именами схем для текущей платформы. Разработчики Python и распространители могут добавлять свои предпочтительные схемы в глобальное значение уровня модуля `_INSTALL_SCHEMES` и модифицировать эту функцию, чтобы она возвращала эти имена схем, например, чтобы предоставить разные схемы для системных менеджеров пакетов и менеджеров пакетов языков, дабы пакеты, установленные одним, не смешивались с пакетами, установленными другим.102103Конечным пользователям не следует использовать эту функцию; вместо неё нужно применять [`get_default_scheme()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_default_scheme) и [`get_preferred_scheme()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_preferred_scheme).104105Новое в версии 3.10.106107#### `sysconfig.get_path_names()`108109Возвращает кортеж со всеми именами путей, которые в настоящее время поддерживаются в [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig).110111#### `sysconfig.get_path(name[, scheme[, vars[, expand]]])`112113Возвращает путь установки, соответствующий имени пути *name*, из схемы установки с именем *scheme*.114115*name* должно быть значением из списка, возвращаемого [`get_path_names()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_path_names).116117[`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) хранит пути установки, соответствующие каждому имени пути, для каждой платформы, с переменными, подлежащими раскрытию. Например, путь *stdlib* для схемы *nt*: `{base}/Lib`.118119[`get_path()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_path) использует переменные, возвращаемые [`get_config_vars()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_config_vars), для раскрытия пути. Все переменные имеют значения по умолчанию для каждой платформы, поэтому можно вызвать эту функцию и получить значение по умолчанию.120121Если указан *scheme*, это должно быть значение из списка, возвращаемого [`get_scheme_names()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_scheme_names). В противном случае используется схема по умолчанию для текущей платформы.122123Если предоставлен *vars*, это должен быть словарь переменных, который обновит словарь, возвращаемый [`get_config_vars()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_config_vars).124125Если *expand* установлен в `False`, путь не будет раскрыт с использованием переменных.126127Если *name* не найден, возбуждается [`KeyError`](https://python-all.ru/3.10/library/exceptions.html#KeyError).128129#### `sysconfig.get_paths([scheme[, vars[, expand]]])`130131Возвращает словарь, содержащий все пути установки, соответствующие схеме установки. См. [`get_path()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_path) для получения дополнительной информации.132133Если *scheme* не указан, будет использована схема по умолчанию для текущей платформы.134135Если указан *vars*, это должен быть словарь переменных, который дополнит словарь, используемый для раскрытия путей.136137Если *expand* установлен в false, пути не будут расширяться.138139Если *scheme* не является существующей схемой, [`get_paths()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_paths) вызовет исключение [`KeyError`](https://python-all.ru/3.10/library/exceptions.html#KeyError).140141## Другие функции142143#### `sysconfig.get_python_version()`144145Возвращает номер версии Python `MAJOR.MINOR` в виде строки. Аналогично `'%d.%d' % sys.version_info[:2]`.146147#### `sysconfig.get_platform()`148149Возвращает строку, идентифицирующую текущую платформу.150151В основном используется для различения каталогов сборки и собранных дистрибутивов, специфичных для платформы. Обычно содержит имя ОС, версию и архитектуру (как указано в «os.uname()»), хотя точный набор информации зависит от ОС; например, в Linux версия ядра не особенно важна.152153Примеры возвращаемых значений:154155- linux-i586156- linux-alpha (?)157- solaris-2.6-sun4u158159Windows вернёт одно из:160161- win-amd64 (64-разрядная Windows на AMD64, также известная как x86\_64, Intel64 и EM64T)162- win32 (все остальные – фактически возвращается sys.platform)163164macOS может вернуть:165166- macosx-10.6-ppc167- macosx-10.4-ppc64168- macosx-10.3-i386169- macosx-10.4-fat170171Для других платформ, не основанных на POSIX, в настоящее время просто возвращает [`sys.platform`](https://python-all.ru/3.10/library/sys.html#sys.platform).172173#### `sysconfig.is_python_build()`174175Возвращает `True`, если работающий интерпретатор Python был собран из исходного кода и запускается из каталога сборки, а не из местоположения, полученного, например, в результате запуска `make install` или установки через бинарный установщик.176177#### `sysconfig.parse_config_h(fp[, vars])`178179Разобрать файл в стиле `config.h`.180181*fp* – это файлоподобный объект, указывающий на файл, похожий на `config.h`.182183Возвращается словарь, содержащий пары имя/значение. Если в качестве второго аргумента передан необязательный словарь, он используется вместо нового словаря и обновляется значениями, прочитанными из файла.184185#### `sysconfig.get_config_h_filename()`186187Возвращает путь к `pyconfig.h`.188189#### `sysconfig.get_makefile_filename()`190191Возвращает путь к `Makefile`.192193## Использование [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) в качестве скрипта194195Можно использовать [`sysconfig`](https://python-all.ru/3.10/library/sysconfig.html#module-sysconfig) как скрипт с опцией *-m* Python:196197```console198$ python -m sysconfig199Platform: "macosx-10.4-i386"200Python version: "3.2"201Current installation scheme: "posix_prefix"202203Paths:204 data = "/usr/local"205 include = "/Users/tarek/Dev/svn.python.org/py3k/Include"206 platinclude = "."207 platlib = "/usr/local/lib/python3.2/site-packages"208 platstdlib = "/usr/local/lib/python3.2"209 purelib = "/usr/local/lib/python3.2/site-packages"210 scripts = "/usr/local/bin"211 stdlib = "/usr/local/lib/python3.2"212213Variables:214 AC_APPLE_UNIVERSAL_BUILD = "0"215 AIX_GENUINE_CPLUSPLUS = "0"216 AR = "ar"217 ARFLAGS = "rc"218 ...219```220221Этот вызов выведет в стандартный вывод информацию, возвращаемую [`get_platform()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_platform), [`get_python_version()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_python_version), [`get_path()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_path) и [`get_config_vars()`](https://python-all.ru/3.10/library/sysconfig.html#sysconfig.get_config_vars).222