{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://github.com/python/peps/blob/main/peps/pep-0739/python-build-info-v1.schema.json", "type": "object", "title": "Static description file for the build details of Python installations", "required": [ "schema_version", "platform", "language", "implementation" ], "additionalProperties": false, "properties": { "schema_version": { "type": "string", "description": "Schema version. This is a constant value and MUST be ``1``. Future iterations of this schema MUST update this value.", "const": "1" }, "base_prefix": { "type": "string", "description": "Base prefix of the Python installation.\n\nEither an absolute path, or a relative path to directory where this file is contained.", "examples": [ "/usr", "../.." ] }, "platform": { "type": "string", "description": "System platform string.", "examples": [ "linux-x86_64" ] }, "language": { "type": "object", "description": "Object containing details related to the Python language specification.\n\nIn addition to the required keys, implementations may choose to include extra keys with implementation-specific details.", "required": [ "version" ], "additionalProperties": false, "properties": { "version": { "type": "string", "description": "String representation the Python language version — a version string consisting only of the *major* and *minor* components.", "examples": ["3.13"] } } }, "implementation": { "type": "object", "description": "Object containing details related to Python implementation.\n\nThis section SHOULD be equivalent to :py:data:`sys.implementation`, but only the ``name`` and ``version`` keys are actually required to be present.", "required": [ "name", "version" ], "additionalProperties": true, "properties": { "name": { "type": "string", "description": "Lower-case name of the Python implementation.", "examples": ["cpython", "pypy"] }, "version": { "type": "object", "description": "Object in the format of :py:data:`sys.version_info`, containing the implementation version.", "required": ["major", "minor", "micro", "releaselevel", "serial"], "additionalProperties": false, "examples": [ { "major": 3, "minor": 13, "micro": 1, "releaselevel": "final", "serial": 0 }, { "major": 7, "minor": 3, "micro": 16, "releaselevel": "final", "serial": 0 } ], "properties": { "major": { "type": "number" }, "minor": { "type": "number" }, "micro": { "type": "number" }, "releaselevel": { "type": "string", "enum": ["alpha", "beta", "candidate", "final"] }, "serial": { "type": "number" } } } } }, "interpreter": { "type": "object", "description": "Object containing details Python interpreter.\n\nIf the Python installation does not provide an interpreter, this section will be missing.", "required": [ "path" ], "additionalProperties": false, "properties": { "path": { "type": "string", "description": "The path to the Python interprer. Either an absolute path, or a relative path to the path defined in the ``base`` key.", "examples": [ "/usr/bin/python", "bin/python" ] } } }, "abi": { "type": "object", "description": "Object containing details related to ABI.", "required": [ "flags", "extension_suffix" ], "additionalProperties": false, "properties": { "flags": { "type": "array", "description": "Build configuration flags, used to calculate the extension suffix.\n\nThe flags MUST be defined in the order they appear on the extension suffix.", "additionalProperties": true, "examples": [ ["d", "t"] ] }, "extension_suffix": { "type": "string", "description": "Suffix used for extensions built against the current implementation version.", "examples": [ ".cpython-313-x86_64-linux-gnu.so" ] }, "stable_abi_suffix": { "type": "string", "description": "Suffix used for extensions built against the stable ABI.", "examples": [ ".abi3.so" ] } } }, "suffixes": { "type": "object", "description": "Valid module suffixes grouped by type.", "examples": [ { "source": [".py"], "bytecode": [".pyc"], "optimized_bytecode": [".pyc"], "debug_bytecode": [".pyc"], "extensions": [".cpython-313-x86_64-linux-gnu.so", ".abi3.so", ".so"] } ] }, "libpython": { "type": "object", "description": "Object containing details related to the ``libpython`` library.\n\nIf the Python installation does not provide a ``libpython`` library, this section will be missing.", "additionalProperties": false, "properties": { "dynamic": { "type": "string", "description": "The path to the dynamic ``libpython`` library.\n\nEither an absolute path, or a relative path to the path defined in the ``base`` key.. If the Python installation does not provide a dynamic ``libpython`` library, this entry will be missing.", "examples": [ "/usr/lib/libpython3.13.so.1.0", "lib/libpython3.13.so.1.0" ] }, "static": { "type": "string", "description": "The path to the static ``libpython`` library.\n\nEither an absolute path, or a relative path to the path defined in the ``base`` key.. If the Python installation does not provide a static ``libpython`` library, this entry will be missing.", "examples": [ "/usr/lib/python3.13/config-3.13-x86_64-linux-gnu/libpython3.13.a", "lib/python3.13/config-3.13-x86_64-linux-gnu/libpython3.13.a" ] }, "link_to_libpython": { "type": "boolean", "description": "Should extensions built against a dynamic ``libpython`` link to it?" } } }, "c_api": { "type": "object", "description": "Object containing details related to the Python C API, if available.\n\nIf the Python implementation does not provide a C API, this section will be missing.", "required": [ "headers" ], "additionalProperties": false, "properties": { "headers": { "type": "string", "description": "The path to the C API headers. Either an absolute path, or a relative path to the path defined in the ``base`` key..", "examples": [ "/usr/include/python3.13", "include/python3.13" ] }, "pkgconfig_path": { "type": "string", "description": "The path to the pkg-config definition files. Either an absolute path, or a relative path to the path defined in the ``base`` key..", "examples": [ "/usr/lib/pkgconfig", "lib/pkgconfig" ] } } }, "arbitrary_data": { "type": "object", "description": "Object containing extra arbitrary data.\n\nThis is meant to be used as an escape-hatch, to include any relevant data that is not covered by this specification.", "additionalProperties": true } } }