CINXE.COM

PEP 739 – build-details.json 1.0 — a static description file for Python build details | peps.python.org

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="color-scheme" content="light dark"> <title>PEP 739 – build-details.json 1.0 — a static description file for Python build details | peps.python.org</title> <link rel="shortcut icon" href="../_static/py.png"> <link rel="canonical" href="https://peps.python.org/pep-0739/"> <link rel="stylesheet" href="../_static/style.css" type="text/css"> <link rel="stylesheet" href="../_static/mq.css" type="text/css"> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" media="(prefers-color-scheme: light)" id="pyg-light"> <link rel="stylesheet" href="../_static/pygments_dark.css" type="text/css" media="(prefers-color-scheme: dark)" id="pyg-dark"> <link rel="alternate" type="application/rss+xml" title="Latest PEPs" href="https://peps.python.org/peps.rss"> <meta property="og:title" content='PEP 739 – build-details.json 1.0 — a static description file for Python build details | peps.python.org'> <meta property="og:description" content="This PEP introduces build-details.json, a static description file containing build details of Python installations."> <meta property="og:type" content="website"> <meta property="og:url" content="https://peps.python.org/pep-0739/"> <meta property="og:site_name" content="Python Enhancement Proposals (PEPs)"> <meta property="og:image" content="https://peps.python.org/_static/og-image.png"> <meta property="og:image:alt" content="Python PEPs"> <meta property="og:image:width" content="200"> <meta property="og:image:height" content="200"> <meta name="description" content="This PEP introduces build-details.json, a static description file containing build details of Python installations."> <meta name="theme-color" content="#3776ab"> </head> <body> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-sun-half" viewBox="0 0 24 24" pointer-events="all"> <title>Following system colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="9"></circle> <path d="M12 3v18m0-12l4.65-4.65M12 14.3l7.37-7.37M12 19.6l8.85-8.85"></path> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24" pointer-events="all"> <title>Selected dark colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z"></path> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24" pointer-events="all"> <title>Selected light colour scheme</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> </svg> <script> document.documentElement.dataset.colour_scheme = localStorage.getItem("colour_scheme") || "auto" </script> <section id="pep-page-section"> <header> <h1>Python Enhancement Proposals</h1> <ul class="breadcrumbs"> <li><a href="https://www.python.org/" title="The Python Programming Language">Python</a> &raquo; </li> <li><a href="../pep-0000/">PEP Index</a> &raquo; </li> <li>PEP 739</li> </ul> <button id="colour-scheme-cycler" onClick="setColourScheme(nextColourScheme())"> <svg aria-hidden="true" class="colour-scheme-icon-when-auto"><use href="#svg-sun-half"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg aria-hidden="true" class="colour-scheme-icon-when-light"><use href="#svg-sun"></use></svg> <span class="visually-hidden">Toggle light / dark / auto colour theme</span> </button> </header> <article> <section id="pep-content"> <h1 class="page-title">PEP 739 – <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> 1.0 — a static description file for Python build details</h1> <dl class="rfc2822 field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd">Filipe Laíns &lt;lains&#32;&#97;t&#32;python.org&gt;</dd> <dt class="field-even">PEP-Delegate<span class="colon">:</span></dt> <dd class="field-even">Paul Moore &lt;p.f.moore&#32;&#97;t&#32;gmail.com&gt;</dd> <dt class="field-odd">Discussions-To<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="https://discuss.python.org/t/pep-739-static-description-file-for-build-details-of-python-installations/44572">Discourse thread</a></dd> <dt class="field-even">Status<span class="colon">:</span></dt> <dd class="field-even"><abbr title="Normative proposal accepted for implementation">Accepted</abbr></dd> <dt class="field-odd">Type<span class="colon">:</span></dt> <dd class="field-odd"><abbr title="Normative PEP with a new feature for Python, implementation change for CPython or interoperability standard for the ecosystem">Standards Track</abbr></dd> <dt class="field-even">Topic<span class="colon">:</span></dt> <dd class="field-even"><a class="reference external" href="../topic/packaging/">Packaging</a></dd> <dt class="field-odd">Created<span class="colon">:</span></dt> <dd class="field-odd">19-Dec-2023</dd> <dt class="field-even">Python-Version<span class="colon">:</span></dt> <dd class="field-even">3.14</dd> <dt class="field-odd">Resolution<span class="colon">:</span></dt> <dd class="field-odd"><a class="reference external" href="https://discuss.python.org/t/44572/90">Discourse message</a></dd> </dl> <hr class="docutils" /> <section id="contents"> <details><summary>Table of Contents</summary><ul class="simple"> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#rationale">Rationale</a></li> <li><a class="reference internal" href="#scope">Scope</a></li> <li><a class="reference internal" href="#specification">Specification</a></li> <li><a class="reference internal" href="#format">Format</a><ul> <li><a class="reference internal" href="#schema-version"><code class="docutils literal notranslate"><span class="pre">schema_version</span></code></a></li> <li><a class="reference internal" href="#base-prefix"><code class="docutils literal notranslate"><span class="pre">base_prefix</span></code></a></li> <li><a class="reference internal" href="#base-interpreter"><code class="docutils literal notranslate"><span class="pre">base_interpreter</span></code></a></li> <li><a class="reference internal" href="#platform"><code class="docutils literal notranslate"><span class="pre">platform</span></code></a></li> <li><a class="reference internal" href="#language"><code class="docutils literal notranslate"><span class="pre">language</span></code></a><ul> <li><a class="reference internal" href="#language-version"><code class="docutils literal notranslate"><span class="pre">language.version</span></code></a></li> <li><a class="reference internal" href="#language-version-info"><code class="docutils literal notranslate"><span class="pre">language.version_info</span></code></a><ul> <li><a class="reference internal" href="#language-version-info-major"><code class="docutils literal notranslate"><span class="pre">language.version_info.major</span></code></a></li> <li><a class="reference internal" href="#language-version-info-minor"><code class="docutils literal notranslate"><span class="pre">language.version_info.minor</span></code></a></li> <li><a class="reference internal" href="#language-version-info-micro"><code class="docutils literal notranslate"><span class="pre">language.version_info.micro</span></code></a></li> <li><a class="reference internal" href="#language-version-info-releaselevel"><code class="docutils literal notranslate"><span class="pre">language.version_info.releaselevel</span></code></a></li> <li><a class="reference internal" href="#language-version-info-serial"><code class="docutils literal notranslate"><span class="pre">language.version_info.serial</span></code></a></li> </ul> </li> </ul> </li> <li><a class="reference internal" href="#implementation"><code class="docutils literal notranslate"><span class="pre">implementation</span></code></a><ul> <li><a class="reference internal" href="#implementation-name"><code class="docutils literal notranslate"><span class="pre">implementation.name</span></code></a></li> <li><a class="reference internal" href="#implementation-version"><code class="docutils literal notranslate"><span class="pre">implementation.version</span></code></a><ul> <li><a class="reference internal" href="#implementation-version-major"><code class="docutils literal notranslate"><span class="pre">implementation.version.major</span></code></a></li> <li><a class="reference internal" href="#implementation-version-minor"><code class="docutils literal notranslate"><span class="pre">implementation.version.minor</span></code></a></li> <li><a class="reference internal" href="#implementation-version-micro"><code class="docutils literal notranslate"><span class="pre">implementation.version.micro</span></code></a></li> <li><a class="reference internal" href="#implementation-version-releaselevel"><code class="docutils literal notranslate"><span class="pre">implementation.version.releaselevel</span></code></a></li> <li><a class="reference internal" href="#implementation-version-serial"><code class="docutils literal notranslate"><span class="pre">implementation.version.serial</span></code></a></li> </ul> </li> </ul> </li> <li><a class="reference internal" href="#abi"><code class="docutils literal notranslate"><span class="pre">abi</span></code></a><ul> <li><a class="reference internal" href="#abi-flags"><code class="docutils literal notranslate"><span class="pre">abi.flags</span></code></a></li> <li><a class="reference internal" href="#abi-extension-suffix"><code class="docutils literal notranslate"><span class="pre">abi.extension_suffix</span></code></a></li> <li><a class="reference internal" href="#abi-stable-abi-suffix"><code class="docutils literal notranslate"><span class="pre">abi.stable_abi_suffix</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#suffixes"><code class="docutils literal notranslate"><span class="pre">suffixes</span></code></a></li> <li><a class="reference internal" href="#libpython"><code class="docutils literal notranslate"><span class="pre">libpython</span></code></a><ul> <li><a class="reference internal" href="#libpython-dynamic"><code class="docutils literal notranslate"><span class="pre">libpython.dynamic</span></code></a></li> <li><a class="reference internal" href="#libpython-dynamic-stableabi"><code class="docutils literal notranslate"><span class="pre">libpython.dynamic_stableabi</span></code></a></li> <li><a class="reference internal" href="#libpython-static"><code class="docutils literal notranslate"><span class="pre">libpython.static</span></code></a></li> <li><a class="reference internal" href="#libpython-link-extensions"><code class="docutils literal notranslate"><span class="pre">libpython.link_extensions</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#c-api"><code class="docutils literal notranslate"><span class="pre">c_api</span></code></a><ul> <li><a class="reference internal" href="#c-api-headers"><code class="docutils literal notranslate"><span class="pre">c_api.headers</span></code></a></li> <li><a class="reference internal" href="#c-api-pkgconfig-path"><code class="docutils literal notranslate"><span class="pre">c_api.pkgconfig_path</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#arbitrary-data"><code class="docutils literal notranslate"><span class="pre">arbitrary_data</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#example">Example</a></li> <li><a class="reference internal" href="#json-schema">JSON Schema</a></li> <li><a class="reference internal" href="#rejected-ideas">Rejected Ideas</a><ul> <li><a class="reference internal" href="#including-environment-specific-data">Including environment-specific data</a></li> </ul> </li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> </details></section> <section id="abstract"> <h2><a class="toc-backref" href="#abstract" role="doc-backlink">Abstract</a></h2> <p>This PEP introduces <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code>, a static description file containing build details of Python installations.</p> <p>It includes the definition of version 1.0 of the file format, and defines the standard location for this file.</p> </section> <section id="rationale"> <h2><a class="toc-backref" href="#rationale" role="doc-backlink">Rationale</a></h2> <p>When introspecting a Python installation, running code is often undesirable or impossible. Having a static description file makes various build details of the Python installation available without having to run the interpreter.</p> <p>This is helpful for use-cases such as cross-compilation, Python launchers, etc.</p> </section> <section id="scope"> <h2><a class="toc-backref" href="#scope" role="doc-backlink">Scope</a></h2> <p><code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> is an installation-wide file, meaning that it <strong>MUST</strong> only contain information that is constant across all environments of the Python installation.</p> <p>Information specific to a Python environment, such as the <code class="docutils literal notranslate"><span class="pre">site-packages</span></code> path, is outside the scope for this file, and the PEP authors expect that a static environment description file will be introduced via a future PEP.</p> </section> <section id="specification"> <h2><a class="toc-backref" href="#specification" role="doc-backlink">Specification</a></h2> <p>Starting from Python 3.14, a file named <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> following the format specified in this PEP, or a future version, <strong>MUST</strong> be installed in the platform-independent standard library directory (<code class="docutils literal notranslate"><span class="pre">stdlib</span></code>, eg. <code class="docutils literal notranslate"><span class="pre">/usr/lib/python3.14/build-details.json</span></code>), <strong>UNLESS</strong> unfeasible due to technical limitations.</p> <div class="admonition attention"> <p class="admonition-title">Attention</p> <p>In addition to the standard location specified by this PEP, the <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> file <strong>MAY</strong> also be installed into <strong>additional</strong> locations, and under a different name. Notwithstanding, the file <strong>SHOULD</strong> still be available at the standard location.</p> <p>In actuality, the PEP authors expect future PEPs to define additional install locations with better discoverability.</p> </div> </section> <section id="format"> <h2><a class="toc-backref" href="#format" role="doc-backlink">Format</a></h2> <p>The format specification is defined by the JSON Schema definition provided below, which is rendered in an human-readable format here.</p> <table class="docutils align-default" id="spec-start"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td><code class="docutils literal notranslate"><span class="pre">$schema</span></code></td> <td><a class="reference external" href="https://json-schema.org/draft/2020-12/schema">https://json-schema.org/draft/2020-12/schema</a></td> </tr> <tr class="row-even"><td><code class="docutils literal notranslate"><span class="pre">$id</span></code></td> <td><a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0739/python-build-info-v1.0.schema.json">https://github.com/python/peps/blob/main/peps/pep-0739/python-build-info-v1.0.schema.json</a></td> </tr> <tr class="row-odd"><td>Title</td> <td>build-details.json — a static description file with build details of Python installations</td> </tr> <tr class="row-even"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-odd"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="schema-version"> <h3><a class="toc-backref" href="#schema-version" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">schema_version</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code> (constant — <code class="docutils literal notranslate"><span class="pre">1.0</span></code>)</td> </tr> <tr class="row-even"><td>Description</td> <td>Schema version.<p>This is a string following the format <code class="docutils literal notranslate"><span class="pre">&lt;MAJOR&gt;.&lt;MINOR&gt;</span></code>, where <code class="docutils literal notranslate"><span class="pre">&lt;MAJOR&gt;</span></code> and <code class="docutils literal notranslate"><span class="pre">&lt;MINOR&gt;</span></code> are unpadded numbers and represent the <strong>major</strong> and <strong>minor</strong> components of the version. Versions may be arithmetically compared by interpreting the version string as a decimal number.</p> <p>For this specification version, this value is constant and <strong>MUST</strong> be <code class="docutils literal notranslate"><span class="pre">1.0</span></code>.</p> <p>Future versions of this schema <strong>MUST</strong> use a higher version number. Future versions of this schema <strong>MUST NOT</strong> use the same <strong>major</strong> version component as other schema version unless its specification is deemed backwards-compatible with them — it can’t change, or extend, any parts of the current specification in such a way as the semantics of the interpreted data differ, or that data valid under the new specification is invalid under the older specification, with the exception of additional properties (errors caused by <code class="docutils literal notranslate"><span class="pre">additionalProperties</span></code>).</p> </td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="base-prefix"> <h3><a class="toc-backref" href="#base-prefix" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">base_prefix</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Base prefix of the Python installation.<p>Either an absolute path, or a path relative to directory where this file is contained.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><code class="docutils literal notranslate"><span class="pre">/usr</span></code>, <code class="docutils literal notranslate"><span class="pre">../..</span></code>, etc.</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="base-interpreter"> <h3><a class="toc-backref" href="#base-interpreter" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">base_interpreter</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>The path to the Python interpreter of the base installation.<p>Either an absolute path, or a path relative to <code class="docutils literal notranslate"><span class="pre">base_prefix</span></code>.</p> <p>This field <strong>MUST</strong> be present if the installation provides an interpreter executable.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/usr/bin/python</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">bin/python</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> <section id="platform"> <h3><a class="toc-backref" href="#platform" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">platform</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>System platform string.<p>This field <strong>SHOULD</strong> be equivalent to <code class="docutils literal notranslate"><span class="pre">sysconfig.get_platform()</span></code>.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">linux-x86_64</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="language"> <h3><a class="toc-backref" href="#language" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object containing details related to the Python language specification.</td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>True</strong></td> </tr> <tr class="row-even"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="language-version"> <h4><a class="toc-backref" href="#language-version" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>String representation the Python language version — a version string consisting only of the <em>major</em> and <em>minor</em> components.<p>This field <strong>SHOULD</strong> be equivalent to <code class="docutils literal notranslate"><span class="pre">sysconfig.get_python_version()</span></code>.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><code class="docutils literal notranslate"><span class="pre">3.14</span></code>, etc.</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="language-version-info"> <h4><a class="toc-backref" href="#language-version-info" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version_info</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object in the format of <a class="reference external" href="https://docs.python.org/3/library/sys.html#sys.version_info" title="(in Python v3.13)"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.version_info</span></code></a>.<p>This section <strong>SHOULD</strong> be equivalent to <a class="reference external" href="https://docs.python.org/3/library/sys.html#sys.version_info" title="(in Python v3.13)"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.version_info</span></code></a>.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">{'major':</span> <span class="pre">3,</span> <span class="pre">'minor':</span> <span class="pre">14,</span> <span class="pre">'micro':</span> <span class="pre">1,</span> <span class="pre">'releaselevel':</span> <span class="pre">'final',</span> <span class="pre">'serial':</span> <span class="pre">0}</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> <tr class="row-odd"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="language-version-info-major"> <h5><a class="toc-backref" href="#language-version-info-major" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version_info.major</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="language-version-info-minor"> <h5><a class="toc-backref" href="#language-version-info-minor" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version_info.minor</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="language-version-info-micro"> <h5><a class="toc-backref" href="#language-version-info-micro" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version_info.micro</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="language-version-info-releaselevel"> <h5><a class="toc-backref" href="#language-version-info-releaselevel" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version_info.releaselevel</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code> (enum — <code class="docutils literal notranslate"><span class="pre">alpha</span></code>, <code class="docutils literal notranslate"><span class="pre">beta</span></code>, <code class="docutils literal notranslate"><span class="pre">candidate</span></code>, <code class="docutils literal notranslate"><span class="pre">final</span></code>)</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="language-version-info-serial"> <h5><a class="toc-backref" href="#language-version-info-serial" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">language.version_info.serial</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> </section> </section> <section id="implementation"> <h3><a class="toc-backref" href="#implementation" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object containing details related to the Python implementation.<p>This section <strong>SHOULD</strong> be equivalent to <a class="reference external" href="https://docs.python.org/3/library/sys.html#sys.implementation" title="(in Python v3.13)"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.implementation</span></code></a>. It follows the specification defined in <a class="pep reference internal" href="../pep-0421/" title="PEP 421 – Adding sys.implementation">PEP 421</a>, meaning that in addition to the required keys, implementation-specific keys can also exist, but must be prefixed with an underscore.</p> </td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>True</strong></td> </tr> <tr class="row-even"><td>Additional properties</td> <td><strong>Allowed</strong></td> </tr> </tbody> </table> <section id="implementation-name"> <h4><a class="toc-backref" href="#implementation-name" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.name</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Lower-case name of the Python implementation.</td> </tr> <tr class="row-odd"><td>Examples</td> <td><code class="docutils literal notranslate"><span class="pre">cpython</span></code>, <code class="docutils literal notranslate"><span class="pre">pypy</span></code>, etc.</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="implementation-version"> <h4><a class="toc-backref" href="#implementation-version" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.version</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object in the format of <a class="reference external" href="https://docs.python.org/3/library/sys.html#sys.version_info" title="(in Python v3.13)"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.version_info</span></code></a>, containing the implementation version.</td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">{'major':</span> <span class="pre">3,</span> <span class="pre">'minor':</span> <span class="pre">14,</span> <span class="pre">'micro':</span> <span class="pre">1,</span> <span class="pre">'releaselevel':</span> <span class="pre">'final',</span> <span class="pre">'serial':</span> <span class="pre">0}</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">{'major':</span> <span class="pre">7,</span> <span class="pre">'minor':</span> <span class="pre">3,</span> <span class="pre">'micro':</span> <span class="pre">16,</span> <span class="pre">'releaselevel':</span> <span class="pre">'final',</span> <span class="pre">'serial':</span> <span class="pre">0}</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> <tr class="row-odd"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="implementation-version-major"> <h5><a class="toc-backref" href="#implementation-version-major" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.version.major</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="implementation-version-minor"> <h5><a class="toc-backref" href="#implementation-version-minor" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.version.minor</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="implementation-version-micro"> <h5><a class="toc-backref" href="#implementation-version-micro" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.version.micro</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="implementation-version-releaselevel"> <h5><a class="toc-backref" href="#implementation-version-releaselevel" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.version.releaselevel</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code> (enum — <code class="docutils literal notranslate"><span class="pre">alpha</span></code>, <code class="docutils literal notranslate"><span class="pre">beta</span></code>, <code class="docutils literal notranslate"><span class="pre">candidate</span></code>, <code class="docutils literal notranslate"><span class="pre">final</span></code>)</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="implementation-version-serial"> <h5><a class="toc-backref" href="#implementation-version-serial" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">implementation.version.serial</span></code></a></h5> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">number</span></code></td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> </section> </section> <section id="abi"> <h3><a class="toc-backref" href="#abi" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">abi</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object containing details related to ABI.</td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>False</strong></td> </tr> <tr class="row-even"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="abi-flags"> <h4><a class="toc-backref" href="#abi-flags" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">abi.flags</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">array</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Build configuration flags, used to calculate the extension suffix.<p>The flags <strong>MUST</strong> be defined in the order they appear on the extension suffix.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><code class="docutils literal notranslate"><span class="pre">['t',</span> <span class="pre">'d']</span></code>, etc.</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="abi-extension-suffix"> <h4><a class="toc-backref" href="#abi-extension-suffix" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">abi.extension_suffix</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Suffix used for extensions built against the current implementation version.<p>This field <strong>MUST</strong> be present if the Python implementation supports extensions, otherwise this entry will be missing.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">.cpython-314-x86_64-linux-gnu.so</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> <section id="abi-stable-abi-suffix"> <h4><a class="toc-backref" href="#abi-stable-abi-suffix" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">abi.stable_abi_suffix</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Suffix used for extensions built against the <a class="reference external" href="https://docs.python.org/3/c-api/stable.html#stable-abi">stable ABI</a>.<p>This field <strong>MUST</strong> be present if the Python implementation has a stable ABI extension suffix, otherwise this entry will be missing.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><code class="docutils literal notranslate"><span class="pre">.abi3.so</span></code>, etc.</td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> </section> <section id="suffixes"> <h3><a class="toc-backref" href="#suffixes" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">suffixes</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Valid module suffixes grouped by type.<p>This section <strong>MUST</strong> be present if the Python installation supports importing external files, and it <strong>SHOULD</strong> be equivalent to the <code class="docutils literal notranslate"><span class="pre">importlib.machinery.*_SUFFIXES</span></code> attributes.</p> <p>Additionally, if a Python implementation provides extension kinds other than the ones listed on <code class="docutils literal notranslate"><span class="pre">importlib.machinery</span></code> module, they <strong>MAY</strong> add a sub-section for them.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">{'source':</span> <span class="pre">['.py'],</span> <span class="pre">'bytecode':</span> <span class="pre">['.pyc'],</span> <span class="pre">'optimized_bytecode':</span> <span class="pre">['.pyc'],</span> <span class="pre">'debug_bytecode':</span> <span class="pre">['.pyc'],</span> <span class="pre">'extensions':</span> <span class="pre">['.cpython-313-x86_64-linux-gnu.so',</span> <span class="pre">'.abi3.so',</span> <span class="pre">'.so']}</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> <tr class="row-odd"><td>Additional properties</td> <td><strong>Allowed</strong></td> </tr> </tbody> </table> </section> <section id="libpython"> <h3><a class="toc-backref" href="#libpython" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">libpython</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object containing details related to the <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library.<p>This section <strong>MUST</strong> by present if Python installation provides a <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library, otherwise this section will be missing.</p> </td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>False</strong></td> </tr> <tr class="row-even"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="libpython-dynamic"> <h4><a class="toc-backref" href="#libpython-dynamic" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">libpython.dynamic</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>The path to the dynamic <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library.<p>Either an absolute path, or a path relative to <code class="docutils literal notranslate"><span class="pre">base_prefix</span></code>.</p> <p>This field <strong>MUST</strong> be present if the Python installation provides a dynamic <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library, otherwise this entry will be missing.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/usr/lib/libpython3.14.so.1.0</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">lib/libpython3.14.so.1.0</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> <section id="libpython-dynamic-stableabi"> <h4><a class="toc-backref" href="#libpython-dynamic-stableabi" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">libpython.dynamic_stableabi</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>The path to the dynamic <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library for the stable ABI.<p>Either an absolute path, or a path relative to <code class="docutils literal notranslate"><span class="pre">base_prefix</span></code>.</p> <p>This field <strong>MUST</strong> be present if the Python installation provides a dynamic <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library targetting the Stable ABI, otherwise this entry will be missing.</p> <p>If this key is present <code class="docutils literal notranslate"><span class="pre">dynamic</span></code> <strong>MUST</strong> also be set.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/usr/lib/libpython3.so</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">lib/libpython3.so</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> <section id="libpython-static"> <h4><a class="toc-backref" href="#libpython-static" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">libpython.static</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>The path to the static <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library.<p>Either an absolute path, or a path relative to <code class="docutils literal notranslate"><span class="pre">base_prefix</span></code>.</p> <p>This field <strong>MUST</strong> be present if the Python installation provides a static <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library, otherwise this entry will be missing.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/usr/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> <section id="libpython-link-extensions"> <h4><a class="toc-backref" href="#libpython-link-extensions" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">libpython.link_extensions</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">boolean</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Should extensions built against a dynamic <code class="docutils literal notranslate"><span class="pre">libpython</span></code> link to it?<p>This field <strong>MUST</strong> be present if the Python installation provides a dynamic <code class="docutils literal notranslate"><span class="pre">libpython</span></code> library, otherwise this entry will be missing.</p> </td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> </section> <section id="c-api"> <h3><a class="toc-backref" href="#c-api" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">c_api</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object containing details related to the Python C API.<p>This section <strong>MUST</strong> be present if the Python implementation provides a C API, otherwise this section will be missing.</p> </td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>False</strong></td> </tr> <tr class="row-even"><td>Additional properties</td> <td><strong>Not allowed</strong></td> </tr> </tbody> </table> <section id="c-api-headers"> <h4><a class="toc-backref" href="#c-api-headers" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">c_api.headers</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>The path to the C API headers.<p>Either an absolute path, or a path relative to <code class="docutils literal notranslate"><span class="pre">base_prefix</span></code>.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/usr/include/python3.14</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">include/python3.14</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>True</strong></td> </tr> </tbody> </table> </section> <section id="c-api-pkgconfig-path"> <h4><a class="toc-backref" href="#c-api-pkgconfig-path" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">c_api.pkgconfig_path</span></code></a></h4> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">string</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>The path to the pkg-config definition files.<p>Either an absolute path, or a path relative to <code class="docutils literal notranslate"><span class="pre">base_prefix</span></code>.</p> <p>This field <strong>MUST</strong> be present if the Python implementation provides pkg-config definition files, otherwise this section will be missing.</p> </td> </tr> <tr class="row-odd"><td>Examples</td> <td><ul class="simple"> <li><code class="docutils literal notranslate"><span class="pre">/usr/lib/pkgconfig</span></code></li> <li><code class="docutils literal notranslate"><span class="pre">lib/pkgconfig</span></code></li> <li>etc.</li> </ul> </td> </tr> <tr class="row-even"><td>Required</td> <td><strong>False</strong></td> </tr> </tbody> </table> </section> </section> <section id="arbitrary-data"> <h3><a class="toc-backref" href="#arbitrary-data" role="doc-backlink"><code class="docutils literal notranslate"><span class="pre">arbitrary_data</span></code></a></h3> <table class="docutils align-default"> <colgroup> <col style="width: 25.0%" /> <col style="width: 75.0%" /> </colgroup> <tbody> <tr class="row-odd"><td>Type</td> <td><code class="docutils literal notranslate"><span class="pre">object</span></code></td> </tr> <tr class="row-even"><td>Description</td> <td>Object containing extra arbitrary data.<p>This is meant to be used as an escape-hatch, to include any relevant data that is not covered by this specification. Implementations may choose what data to provide in this section.</p> </td> </tr> <tr class="row-odd"><td>Required</td> <td><strong>False</strong></td> </tr> <tr class="row-even"><td>Additional properties</td> <td><strong>Allowed</strong></td> </tr> </tbody> </table> </section> </section> <section id="example"> <span id="spec-end"></span><h2><a class="toc-backref" href="#example" role="doc-backlink">Example</a></h2> <div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="p">{</span> <span class="linenos"> 2</span><span class="w"> </span><span class="nt">&quot;schema_version&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1.0&quot;</span><span class="p">,</span> <span class="linenos"> 3</span><span class="w"> </span><span class="nt">&quot;base_prefix&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr&quot;</span><span class="p">,</span> <span class="linenos"> 4</span><span class="w"> </span><span class="nt">&quot;base_interpreter&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr/bin/python&quot;</span><span class="p">,</span> <span class="linenos"> 5</span><span class="w"> </span><span class="nt">&quot;platform&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;linux-x86_64&quot;</span><span class="p">,</span> <span class="linenos"> 6</span><span class="w"> </span><span class="nt">&quot;language&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 7</span><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;3.14&quot;</span><span class="p">,</span> <span class="linenos"> 8</span><span class="w"> </span><span class="nt">&quot;version_info&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 9</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span> <span class="linenos">10</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">14</span><span class="p">,</span> <span class="linenos">11</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span> <span class="linenos">12</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;alpha&quot;</span><span class="p">,</span> <span class="linenos">13</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span> <span class="linenos">14</span><span class="w"> </span><span class="p">}</span> <span class="linenos">15</span><span class="w"> </span><span class="p">},</span> <span class="linenos">16</span><span class="w"> </span><span class="nt">&quot;implementation&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">17</span><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;cpython&quot;</span><span class="p">,</span> <span class="linenos">18</span><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">19</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span> <span class="linenos">20</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">14</span><span class="p">,</span> <span class="linenos">21</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span> <span class="linenos">22</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;alpha&quot;</span><span class="p">,</span> <span class="linenos">23</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span> <span class="linenos">24</span><span class="w"> </span><span class="p">},</span> <span class="linenos">25</span><span class="w"> </span><span class="nt">&quot;hexversion&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">51249312</span><span class="p">,</span> <span class="linenos">26</span><span class="w"> </span><span class="nt">&quot;cache_tag&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;cpython-314&quot;</span><span class="p">,</span> <span class="linenos">27</span><span class="w"> </span><span class="nt">&quot;_multiarch&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;x86_64-linux-gnu&quot;</span> <span class="linenos">28</span><span class="w"> </span><span class="p">},</span> <span class="linenos">29</span><span class="w"> </span><span class="nt">&quot;abi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">30</span><span class="w"> </span><span class="nt">&quot;flags&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;t&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;d&quot;</span><span class="p">],</span> <span class="linenos">31</span><span class="w"> </span><span class="nt">&quot;extension_suffix&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;.cpython-314-x86_64-linux-gnu.so&quot;</span><span class="p">,</span> <span class="linenos">32</span><span class="w"> </span><span class="nt">&quot;stable_abi_suffix&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;.abi3.so&quot;</span> <span class="linenos">33</span><span class="w"> </span><span class="p">},</span> <span class="linenos">34</span><span class="w"> </span><span class="nt">&quot;suffixes&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">35</span><span class="w"> </span><span class="nt">&quot;source&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.py&quot;</span><span class="p">],</span> <span class="linenos">36</span><span class="w"> </span><span class="nt">&quot;bytecode&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.pyc&quot;</span><span class="p">],</span> <span class="linenos">37</span><span class="w"> </span><span class="nt">&quot;optimized_bytecode&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.pyc&quot;</span><span class="p">],</span> <span class="linenos">38</span><span class="w"> </span><span class="nt">&quot;debug_bytecode&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.pyc&quot;</span><span class="p">],</span> <span class="linenos">39</span><span class="w"> </span><span class="nt">&quot;extensions&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.cpython-314-x86_64-linux-gnu.so&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;.abi3.so&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;.so&quot;</span><span class="p">]</span> <span class="linenos">40</span><span class="w"> </span><span class="p">},</span> <span class="linenos">41</span><span class="w"> </span><span class="nt">&quot;libpython&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">42</span><span class="w"> </span><span class="nt">&quot;dynamic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr/lib/libpython3.14.so.1.0&quot;</span><span class="p">,</span> <span class="linenos">43</span><span class="w"> </span><span class="nt">&quot;dynamic_stableabi&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr/lib/libpython3.so&quot;</span><span class="p">,</span> <span class="linenos">44</span><span class="w"> </span><span class="nt">&quot;static&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a&quot;</span><span class="p">,</span> <span class="linenos">45</span><span class="w"> </span><span class="nt">&quot;link_extensions&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span> <span class="linenos">46</span><span class="w"> </span><span class="p">},</span> <span class="linenos">47</span><span class="w"> </span><span class="nt">&quot;c_api&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">48</span><span class="w"> </span><span class="nt">&quot;headers&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr/include/python3.14&quot;</span><span class="p">,</span> <span class="linenos">49</span><span class="w"> </span><span class="nt">&quot;pkgconfig_path&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;/usr/lib/pkgconfig&quot;</span> <span class="linenos">50</span><span class="w"> </span><span class="p">}</span> <span class="linenos">51</span><span class="p">}</span> </pre></div> </div> </section> <section id="json-schema"> <h2><a class="toc-backref" href="#json-schema" role="doc-backlink">JSON Schema</a></h2> <div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="linenos"> 1</span><span class="p">{</span> <span class="linenos"> 2</span><span class="w"> </span><span class="nt">&quot;$schema&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://json-schema.org/draft/2020-12/schema&quot;</span><span class="p">,</span> <span class="linenos"> 3</span><span class="w"> </span><span class="nt">&quot;$id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;https://github.com/python/peps/blob/main/peps/pep-0739/python-build-info-v1.0.schema.json&quot;</span><span class="p">,</span> <span class="linenos"> 4</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos"> 5</span><span class="w"> </span><span class="nt">&quot;title&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;build-details.json — a static description file with build details of Python installations&quot;</span><span class="p">,</span> <span class="linenos"> 6</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 7</span><span class="w"> </span><span class="s2">&quot;schema_version&quot;</span><span class="p">,</span> <span class="linenos"> 8</span><span class="w"> </span><span class="s2">&quot;base_prefix&quot;</span><span class="p">,</span> <span class="linenos"> 9</span><span class="w"> </span><span class="s2">&quot;platform&quot;</span><span class="p">,</span> <span class="linenos"> 10</span><span class="w"> </span><span class="s2">&quot;language&quot;</span><span class="p">,</span> <span class="linenos"> 11</span><span class="w"> </span><span class="s2">&quot;implementation&quot;</span> <span class="linenos"> 12</span><span class="w"> </span><span class="p">],</span> <span class="linenos"> 13</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos"> 14</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 15</span><span class="w"> </span><span class="nt">&quot;schema_version&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 16</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos"> 17</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Schema version.\n\nThis is a string following the format ``&lt;MAJOR&gt;.&lt;MINOR&gt;``, where ``&lt;MAJOR&gt;`` and ``&lt;MINOR&gt;`` are unpaded numbers and represent the **major** and **minor** components of the version. Versions may be arithmetically compared by intrepreting the version string as a decimal number.\n\nFor this specification version, this value is constant and **MUST** be ``1.0``.\n\nFuture versions of this schema **MUST** use a higher version number. Future versions of this schema **MUST NOT** use the same **major** version component as other schema version unless its specification is deemed backwards-compatible with them — it can&#39;t change, or extend, any parts of the current specification in such a way as the semantics of the interpreted data differ, or that data valid under the new specification is invalid under the older specification, with the exception of additional properties (errors caused by ``additionalProperties``).&quot;</span><span class="p">,</span> <span class="linenos"> 18</span><span class="w"> </span><span class="nt">&quot;const&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1.0&quot;</span> <span class="linenos"> 19</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 20</span><span class="w"> </span><span class="nt">&quot;base_prefix&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 21</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos"> 22</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Base prefix of the Python installation.\n\nEither an absolute path, or a path relative to directory where this file is contained.&quot;</span><span class="p">,</span> <span class="linenos"> 23</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 24</span><span class="w"> </span><span class="s2">&quot;/usr&quot;</span><span class="p">,</span> <span class="linenos"> 25</span><span class="w"> </span><span class="s2">&quot;../..&quot;</span> <span class="linenos"> 26</span><span class="w"> </span><span class="p">]</span> <span class="linenos"> 27</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 28</span><span class="w"> </span><span class="nt">&quot;base_interpreter&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 29</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos"> 30</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;The path to the Python interprer of the base installation.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the installation provides an interpreter executable.&quot;</span><span class="p">,</span> <span class="linenos"> 31</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 32</span><span class="w"> </span><span class="s2">&quot;/usr/bin/python&quot;</span><span class="p">,</span> <span class="linenos"> 33</span><span class="w"> </span><span class="s2">&quot;bin/python&quot;</span> <span class="linenos"> 34</span><span class="w"> </span><span class="p">]</span> <span class="linenos"> 35</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 36</span><span class="w"> </span><span class="nt">&quot;platform&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 37</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos"> 38</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;System platform string.\n\nThis field **SHOULD** be equivalent to ``sysconfig.get_platform()``.&quot;</span><span class="p">,</span> <span class="linenos"> 39</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 40</span><span class="w"> </span><span class="s2">&quot;linux-x86_64&quot;</span> <span class="linenos"> 41</span><span class="w"> </span><span class="p">]</span> <span class="linenos"> 42</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 43</span><span class="w"> </span><span class="nt">&quot;language&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 44</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos"> 45</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object containing details related to the Python language specification.&quot;</span><span class="p">,</span> <span class="linenos"> 46</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 47</span><span class="w"> </span><span class="s2">&quot;version&quot;</span> <span class="linenos"> 48</span><span class="w"> </span><span class="p">],</span> <span class="linenos"> 49</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos"> 50</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 51</span><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 52</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos"> 53</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;String representation the Python language version — a version string consisting only of the *major* and *minor* components.\n\nThis field **SHOULD** be equivalent to ``sysconfig.get_python_version()``.&quot;</span><span class="p">,</span> <span class="linenos"> 54</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;3.14&quot;</span><span class="p">]</span> <span class="linenos"> 55</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 56</span><span class="w"> </span><span class="nt">&quot;version_info&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 57</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos"> 58</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object in the format of :py:data:`sys.version_info`.\n\nThis section **SHOULD** be equivalent to :py:data:`sys.version_info`.&quot;</span><span class="p">,</span> <span class="linenos"> 59</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;major&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;minor&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;micro&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;releaselevel&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;serial&quot;</span><span class="p">],</span> <span class="linenos"> 60</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos"> 61</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 62</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 63</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span> <span class="linenos"> 64</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">14</span><span class="p">,</span> <span class="linenos"> 65</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span> <span class="linenos"> 66</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;final&quot;</span><span class="p">,</span> <span class="linenos"> 67</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span> <span class="linenos"> 68</span><span class="w"> </span><span class="p">}</span> <span class="linenos"> 69</span><span class="w"> </span><span class="p">],</span> <span class="linenos"> 70</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 71</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 72</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos"> 73</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 74</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 75</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos"> 76</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 77</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 78</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos"> 79</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 80</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 81</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos"> 82</span><span class="w"> </span><span class="nt">&quot;enum&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;alpha&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;beta&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;candidate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;final&quot;</span><span class="p">]</span> <span class="linenos"> 83</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 84</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 85</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos"> 86</span><span class="w"> </span><span class="p">}</span> <span class="linenos"> 87</span><span class="w"> </span><span class="p">}</span> <span class="linenos"> 88</span><span class="w"> </span><span class="p">}</span> <span class="linenos"> 89</span><span class="w"> </span><span class="p">}</span> <span class="linenos"> 90</span><span class="w"> </span><span class="p">},</span> <span class="linenos"> 91</span><span class="w"> </span><span class="nt">&quot;implementation&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos"> 92</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos"> 93</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object containing details related to Python implementation.\n\nThis section **SHOULD** be equivalent to :py:data:`sys.implementation`. It follows specification defined in PEP 421, meaning that on top of the required keys, implementation-specific keys can also exist, but must be prefixed with an underscore.&quot;</span><span class="p">,</span> <span class="linenos"> 94</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos"> 95</span><span class="w"> </span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="linenos"> 96</span><span class="w"> </span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="linenos"> 97</span><span class="w"> </span><span class="s2">&quot;hexversion&quot;</span><span class="p">,</span> <span class="linenos"> 98</span><span class="w"> </span><span class="s2">&quot;cache_tag&quot;</span> <span class="linenos"> 99</span><span class="w"> </span><span class="p">],</span> <span class="linenos">100</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span> <span class="linenos">101</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">102</span><span class="w"> </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">103</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">104</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Lower-case name of the Python implementation.&quot;</span><span class="p">,</span> <span class="linenos">105</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;cpython&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;pypy&quot;</span><span class="p">]</span> <span class="linenos">106</span><span class="w"> </span><span class="p">},</span> <span class="linenos">107</span><span class="w"> </span><span class="nt">&quot;version&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">108</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos">109</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object in the format of :py:data:`sys.version_info`, containing the implementation version.&quot;</span><span class="p">,</span> <span class="linenos">110</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;major&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;minor&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;micro&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;releaselevel&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;serial&quot;</span><span class="p">],</span> <span class="linenos">111</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos">112</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">113</span><span class="w"> </span><span class="p">{</span> <span class="linenos">114</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span> <span class="linenos">115</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">14</span><span class="p">,</span> <span class="linenos">116</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span> <span class="linenos">117</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;final&quot;</span><span class="p">,</span> <span class="linenos">118</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span> <span class="linenos">119</span><span class="w"> </span><span class="p">},</span> <span class="linenos">120</span><span class="w"> </span><span class="p">{</span> <span class="linenos">121</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">7</span><span class="p">,</span> <span class="linenos">122</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span> <span class="linenos">123</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">16</span><span class="p">,</span> <span class="linenos">124</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;final&quot;</span><span class="p">,</span> <span class="linenos">125</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span> <span class="linenos">126</span><span class="w"> </span><span class="p">}</span> <span class="linenos">127</span><span class="w"> </span><span class="p">],</span> <span class="linenos">128</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">129</span><span class="w"> </span><span class="nt">&quot;major&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">130</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos">131</span><span class="w"> </span><span class="p">},</span> <span class="linenos">132</span><span class="w"> </span><span class="nt">&quot;minor&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">133</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos">134</span><span class="w"> </span><span class="p">},</span> <span class="linenos">135</span><span class="w"> </span><span class="nt">&quot;micro&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">136</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos">137</span><span class="w"> </span><span class="p">},</span> <span class="linenos">138</span><span class="w"> </span><span class="nt">&quot;releaselevel&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">139</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">140</span><span class="w"> </span><span class="nt">&quot;enum&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;alpha&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;beta&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;candidate&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;final&quot;</span><span class="p">]</span> <span class="linenos">141</span><span class="w"> </span><span class="p">},</span> <span class="linenos">142</span><span class="w"> </span><span class="nt">&quot;serial&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">143</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;number&quot;</span> <span class="linenos">144</span><span class="w"> </span><span class="p">}</span> <span class="linenos">145</span><span class="w"> </span><span class="p">}</span> <span class="linenos">146</span><span class="w"> </span><span class="p">}</span> <span class="linenos">147</span><span class="w"> </span><span class="p">}</span> <span class="linenos">148</span><span class="w"> </span><span class="p">},</span> <span class="linenos">149</span><span class="w"> </span><span class="nt">&quot;abi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">150</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos">151</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object containing details related to ABI.&quot;</span><span class="p">,</span> <span class="linenos">152</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">153</span><span class="w"> </span><span class="s2">&quot;flags&quot;</span> <span class="linenos">154</span><span class="w"> </span><span class="p">],</span> <span class="linenos">155</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos">156</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">157</span><span class="w"> </span><span class="nt">&quot;flags&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">158</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;array&quot;</span><span class="p">,</span> <span class="linenos">159</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Build configuration flags, used to calculate the extension suffix.\n\nThe flags **MUST** be defined in the order they appear on the extension suffix.&quot;</span><span class="p">,</span> <span class="linenos">160</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span> <span class="linenos">161</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">162</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;t&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;d&quot;</span><span class="p">]</span> <span class="linenos">163</span><span class="w"> </span><span class="p">]</span> <span class="linenos">164</span><span class="w"> </span><span class="p">},</span> <span class="linenos">165</span><span class="w"> </span><span class="nt">&quot;extension_suffix&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">166</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">167</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Suffix used for extensions built against the current implementation version.\n\nThis field **MUST** be present if the Python implementation supports extensions, otherwise this entry will be missing.&quot;</span><span class="p">,</span> <span class="linenos">168</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">169</span><span class="w"> </span><span class="s2">&quot;.cpython-314-x86_64-linux-gnu.so&quot;</span> <span class="linenos">170</span><span class="w"> </span><span class="p">]</span> <span class="linenos">171</span><span class="w"> </span><span class="p">},</span> <span class="linenos">172</span><span class="w"> </span><span class="nt">&quot;stable_abi_suffix&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">173</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">174</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Suffix used for extensions built against the stable ABI.\n\nThis field **MUST** be present if the Python implementation has a stable ABI extension suffix, otherwise this entry will be missing.&quot;</span><span class="p">,</span> <span class="linenos">175</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">176</span><span class="w"> </span><span class="s2">&quot;.abi3.so&quot;</span> <span class="linenos">177</span><span class="w"> </span><span class="p">]</span> <span class="linenos">178</span><span class="w"> </span><span class="p">}</span> <span class="linenos">179</span><span class="w"> </span><span class="p">}</span> <span class="linenos">180</span><span class="w"> </span><span class="p">},</span> <span class="linenos">181</span><span class="w"> </span><span class="nt">&quot;suffixes&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">182</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos">183</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Valid module suffixes grouped by type.\n\nThis section **MUST** be present if the Python installation supports importing external files, and it **SHOULD** be equivalent to the ``importlib.machinery.*_SUFFIXES`` attributes.\n\nAdditionally, if a Python implementation provides extension kinds other than the ones listed on ``importlib.machinery`` module, they **MAY** add a sub-section for them.&quot;</span><span class="p">,</span> <span class="linenos">184</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">185</span><span class="w"> </span><span class="p">{</span> <span class="linenos">186</span><span class="w"> </span><span class="nt">&quot;source&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.py&quot;</span><span class="p">],</span> <span class="linenos">187</span><span class="w"> </span><span class="nt">&quot;bytecode&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.pyc&quot;</span><span class="p">],</span> <span class="linenos">188</span><span class="w"> </span><span class="nt">&quot;optimized_bytecode&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.pyc&quot;</span><span class="p">],</span> <span class="linenos">189</span><span class="w"> </span><span class="nt">&quot;debug_bytecode&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.pyc&quot;</span><span class="p">],</span> <span class="linenos">190</span><span class="w"> </span><span class="nt">&quot;extensions&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&quot;.cpython-313-x86_64-linux-gnu.so&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;.abi3.so&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;.so&quot;</span><span class="p">]</span> <span class="linenos">191</span><span class="w"> </span><span class="p">}</span> <span class="linenos">192</span><span class="w"> </span><span class="p">]</span> <span class="linenos">193</span><span class="w"> </span><span class="p">},</span> <span class="linenos">194</span><span class="w"> </span><span class="nt">&quot;libpython&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">195</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos">196</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object containing details related to the ``libpython`` library.\n\nThis section **MUST** by present if Python installation provides a ``libpython`` library, otherwise this section will be missing.&quot;</span><span class="p">,</span> <span class="linenos">197</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos">198</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">199</span><span class="w"> </span><span class="nt">&quot;dynamic&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">200</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">201</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;The path to the dynamic ``libpython`` library.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python installation provides a dynamic ``libpython`` library, otherwise this entry will be missing.&quot;</span><span class="p">,</span> <span class="linenos">202</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">203</span><span class="w"> </span><span class="s2">&quot;/usr/lib/libpython3.14.so.1.0&quot;</span><span class="p">,</span> <span class="linenos">204</span><span class="w"> </span><span class="s2">&quot;lib/libpython3.14.so.1.0&quot;</span> <span class="linenos">205</span><span class="w"> </span><span class="p">]</span> <span class="linenos">206</span><span class="w"> </span><span class="p">},</span> <span class="linenos">207</span><span class="w"> </span><span class="nt">&quot;dynamic_stableabi&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">208</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">209</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;The path to the dynamic ``libpython`` library for the stable ABI.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python installation provides a dynamic ``libpython`` library targetting the Stable ABI, otherwise this entry will be missing.\n\nIf this key is present ``dynamic`` **MUST** also be set.&quot;</span><span class="p">,</span> <span class="linenos">210</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">211</span><span class="w"> </span><span class="s2">&quot;/usr/lib/libpython3.so&quot;</span><span class="p">,</span> <span class="linenos">212</span><span class="w"> </span><span class="s2">&quot;lib/libpython3.so&quot;</span> <span class="linenos">213</span><span class="w"> </span><span class="p">]</span> <span class="linenos">214</span><span class="w"> </span><span class="p">},</span> <span class="linenos">215</span><span class="w"> </span><span class="nt">&quot;static&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">216</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">217</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;The path to the static ``libpython`` library.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python installation provides a static ``libpython`` library, otherwise this entry will be missing.&quot;</span><span class="p">,</span> <span class="linenos">218</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">219</span><span class="w"> </span><span class="s2">&quot;/usr/lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a&quot;</span><span class="p">,</span> <span class="linenos">220</span><span class="w"> </span><span class="s2">&quot;lib/python3.14/config-3.14-x86_64-linux-gnu/libpython3.14.a&quot;</span> <span class="linenos">221</span><span class="w"> </span><span class="p">]</span> <span class="linenos">222</span><span class="w"> </span><span class="p">},</span> <span class="linenos">223</span><span class="w"> </span><span class="nt">&quot;link_extensions&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">224</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;boolean&quot;</span><span class="p">,</span> <span class="linenos">225</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Should extensions built against a dynamic ``libpython`` link to it?\n\nThis field **MUST** be present if the Python installation provides a dynamic ``libpython`` library, otherwise this entry will be missing.&quot;</span> <span class="linenos">226</span><span class="w"> </span><span class="p">}</span> <span class="linenos">227</span><span class="w"> </span><span class="p">}</span> <span class="linenos">228</span><span class="w"> </span><span class="p">},</span> <span class="linenos">229</span><span class="w"> </span><span class="nt">&quot;c_api&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">230</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos">231</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;Object containing details related to the Python C API.\n\nThis section **MUST** be present if the Python implementation provides a C API, otherwise this section will be missing.&quot;</span><span class="p">,</span> <span class="linenos">232</span><span class="w"> </span><span class="nt">&quot;required&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">233</span><span class="w"> </span><span class="s2">&quot;headers&quot;</span> <span class="linenos">234</span><span class="w"> </span><span class="p">],</span> <span class="linenos">235</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span> <span class="linenos">236</span><span class="w"> </span><span class="nt">&quot;properties&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">237</span><span class="w"> </span><span class="nt">&quot;headers&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">238</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">239</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;The path to the C API headers.\n\nEither an absolute path, or a path relative to ``base_prefix``.&quot;</span><span class="p">,</span> <span class="linenos">240</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">241</span><span class="w"> </span><span class="s2">&quot;/usr/include/python3.14&quot;</span><span class="p">,</span> <span class="linenos">242</span><span class="w"> </span><span class="s2">&quot;include/python3.14&quot;</span> <span class="linenos">243</span><span class="w"> </span><span class="p">]</span> <span class="linenos">244</span><span class="w"> </span><span class="p">},</span> <span class="linenos">245</span><span class="w"> </span><span class="nt">&quot;pkgconfig_path&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">246</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="linenos">247</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;The path to the pkg-config definition files.\n\nEither an absolute path, or a path relative to ``base_prefix``.\n\nThis field **MUST** be present if the Python implementation provides pkg-config definition files, otherwise this section will be missing.&quot;</span><span class="p">,</span> <span class="linenos">248</span><span class="w"> </span><span class="nt">&quot;examples&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span> <span class="linenos">249</span><span class="w"> </span><span class="s2">&quot;/usr/lib/pkgconfig&quot;</span><span class="p">,</span> <span class="linenos">250</span><span class="w"> </span><span class="s2">&quot;lib/pkgconfig&quot;</span> <span class="linenos">251</span><span class="w"> </span><span class="p">]</span> <span class="linenos">252</span><span class="w"> </span><span class="p">}</span> <span class="linenos">253</span><span class="w"> </span><span class="p">}</span> <span class="linenos">254</span><span class="w"> </span><span class="p">},</span> <span class="linenos">255</span><span class="w"> </span><span class="nt">&quot;arbitrary_data&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span> <span class="linenos">256</span><span class="w"> </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="linenos">257</span><span class="w"> </span><span class="nt">&quot;description&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;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. Implementations may choose what data to provide in this section.&quot;</span><span class="p">,</span> <span class="linenos">258</span><span class="w"> </span><span class="nt">&quot;additionalProperties&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span> <span class="linenos">259</span><span class="w"> </span><span class="p">}</span> <span class="linenos">260</span><span class="w"> </span><span class="p">}</span> <span class="linenos">261</span><span class="p">}</span> </pre></div> </div> </section> <section id="rejected-ideas"> <h2><a class="toc-backref" href="#rejected-ideas" role="doc-backlink">Rejected Ideas</a></h2> <section id="including-environment-specific-data"> <h3><a class="toc-backref" href="#including-environment-specific-data" role="doc-backlink">Including environment-specific data</a></h3> <p>One of the main requests in the discussion of this PEP was the inclusion of other kind of information, such as the <code class="docutils literal notranslate"><span class="pre">site-packages</span></code> path. It is the opinion of the PEP authors that information regarding the Python environment should be provided by a separate file.</p> <p>Including environment-specific data in the config file means that it would be environment-specific, so virtual environments would need their own config file. This is problematic because virtual environments survive updates of the base Python installation, creating the possibily for the static config file to be outdated, and making its data unreliable, which defeats its purpose.</p> <p>The proposed solution, partially implemented in this PEP, is to have a <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> file, referent to the base Python installation, and a <code class="docutils literal notranslate"><span class="pre">environment.json</span></code> file, referent to the specific environment.</p> <p>With <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> being part of the Python distribution, when the base Python installation gets updated, <code class="docutils literal notranslate"><span class="pre">build-details.json</span></code> does too, ensuring the static description files are never outdated.</p> </section> </section> <section id="copyright"> <h2><a class="toc-backref" href="#copyright" role="doc-backlink">Copyright</a></h2> <p>This document is placed in the public domain or under the CC0-1.0-Universal license, whichever is more permissive.</p> </section> </section> <hr class="docutils" /> <p>Source: <a class="reference external" href="https://github.com/python/peps/blob/main/peps/pep-0739.rst">https://github.com/python/peps/blob/main/peps/pep-0739.rst</a></p> <p>Last modified: <a class="reference external" href="https://github.com/python/peps/commits/main/peps/pep-0739.rst">2025-02-07 01:10:57 GMT</a></p> </article> <nav id="pep-sidebar"> <h2>Contents</h2> <ul> <li><a class="reference internal" href="#abstract">Abstract</a></li> <li><a class="reference internal" href="#rationale">Rationale</a></li> <li><a class="reference internal" href="#scope">Scope</a></li> <li><a class="reference internal" href="#specification">Specification</a></li> <li><a class="reference internal" href="#format">Format</a><ul> <li><a class="reference internal" href="#schema-version"><code class="docutils literal notranslate"><span class="pre">schema_version</span></code></a></li> <li><a class="reference internal" href="#base-prefix"><code class="docutils literal notranslate"><span class="pre">base_prefix</span></code></a></li> <li><a class="reference internal" href="#base-interpreter"><code class="docutils literal notranslate"><span class="pre">base_interpreter</span></code></a></li> <li><a class="reference internal" href="#platform"><code class="docutils literal notranslate"><span class="pre">platform</span></code></a></li> <li><a class="reference internal" href="#language"><code class="docutils literal notranslate"><span class="pre">language</span></code></a><ul> <li><a class="reference internal" href="#language-version"><code class="docutils literal notranslate"><span class="pre">language.version</span></code></a></li> <li><a class="reference internal" href="#language-version-info"><code class="docutils literal notranslate"><span class="pre">language.version_info</span></code></a><ul> <li><a class="reference internal" href="#language-version-info-major"><code class="docutils literal notranslate"><span class="pre">language.version_info.major</span></code></a></li> <li><a class="reference internal" href="#language-version-info-minor"><code class="docutils literal notranslate"><span class="pre">language.version_info.minor</span></code></a></li> <li><a class="reference internal" href="#language-version-info-micro"><code class="docutils literal notranslate"><span class="pre">language.version_info.micro</span></code></a></li> <li><a class="reference internal" href="#language-version-info-releaselevel"><code class="docutils literal notranslate"><span class="pre">language.version_info.releaselevel</span></code></a></li> <li><a class="reference internal" href="#language-version-info-serial"><code class="docutils literal notranslate"><span class="pre">language.version_info.serial</span></code></a></li> </ul> </li> </ul> </li> <li><a class="reference internal" href="#implementation"><code class="docutils literal notranslate"><span class="pre">implementation</span></code></a><ul> <li><a class="reference internal" href="#implementation-name"><code class="docutils literal notranslate"><span class="pre">implementation.name</span></code></a></li> <li><a class="reference internal" href="#implementation-version"><code class="docutils literal notranslate"><span class="pre">implementation.version</span></code></a><ul> <li><a class="reference internal" href="#implementation-version-major"><code class="docutils literal notranslate"><span class="pre">implementation.version.major</span></code></a></li> <li><a class="reference internal" href="#implementation-version-minor"><code class="docutils literal notranslate"><span class="pre">implementation.version.minor</span></code></a></li> <li><a class="reference internal" href="#implementation-version-micro"><code class="docutils literal notranslate"><span class="pre">implementation.version.micro</span></code></a></li> <li><a class="reference internal" href="#implementation-version-releaselevel"><code class="docutils literal notranslate"><span class="pre">implementation.version.releaselevel</span></code></a></li> <li><a class="reference internal" href="#implementation-version-serial"><code class="docutils literal notranslate"><span class="pre">implementation.version.serial</span></code></a></li> </ul> </li> </ul> </li> <li><a class="reference internal" href="#abi"><code class="docutils literal notranslate"><span class="pre">abi</span></code></a><ul> <li><a class="reference internal" href="#abi-flags"><code class="docutils literal notranslate"><span class="pre">abi.flags</span></code></a></li> <li><a class="reference internal" href="#abi-extension-suffix"><code class="docutils literal notranslate"><span class="pre">abi.extension_suffix</span></code></a></li> <li><a class="reference internal" href="#abi-stable-abi-suffix"><code class="docutils literal notranslate"><span class="pre">abi.stable_abi_suffix</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#suffixes"><code class="docutils literal notranslate"><span class="pre">suffixes</span></code></a></li> <li><a class="reference internal" href="#libpython"><code class="docutils literal notranslate"><span class="pre">libpython</span></code></a><ul> <li><a class="reference internal" href="#libpython-dynamic"><code class="docutils literal notranslate"><span class="pre">libpython.dynamic</span></code></a></li> <li><a class="reference internal" href="#libpython-dynamic-stableabi"><code class="docutils literal notranslate"><span class="pre">libpython.dynamic_stableabi</span></code></a></li> <li><a class="reference internal" href="#libpython-static"><code class="docutils literal notranslate"><span class="pre">libpython.static</span></code></a></li> <li><a class="reference internal" href="#libpython-link-extensions"><code class="docutils literal notranslate"><span class="pre">libpython.link_extensions</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#c-api"><code class="docutils literal notranslate"><span class="pre">c_api</span></code></a><ul> <li><a class="reference internal" href="#c-api-headers"><code class="docutils literal notranslate"><span class="pre">c_api.headers</span></code></a></li> <li><a class="reference internal" href="#c-api-pkgconfig-path"><code class="docutils literal notranslate"><span class="pre">c_api.pkgconfig_path</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#arbitrary-data"><code class="docutils literal notranslate"><span class="pre">arbitrary_data</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#example">Example</a></li> <li><a class="reference internal" href="#json-schema">JSON Schema</a></li> <li><a class="reference internal" href="#rejected-ideas">Rejected Ideas</a><ul> <li><a class="reference internal" href="#including-environment-specific-data">Including environment-specific data</a></li> </ul> </li> <li><a class="reference internal" href="#copyright">Copyright</a></li> </ul> <br> <a id="source" href="https://github.com/python/peps/blob/main/peps/pep-0739.rst">Page Source (GitHub)</a> </nav> </section> <script src="../_static/colour_scheme.js"></script> <script src="../_static/wrap_tables.js"></script> <script src="../_static/sticky_banner.js"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10