sysconfig — Надає доступ до конфігураційної інформації Python

Added in version 3.2.

Вихідний код: 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 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).

Якщо ім’я не знайдено, поверніть 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()

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

Added in version 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().

Added in version 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 і змінити цю функцію, щоб повернути ці назви схем, наприклад. забезпечують різні схеми для використання системними та мовними менеджерами пакунків, тому пакунки, встановлені одним із них, не змішуються з пакетами іншого.

Кінцеві користувачі не повинні використовувати цю функцію, а get_default_scheme() і get_preferred_scheme() замість неї.

Added in version 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()

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

Це використовується в основному для того, щоб розрізнити каталоги збірок для певної платформи та побудовані дистрибутиви для конкретної платформи. Зазвичай включає назву та версію ОС та архітектуру (як надає „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-жир

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