sysconfig.md
1> **Источник:** https://python-all.ru/3.15/library/sysconfig.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `sysconfig` – Предоставляет доступ к конфигурационной информации Python89Добавлено в версии 3.2.1011**Исходный код:** [Lib/sysconfig](https://python-all.ru/3.15/library/sysconfig.html)1213---1415Модуль `sysconfig` предоставляет доступ к конфигурационной информации Python, например к списку путей установки и переменным конфигурации, актуальным для текущей платформы.1617## Переменные конфигурации1819Дистрибутив Python содержит файлы `Makefile` и `pyconfig.h`, необходимые для сборки как самого бинарного файла Python, так и сторонних C-расширений, скомпилированных с помощью `setuptools`.2021`sysconfig` помещает все переменные из этих файлов в словарь, к которому можно обратиться с помощью [`get_config_vars()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_config_vars) или [`get_config_var()`](https://python-all.ru/3.15/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` под уникальными идентификаторами, основанными на значении, возвращаемом [`os.name`](https://python-all.ru/3.15/library/os.html#os.name). Схемы используются установщиками пакетов для определения мест копирования файлов.5455Python в настоящее время поддерживает девять схем:5657- *posix\_prefix*: схема для POSIX-платформ, таких как Linux или macOS. Это схема по умолчанию, используемая при установке Python или компонента.58- *posix\_home*: схема для POSIX-платформ, когда используется опция *home*. Эта схема определяет пути, расположенные в определённом домашнем префиксе.59- *posix\_user*: схема для POSIX-платформ, когда используется опция *user*. Эта схема определяет пути, расположенные в домашнем каталоге пользователя ([`site.USER_BASE`](https://python-all.ru/3.15/library/site.html#site.USER_BASE)).60- *posix\_venv*: схема для [`Python virtual environments`](https://python-all.ru/3.15/library/venv.html#module-venv) на POSIX-платформах; по умолчанию она совпадает с *posix\_prefix*.61- *nt*: схема для Windows. Это схема по умолчанию, используемая при установке Python или компонента.62- *nt\_user*: схема для Windows, когда используется опция *user*.63- *nt\_venv*: схема для [`Python virtual environments`](https://python-all.ru/3.15/library/venv.html#module-venv) на Windows; по умолчанию она совпадает с *nt*.64- *venv*: схема со значениями из *posix\_venv* или *nt\_venv* в зависимости от платформы, на которой выполняется Python.65- *osx\_framework\_user*: схема для macOS, когда используется опция *user*.6667Каждая схема состоит из набора путей, и каждый путь имеет уникальный идентификатор. Python в настоящее время использует восемь путей:6869- *stdlib*: каталог, содержащий файлы стандартной библиотеки Python, которые не зависят от платформы.70- *platstdlib*: каталог, содержащий файлы стандартной библиотеки Python, которые зависят от платформы.71- *platlib*: каталог для специфичных для сайта и платформы файлов.72- *purelib*: каталог для специфичных для сайта, не зависящих от платформы файлов («чистого» Python).73- *include*: каталог для не зависящих от платформы заголовочных файлов C-API Python.74- *platinclude*: каталог для зависящих от платформы заголовочных файлов C-API Python.75- *scripts*: каталог для файлов скриптов.76- *data*: каталог для файлов данных.7778## Пользовательская схема7980Эта схема предназначена как наиболее удобное решение для пользователей, у которых нет прав на запись в глобальный каталог site-packages или которые не хотят устанавливать туда.8182Файлы будут установлены в подкаталоги [`site.USER_BASE`](https://python-all.ru/3.15/library/site.html#site.USER_BASE) (далее обозначается как `userbase`). Эта схема устанавливает чистые модули Python и модули расширений в одно и то же место (также известно как [`site.USER_SITE`](https://python-all.ru/3.15/library/site.html#site.USER_SITE)).8384### `posix_user`8586| Путь | Каталог установки |87| --- | --- |88| *stdlib* | `userbase/lib/pythonX.Y` |89| *platstdlib* | `userbase/lib/pythonX.Y` |90| *platlib* | `userbase/lib/pythonX.Y/site-packages` |91| *purelib* | `userbase/lib/pythonX.Y/site-packages` |92| *include* | `userbase/include/pythonX.Y` |93| *сценарии* | `userbase/bin` |94| *данные* | `userbase` |9596### `nt_user`9798| Путь | Каталог установки |99| --- | --- |100| *stdlib* | `userbase\PythonXY` |101| *platstdlib* | `userbase\PythonXY` |102| *platlib* | `userbase\PythonXY\site-packages` |103| *purelib* | `userbase\PythonXY\site-packages` |104| *include* | `userbase\PythonXY\Include` |105| *сценарии* | `userbase\PythonXY\Scripts` |106| *данные* | `userbase` |107108### `osx_framework_user`109110| Путь | Каталог установки |111| --- | --- |112| *stdlib* | `userbase/lib/python` |113| *platstdlib* | `userbase/lib/python` |114| *platlib* | `userbase/lib/python/site-packages` |115| *purelib* | `userbase/lib/python/site-packages` |116| *include* | `userbase/include/pythonX.Y` |117| *сценарии* | `userbase/bin` |118| *данные* | `userbase` |119120## Домашняя схема121122Идея «домашней схемы» заключается в том, что вы создаёте и поддерживаете личную коллекцию модулей Python. Название этой схемы происходит от идеи «домашнего» каталога в Unix, поскольку пользователи Unix нередко делают свой домашний каталог похожим на `/usr/` или `/usr/local/`. Эту схему может использовать кто угодно, независимо от операционной системы, для которой выполняется установка.123124### `posix_home`125126| Путь | Каталог установки |127| --- | --- |128| *stdlib* | `home/lib/python` |129| *platstdlib* | `home/lib/python` |130| *platlib* | `home/lib/python` |131| *purelib* | `home/lib/python` |132| *include* | `home/include/python` |133| *platinclude* | `home/include/python` |134| *сценарии* | `home/bin` |135| *данные* | `home` |136137## Префиксная схема138139Префиксная схема полезна, если вы хотите использовать одну установку Python для сборки/установки (т.е. для запуска setup-скрипта), но устанавливать модули в каталог сторонних модулей другой установки Python (или того, что выглядит как другая установка Python). Если это звучит немного необычно – так и есть, поэтому сначала идут схемы пользователя и домашняя. Однако есть как минимум два известных случая, где префиксная схема окажется полезной.140141Во-первых, многие дистрибутивы Linux помещают Python в `/usr`, а не в более традиционный `/usr/local`. Это вполне оправдано, поскольку в таких случаях Python является частью «системы», а не локальным дополнением. Однако, если вы устанавливаете модули Python из исходного кода, вы, вероятно, захотите, чтобы они попали в `/usr/local/lib/python2.X`, а не в `/usr/lib/python2.X`.142143Другая возможность – сетевая файловая система, где имя, используемое для записи в удалённый каталог, отличается от имени для чтения: например, интерпретатор Python, доступный как `/usr/local/bin/python`, может искать модули в `/usr/local/lib/python2.X`, но эти модули придётся устанавливать, скажем, в `/mnt/@server/export/lib/python2.X`.144145### `posix_prefix`146147| Путь | Каталог установки |148| --- | --- |149| *stdlib* | `prefix/lib/pythonX.Y` |150| *platstdlib* | `prefix/lib/pythonX.Y` |151| *platlib* | `prefix/lib/pythonX.Y/site-packages` |152| *purelib* | `prefix/lib/pythonX.Y/site-packages` |153| *include* | `prefix/include/pythonX.Y` |154| *platinclude* | `prefix/include/pythonX.Y` |155| *сценарии* | `prefix/bin` |156| *данные* | `prefix` |157158### `nt`159160| Путь | Каталог установки |161| --- | --- |162| *stdlib* | `prefix\Lib` |163| *platstdlib* | `prefix\Lib` |164| *platlib* | `prefix\Lib\site-packages` |165| *purelib* | `prefix\Lib\site-packages` |166| *include* | `prefix\Include` |167| *platinclude* | `prefix\Include` |168| *сценарии* | `prefix\Scripts` |169| *данные* | `prefix` |170171## Функции путей установки172173`sysconfig` предоставляет несколько функций для определения этих путей установки.174175#### `sysconfig.get_scheme_names()`176177Возвращает кортеж со всеми схемами, которые в настоящее время поддерживаются в `sysconfig`.178179#### `sysconfig.get_default_scheme()`180181Возвращает имя схемы по умолчанию для текущей платформы.182183Добавлено в версии 3.10: Ранее эта функция называлась `_get_default_scheme()` и считалась деталью реализации.184185Изменено в версии 3.11: Если Python запускается из виртуального окружения, возвращается схема *venv*.186187#### `sysconfig.get_preferred_scheme(key)`188189Возвращает предпочтительное имя схемы для раскладки установки, заданной параметром *key*.190191*key* должен быть `"prefix"`, `"home"` или `"user"`.192193Возвращаемое значение – это имя схемы из списка в [`get_scheme_names()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_scheme_names). Его можно передавать функциям `sysconfig`, которые принимают аргумент *scheme*, например [`get_paths()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_paths).194195Добавлено в версии 3.10.196197Изменено в версии 3.11: Если Python запускается из виртуального окружения и `key="prefix"`, возвращается схема *venv*.198199#### `sysconfig._get_preferred_schemes()`200201Возвращает словарь с предпочтительными именами схем для текущей платформы. Разработчики Python и распространители могут добавлять свои предпочтительные схемы в глобальное значение уровня модуля `_INSTALL_SCHEMES` и модифицировать эту функцию, чтобы она возвращала эти имена схем, например, чтобы предоставить разные схемы для системных менеджеров пакетов и менеджеров пакетов языков, дабы пакеты, установленные одним, не смешивались с пакетами, установленными другим.202203Конечным пользователям не следует использовать эту функцию; вместо неё нужно применять [`get_default_scheme()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_default_scheme) и [`get_preferred_scheme()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_preferred_scheme).204205Добавлено в версии 3.10.206207#### `sysconfig.get_path_names()`208209Возвращает кортеж со всеми именами путей, которые в настоящее время поддерживаются в `sysconfig`.210211#### `sysconfig.get_path(name[, scheme[, vars[, expand]]])`212213Возвращает путь установки, соответствующий имени пути *name*, из схемы установки с именем *scheme*.214215*name* должно быть значением из списка, возвращаемого [`get_path_names()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_path_names).216217`sysconfig` хранит пути установки, соответствующие каждому имени пути, для каждой платформы, с переменными, подлежащими раскрытию. Например, путь *stdlib* для схемы *nt*: `{base}/Lib`.218219`get_path()` использует переменные, возвращаемые [`get_config_vars()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_config_vars), для раскрытия пути. Все переменные имеют значения по умолчанию для каждой платформы, поэтому можно вызвать эту функцию и получить значение по умолчанию.220221Если указан *scheme*, это должно быть значение из списка, возвращаемого [`get_scheme_names()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_scheme_names). В противном случае используется схема по умолчанию для текущей платформы.222223Если указан *vars*, это должен быть словарь переменных, который дополнит словарь, возвращаемый [`get_config_vars()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_config_vars).224225Если *expand* установлен в `False`, путь не будет раскрыт с использованием переменных.226227Если *name* не найден, возбуждается [`KeyError`](https://python-all.ru/3.15/library/exceptions.html#KeyError).228229#### `sysconfig.get_paths([scheme[, vars[, expand]]])`230231Возвращает словарь, содержащий все пути установки, соответствующие схеме установки. См. [`get_path()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_path) для получения дополнительной информации.232233Если *scheme* не указан, будет использована схема по умолчанию для текущей платформы.234235Если указан *vars*, это должен быть словарь переменных, который дополнит словарь, используемый для раскрытия путей.236237Если *expand* установлен в false, пути не будут расширяться.238239Если *scheme* не является существующей схемой, `get_paths()` вызовет исключение [`KeyError`](https://python-all.ru/3.15/library/exceptions.html#KeyError).240241## Другие функции242243#### `sysconfig.get_python_version()`244245Возвращает номер версии Python `MAJOR.MINOR` в виде строки. Аналогично `'%d.%d' % sys.version_info[:2]`.246247#### `sysconfig.get_platform()`248249Возвращает строку, идентифицирующую текущую платформу.250251В основном используется для различения платформозависимых каталогов сборки и собранных дистрибутивов. Обычно включает имя и версию ОС, а также архитектуру (как предоставлено [`os.uname()`](https://python-all.ru/3.15/library/os.html#os.uname)), хотя точный состав информации зависит от ОС; например, в Linux версия ядра не особенно важна.252253Примеры возвращаемых значений:254255- linux-x86\_64256- linux-aarch64257- solaris-2.6-sun4u258259Windows:260261- win-amd64 (64-разрядная Windows на AMD64, также известная как x86\_64, Intel64 и EM64T)262- win-arm64 (64-разрядная Windows на ARM64, также известная как AArch64)263- win32 (все остальные – фактически возвращается sys.platform)264265ОС на основе POSIX:266267- linux-x86\_64268- macosx-15.5-arm64269- macosx-26.0-universal2 (macOS на Apple Silicon или Intel)270- android-24-arm64\_v8a271272Для других платформ, не основанных на POSIX, в настоящее время просто возвращает [`sys.platform`](https://python-all.ru/3.15/library/sys.html#sys.platform).273274#### `sysconfig.is_python_build()`275276Возвращает `True`, если работающий интерпретатор Python был собран из исходного кода и запускается из каталога сборки, а не из местоположения, полученного, например, в результате запуска `make install` или установки через бинарный установщик.277278#### `sysconfig.parse_config_h(fp[, vars])`279280Разобрать файл в стиле `config.h`.281282*fp* – это файлоподобный объект, указывающий на файл, похожий на `config.h`.283284Возвращается словарь, содержащий пары имя/значение. Если в качестве второго аргумента передан необязательный словарь, он используется вместо нового словаря и обновляется значениями, прочитанными из файла.285286#### `sysconfig.get_config_h_filename()`287288Возвращает путь к `pyconfig.h`.289290#### `sysconfig.get_makefile_filename()`291292Возвращает путь к `Makefile`.293294## Использование командной строки295296Можно использовать `sysconfig` как скрипт с опцией *-m* Python:297298```console299$ python -m sysconfig300Platform: "macosx-10.4-i386"301Python version: "3.2"302Current installation scheme: "posix_prefix"303304Paths:305 data = "/usr/local"306 include = "/Users/tarek/Dev/svn.python.org/py3k/Include"307 platinclude = "."308 platlib = "/usr/local/lib/python3.2/site-packages"309 platstdlib = "/usr/local/lib/python3.2"310 purelib = "/usr/local/lib/python3.2/site-packages"311 scripts = "/usr/local/bin"312 stdlib = "/usr/local/lib/python3.2"313314Variables:315 AC_APPLE_UNIVERSAL_BUILD = "0"316 AIX_GENUINE_CPLUSPLUS = "0"317 AR = "ar"318 ARFLAGS = "rc"319 ...320```321322Этот вызов выведет в стандартный вывод информацию, возвращаемую [`get_platform()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_platform), [`get_python_version()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_python_version), [`get_path()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_path) и [`get_config_vars()`](https://python-all.ru/3.15/library/sysconfig.html#sysconfig.get_config_vars).323