# `sysconfig` — Provide access to Python’s configuration information

Нове в версії 3.2.

Source code: Lib/sysconfig.py

Модуль `sysconfig` надає доступ до конфігураційної інформації Python, наприклад до списку шляхів інсталяції та змінних конфігурації, що стосуються поточної платформи.

## Конфігураційні змінні

A Python distribution contains a `Makefile` and a `pyconfig.h` header file that are necessary to build both the Python binary itself and third-party C extensions compiled using `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)`.

  Якщо ім’я не знайдено, поверніть `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 uses an installation scheme that differs depending on the platform and on the installation options. These schemes are stored in `sysconfig` under unique identifiers based on the value returned by `os.name`. The schemes are used by package installers to determine where to copy files to.

Python currently supports nine schemes:

- posix_prefix: схема для платформ POSIX, таких як Linux або macOS. Це типова схема, яка використовується, коли встановлено Python або компонент.

- posix_home: scheme for POSIX platforms, when the home option is used. This scheme defines paths located under a specific home prefix.

- posix_user: scheme for POSIX platforms, when the user option is used. This scheme defines paths located under the user’s home directory (`site.USER_BASE`).

- posix_venv: scheme for `Python virtual environments` on POSIX platforms; by default it is the same as posix_prefix.

- nt: scheme for Windows. This is the default scheme used when Python or a component is installed.

- nt_user: scheme for Windows, when the user option is used.

- nt_venv: scheme for `Python virtual environments` on Windows; by default it is the same as nt.

- venv: a scheme with values from either posix_venv or nt_venv depending on the platform Python runs on.

- osx_framework_user: схема для macOS, коли використовується параметр user.

Кожна схема сама по собі складається з серії шляхів, і кожен шлях має унікальний ідентифікатор. Зараз Python використовує вісім шляхів:

- stdlib: каталог, що містить файли стандартної бібліотеки Python, які не залежать від платформи.

- platstdlib: каталог, що містить файли стандартної бібліотеки Python, які залежать від платформи.

- platlib: каталог для файлів, що стосуються сайту та платформи.

- purelib: directory for site-specific, non-platform-specific files („pure“ Python).

- include: directory for non-platform-specific header files for the Python C-API.

- platinclude: directory for platform-specific header files for the Python C-API.

- scripts: каталог для файлів сценаріїв.

- data: каталог для файлів даних.

## User scheme

This scheme is designed to be the most convenient solution for users that don’t have write permission to the global site-packages directory or don’t want to install into it.

Files will be installed into subdirectories of `site.USER_BASE` (written as `userbase` hereafter). This scheme installs pure Python modules and extension modules in the same location (also known as `site.USER_SITE`).

### `posix_user`

Path | Каталог встановлення
--- | ---
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`

Path | Каталог встановлення
--- | ---
stdlib | `userbase\PythonXY`
platstdlib | `userbase\PythonXY`
platlib | `userbase\PythonXY\site-packages`
purelib | `userbase\PythonXY\site-packages`
include | `userbase\PythonXY\Include`
скрипти | `userbase\PythonXY\Сценарії`
дані | `userbase`

### `osx_framework_user`

Path | Каталог встановлення
--- | ---
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 /локальний/`. Цю схему може використовувати будь-хто, незалежно від операційної системи, для якої він встановлюється.

### `posix_home`

Path | Каталог встановлення
--- | ---
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 для виконання побудови/інсталяції (тобто для запуску сценарію інсталяції), але інсталювати модулі в каталог модулів сторонніх розробників іншої інсталяції Python (або щось, що виглядає як інша інсталяція Python). Якщо це звучить трішки незвично, це—тому користувальницька та домашня схеми стоять раніше. Однак є принаймні два відомі випадки, коли префіксна схема буде корисною.

First, consider that many Linux distributions put Python in `/usr`, rather than the more traditional `/usr/local`. This is entirely appropriate, since in those cases Python is part of «the system» rather than a local add-on. However, if you are installing Python modules from source, you probably want them to go in `/usr/local/lib/python2.X` rather than `/usr/lib/python2.X`.

Another possibility is a network filesystem where the name used to write to a remote directory is different from the name used to read it: for example, the Python interpreter accessed as `/usr/local/bin/python` might search for modules in `/usr/local/lib/python2.X`, but those modules would have to be installed to, say, `/mnt/@server/export/lib/python2.X`.

### `posix_prefix`

Path | Каталог встановлення
--- | ---
stdlib | `prefix/lib/pythonX.Y`
platstdlib | `prefix/lib/pythonX.Y`
platlib | `префікс/lib/pythonX.Y/site-packages`
purelib | `префікс/lib/pythonX.Y/site-packages`
include | `prefix/include/pythonX.Y`
platinclude | `prefix/include/pythonX.Y`
скрипти | `prefix/bin`
дані | `prefix`

### `nt`

Path | Каталог встановлення
--- | ---
stdlib | `prefix\Lib`
platstdlib | `prefix\Lib`
platlib | `prefix\Lib\site-packages`
purelib | `prefix\Lib\site-packages`
include | `prefix\Include`
platinclude | `prefix\Include`
скрипти | `prefix\Сценарії`
дані | `prefix`

## Installation path functions

`sysconfig` provides some functions to determine these installation paths.

sysconfig.get_scheme_names()

  Повертає кортеж, що містить усі схеми, які наразі підтримуються в `sysconfig`.

sysconfig.get_default_scheme()

  Повернути назву схеми за замовчуванням для поточної платформи.

  Нове в версії 3.10: Ця функція раніше називалася `_get_default_scheme()` і вважалася деталлю реалізації.

  Змінено в версії 3.11: When Python runs from a virtual environment, the venv scheme is returned.

sysconfig.get_preferred_scheme(key)

  Повертає бажану назву схеми для макета встановлення, визначеного ключом.

  key має бути `"prefix"`, `"home"` або `"user"`.

  Поверненим значенням є назва схеми, указана в `get_scheme_names()`. Його можна передати до функцій `sysconfig`, які приймають аргумент scheme, наприклад `get_paths()`.

  Нове в версії 3.10.

  Змінено в версії 3.11: When Python runs from a virtual environment and `key="prefix"`, the venv scheme is returned.

sysconfig._get_preferred_schemes()

  Повертає dict, що містить бажані назви схем на поточній платформі. Розробники та розповсюджувачі Python можуть додати бажані схеми до глобального значення рівня модуля `_INSTALL_SCHEMES` і змінити цю функцію, щоб повернути ці назви схем, наприклад. забезпечують різні схеми для використання системними та мовними менеджерами пакунків, тому пакунки, встановлені одним із них, не змішуються з пакетами іншого.

  End users should not use this function, but `get_default_scheme()` and `get_preferred_scheme()` instead.

  Нове в версії 3.10.

sysconfig.get_path_names()

  Повертає кортеж, що містить усі назви шляхів, які зараз підтримуються в `sysconfig`.

sysconfig.get_path(name[, scheme[, vars[, expand]]])

  Повертає шлях встановлення, що відповідає шляху ім’я зі схеми встановлення під назвою схема.

  name має бути значенням зі списку, який повертає `get_path_names()`.

  `sysconfig` зберігає шляхи встановлення, що відповідають кожному імені шляху, для кожної платформи, зі змінними, які можна розширити. Наприклад, шлях stdlib для схеми nt такий: `{base}/Lib`.

  `get_path()` використовуватиме змінні, які повертає `get_config_vars()`, щоб розширити шлях. Усі змінні мають значення за замовчуванням для кожної платформи, тому можна викликати цю функцію та отримати значення за замовчуванням.

  Якщо вказано схему, це має бути значення зі списку, який повертає `get_scheme_names()`. В іншому випадку використовується схема за замовчуванням для поточної платформи.

  If vars is provided, it must be a dictionary of variables that will update the dictionary returned by `get_config_vars()`.

  Якщо expand має значення `False`, шлях не буде розгортатися за допомогою змінних.

  Якщо name не знайдено, викликайте `KeyError`.

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

  Повертає словник, що містить усі шляхи встановлення, що відповідають схемі встановлення. Дивіться `get_path()` для отримання додаткової інформації.

  Якщо схема не вказана, використовуватиметься схема за замовчуванням для поточної платформи.

  Якщо надано vars, це має бути словник змінних, який оновлюватиме словник, що використовується для розширення шляхів.

  Якщо expand має значення false, шляхи не розгортатимуться.

  Якщо scheme не є існуючою схемою, `get_paths()` викличе `KeyError`.

## Інші функції

sysconfig.get_python_version()

  Повертає `MAJOR.MINOR` номер версії Python у вигляді рядка. Подібно до `'%d.%d' % sys.version_info[:2]`.

sysconfig.get_platform()

  Повертає рядок, що ідентифікує поточну платформу.

  This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by „os.uname()“), although the exact information included depends on the OS; e.g., on Linux, the kernel version isn’t particularly important.

  Приклади повернених значень:

  - linux-i586

  - linux-alpha (?)

  - solaris-2.6-sun4u

  Windows поверне одне з:

  - win-amd64 (64bit Windows on AMD64, aka x86_64, Intel64, and EM64T)

  - win32 (усі інші - зокрема повертається sys.platform)

  macOS може повертати:

  - macosx-10.6-ppc

  - macosx-10.4-ppc64

  - macosx-10.3-i386

  - macosx-10.4-жир

  Для інших платформ, відмінних від 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()`.