diff options
author | 2023-09-21 17:59:55 +0200 | |
---|---|---|
committer | 2023-09-21 17:59:55 +0200 | |
commit | 1c790c55a8e4bc6deef00910403334d5536fb2c8 (patch) | |
tree | ea92dde291014707a012c085b27381a17742f1bb | |
parent | Update Guide to 8e5a339 (diff) | |
download | python-1c790c55a8e4bc6deef00910403334d5536fb2c8.tar.gz python-1c790c55a8e4bc6deef00910403334d5536fb2c8.tar.bz2 python-1c790c55a8e4bc6deef00910403334d5536fb2c8.zip |
Regen with Sphinx 7.2.6
Signed-off-by: Michał Górny <mgorny@gentoo.org>
31 files changed, 417 insertions, 395 deletions
diff --git a/guide/_static/basic.css b/guide/_static/basic.css index cfc60b8..30fee9d 100644 --- a/guide/_static/basic.css +++ b/guide/_static/basic.css @@ -237,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, diff --git a/guide/_static/documentation_options.js b/guide/_static/documentation_options.js index b57ae3b..7e4c114 100644 --- a/guide/_static/documentation_options.js +++ b/guide/_static/documentation_options.js @@ -1,5 +1,4 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), +const DOCUMENTATION_OPTIONS = { VERSION: '', LANGUAGE: 'en', COLLAPSE_INDEX: false, diff --git a/guide/_static/pygments.css b/guide/_static/pygments.css index 9abe04b..57c7df3 100644 --- a/guide/_static/pygments.css +++ b/guide/_static/pygments.css @@ -22,6 +22,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: .highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */ .highlight .gd { color: #a40000 } /* Generic.Deleted */ .highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */ +.highlight .ges { color: #000000 } /* Generic.EmphStrong */ .highlight .gr { color: #ef2929 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #00A000 } /* Generic.Inserted */ diff --git a/guide/_static/searchtools.js b/guide/_static/searchtools.js index 97d56a7..7918c3f 100644 --- a/guide/_static/searchtools.js +++ b/guide/_static/searchtools.js @@ -57,12 +57,12 @@ const _removeChildren = (element) => { const _escapeRegExp = (string) => string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -const _displayItem = (item, searchTerms) => { +const _displayItem = (item, searchTerms, highlightTerms) => { const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; - const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; const [docName, title, anchor, descr, score, _filename] = item; @@ -75,20 +75,24 @@ const _displayItem = (item, searchTerms) => { if (dirname.match(/\/index\/$/)) dirname = dirname.substring(0, dirname.length - 6); else if (dirname === "index/") dirname = ""; - requestUrl = docUrlRoot + dirname; + requestUrl = contentRoot + dirname; linkUrl = requestUrl; } else { // normal html builders - requestUrl = docUrlRoot + docName + docFileSuffix; + requestUrl = contentRoot + docName + docFileSuffix; linkUrl = docName + docLinkSuffix; } let linkEl = listItem.appendChild(document.createElement("a")); linkEl.href = linkUrl + anchor; linkEl.dataset.score = score; linkEl.innerHTML = title; - if (descr) + if (descr) { listItem.appendChild(document.createElement("span")).innerHTML = " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } else if (showSearchSummary) fetch(requestUrl) .then((responseData) => responseData.text()) @@ -97,6 +101,9 @@ const _displayItem = (item, searchTerms) => { listItem.appendChild( Search.makeSearchSummary(data, searchTerms) ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); }); Search.output.appendChild(listItem); }; @@ -115,14 +122,15 @@ const _finishSearch = (resultCount) => { const _displayNextItem = ( results, resultCount, - searchTerms + searchTerms, + highlightTerms, ) => { // results left, load the summary and display it // this is intended to be dynamic (don't sub resultsCount) if (results.length) { - _displayItem(results.pop(), searchTerms); + _displayItem(results.pop(), searchTerms, highlightTerms); setTimeout( - () => _displayNextItem(results, resultCount, searchTerms), + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), 5 ); } @@ -360,7 +368,7 @@ const Search = { // console.info("search results:", Search.lastresults); // print the results - _displayNextItem(results, results.length, searchTerms); + _displayNextItem(results, results.length, searchTerms, highlightTerms); }, /** diff --git a/guide/_static/sphinx_highlight.js b/guide/_static/sphinx_highlight.js index aae669d..8a96c69 100644 --- a/guide/_static/sphinx_highlight.js +++ b/guide/_static/sphinx_highlight.js @@ -29,14 +29,19 @@ const _highlight = (node, addItems, text, className) => { } span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); parent.insertBefore( span, parent.insertBefore( - document.createTextNode(val.substr(pos + text.length)), + rest, node.nextSibling ) ); node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); if (isInSVG) { const rect = document.createElementNS( @@ -140,5 +145,10 @@ const SphinxHighlight = { }, }; -_ready(SphinxHighlight.highlightSearchWords); -_ready(SphinxHighlight.initEscapeListener); +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/guide/any.html b/guide/any.html index 41b504b..bafd4b4 100644 --- a/guide/any.html +++ b/guide/any.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>python-any-r1 — build-time dependency — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="python-single-r1 — single-impl packages" href="single.html" /> @@ -32,12 +32,12 @@ <div class="body" role="main"> <section id="python-any-r1-build-time-dependency"> -<h1>python-any-r1 — build-time dependency<a class="headerlink" href="#python-any-r1-build-time-dependency" title="Permalink to this heading">¶</a></h1> +<h1>python-any-r1 — build-time dependency<a class="headerlink" href="#python-any-r1-build-time-dependency" title="Link to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> eclass is used to enable Python support in packages needing it purely at build time.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-any-r1.eclass/index.html">python-any-r1.eclass(5)</a></p> <section id="basic-use-for-unconditional-python"> -<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Permalink to this heading">¶</a></h2> +<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Link to this heading">¶</a></h2> <p>The defining feature of this eclass is that it defines a <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase. It normally calls <code class="docutils literal notranslate"><span class="pre">python_setup</span></code> function in order to find a suitable Python interpreter, and set the global environment @@ -73,9 +73,9 @@ the following:</p> <p>This ebuild demonstrates the absolute minimum working code. Only the three highlighted lines are specific to Python eclasses, plus the implicitly exported <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase.</p> -<span class="target" id="index-0"></span><span class="target" id="index-1"></span><span class="target" id="index-2"></span></section> +</section> <section id="dependencies"> -<span id="index-3"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> +<span id="index-3"></span><span id="index-2"></span><span id="index-1"></span><span id="index-0"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Link to this heading">¶</a></h2> <p>When depending on other Python packages, USE dependencies need to be declared in order to ensure that the dependencies would be built against the Python implementation used for the package. When Python @@ -156,7 +156,7 @@ called at most once. In particular, it is invalid to split the above example into multiple <code class="docutils literal notranslate"><span class="pre">python_gen_any_dep</span></code> calls.</p> </section> <section id="conditional-python-use"> -<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this heading">¶</a></h2> +<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Link to this heading">¶</a></h2> <p>In some packages, Python is only necessary with specific USE flag combinations. This is particularly common when Python is used for the test suite. In that case, the dependencies and <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> call @@ -201,7 +201,7 @@ need to be wrapped in appropriate USE conditions:</p> </div> </section> <section id="additional-conditional-dependencies"> -<h2>Additional conditional dependencies<a class="headerlink" href="#additional-conditional-dependencies" title="Permalink to this heading">¶</a></h2> +<h2>Additional conditional dependencies<a class="headerlink" href="#additional-conditional-dependencies" title="Link to this heading">¶</a></h2> <p>Another possible case is that Python is required unconditionally but some dependencies are required only conditionally to USE flags. The simplest way to achieve that is to use <code class="docutils literal notranslate"><span class="pre">${PYTHON_DEPS}</span></code> globally @@ -241,7 +241,7 @@ a similar condition in <code class="docutils literal notranslate"><span class="p </div> </section> <section id="multiple-sets-of-conditional-dependencies"> -<h2>Multiple sets of conditional dependencies<a class="headerlink" href="#multiple-sets-of-conditional-dependencies" title="Permalink to this heading">¶</a></h2> +<h2>Multiple sets of conditional dependencies<a class="headerlink" href="#multiple-sets-of-conditional-dependencies" title="Link to this heading">¶</a></h2> <p>The hardest case for this eclass is to declare multiple Python dependencies conditional to different USE flags. While there are multiple possible ways of doing that, the least error-prone is to move @@ -376,7 +376,7 @@ USE conditional blocks inside <code class="docutils literal notranslate"><span c ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/basic.html b/guide/basic.html index a89c885..d9e698c 100644 --- a/guide/basic.html +++ b/guide/basic.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Common basics — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="python-any-r1 — build-time dependency" href="any.html" /> @@ -32,13 +32,13 @@ <div class="body" role="main"> <section id="common-basics"> -<h1>Common basics<a class="headerlink" href="#common-basics" title="Permalink to this heading">¶</a></h1> +<h1>Common basics<a class="headerlink" href="#common-basics" title="Link to this heading">¶</a></h1> <p>The various eclasses in python-r1 try to follow a single design. You will probably use more than one of them, so it is worthwhile to shortly explain the common bits used by all of them, as well as the non-obvious differences between them.</p> <section id="python-compat"> -<span id="index-0"></span><h2>PYTHON_COMPAT<a class="headerlink" href="#python-compat" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>PYTHON_COMPAT<a class="headerlink" href="#python-compat" title="Link to this heading">¶</a></h2> <p>The <code class="docutils literal notranslate"><span class="pre">PYTHON_COMPAT</span></code> variable is used by all Python eclasses, and must be declared in all ebuilds before they are inherited. It specifies the list of Python implementations supported by the package.</p> @@ -52,9 +52,9 @@ the list of Python implementations supported by the package.</p> inherit<span class="w"> </span>python-single-r1 </pre></div> </div> -<span class="target" id="index-1"></span></section> +</section> <section id="python-deps-and-python-required-use"> -<span id="index-2"></span><h2>PYTHON_DEPS and PYTHON_REQUIRED_USE<a class="headerlink" href="#python-deps-and-python-required-use" title="Permalink to this heading">¶</a></h2> +<span id="index-2"></span><span id="index-1"></span><h2>PYTHON_DEPS and PYTHON_REQUIRED_USE<a class="headerlink" href="#python-deps-and-python-required-use" title="Link to this heading">¶</a></h2> <p>The <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code>, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> and <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> eclasses all assume that the developer is responsible for explicitly putting the dependency strings and USE requirements in correct variables. @@ -74,9 +74,9 @@ Python unconditionally is to define the following:</p> </div> <p>This does not apply to <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> as it does the above assignment by default.</p> -<span class="target" id="index-3"></span></section> +</section> <section id="python-environment"> -<span id="index-4"></span><h2>Python environment<a class="headerlink" href="#python-environment" title="Permalink to this heading">¶</a></h2> +<span id="index-4"></span><span id="index-3"></span><h2>Python environment<a class="headerlink" href="#python-environment" title="Link to this heading">¶</a></h2> <p>The eclasses commonly use the concept of <em>Python environment</em>. This means a state of environment enforcing a particular Python implementation. Whenever the ebuild code is run inside this @@ -110,7 +110,7 @@ via calling <code class="docutils literal notranslate"><span class="pre">python_ <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> in <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> and <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code>.</p> </section> <section id="dependencies-in-python-packages"> -<h2>Dependencies in Python packages<a class="headerlink" href="#dependencies-in-python-packages" title="Permalink to this heading">¶</a></h2> +<h2>Dependencies in Python packages<a class="headerlink" href="#dependencies-in-python-packages" title="Link to this heading">¶</a></h2> <div class="admonition note"> <p class="admonition-title">Note</p> <p>The following sections focus specifically on dependencies that @@ -118,8 +118,8 @@ are Python packages. Python software often depends on external tools, libraries written in other programming languages, etc. For these dependencies, the usual Gentoo rules apply.</p> </div> -<span class="target" id="index-5"></span><span class="target" id="index-6"></span><section id="the-most-common-dependency-types"> -<span id="index-7"></span><h3>The most common dependency types<a class="headerlink" href="#the-most-common-dependency-types" title="Permalink to this heading">¶</a></h3> +<section id="the-most-common-dependency-types"> +<span id="index-7"></span><span id="index-6"></span><span id="index-5"></span><h3>The most common dependency types<a class="headerlink" href="#the-most-common-dependency-types" title="Link to this heading">¶</a></h3> <p>The dependencies found in Python packages can usually be classified into two categories: runtime dependencies and build-time dependencies.</p> <p><em>Runtime dependencies</em> are packages that are required to be present @@ -186,7 +186,7 @@ in all three of <code class="docutils literal notranslate"><span class="pre">RDE or for tests).</p> </section> <section id="finding-dependency-lists-from-build-systems"> -<h3>Finding dependency lists from build systems<a class="headerlink" href="#finding-dependency-lists-from-build-systems" title="Permalink to this heading">¶</a></h3> +<h3>Finding dependency lists from build systems<a class="headerlink" href="#finding-dependency-lists-from-build-systems" title="Link to this heading">¶</a></h3> <p>Most of the modern Python build systems include all the package metadata in the <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file. Setuptools are using <code class="docutils literal notranslate"><span class="pre">setup.cfg</span></code> and/or <code class="docutils literal notranslate"><span class="pre">setup.py</span></code>. Some packages also include custom code to read @@ -338,7 +338,7 @@ or <code class="docutils literal notranslate"><span class="pre">noxfile.py</span ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/buildsys.html b/guide/buildsys.html index b88226e..383879c 100644 --- a/guide/buildsys.html +++ b/guide/buildsys.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Integration with build systems written in Python — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Porting tips" href="porting.html" /> @@ -32,21 +32,21 @@ <div class="body" role="main"> <section id="integration-with-build-systems-written-in-python"> -<h1>Integration with build systems written in Python<a class="headerlink" href="#integration-with-build-systems-written-in-python" title="Permalink to this heading">¶</a></h1> +<h1>Integration with build systems written in Python<a class="headerlink" href="#integration-with-build-systems-written-in-python" title="Link to this heading">¶</a></h1> <p>Besides the build systems commonly used by Python packages there are a few build systems written in Python and requiring the packages to script them in Python. This makes it necessary to use a proper Python eclass in order to declare their compatibility with Python versions.</p> <section id="meson"> -<h2>Meson<a class="headerlink" href="#meson" title="Permalink to this heading">¶</a></h2> +<h2>Meson<a class="headerlink" href="#meson" title="Link to this heading">¶</a></h2> <p><a class="reference external" href="https://mesonbuild.com/">Meson</a> build system is a fairly recent addition. While it is written in Python, its scripts use a custom Python-agnostic script language. Hence, it can be treated as an arbitrary external tool and does not need any Python eclass.</p> </section> <section id="scons"> -<h2>SCons<a class="headerlink" href="#scons" title="Permalink to this heading">¶</a></h2> +<h2>SCons<a class="headerlink" href="#scons" title="Link to this heading">¶</a></h2> <p><a class="reference external" href="https://scons.org/">SCons</a> has gained Python 3 support quite recently. At the same time, many old script files were written for Python 2 and fail when run via Python 3 SCons. For this reason, it is necessary to use Python @@ -60,7 +60,7 @@ The latter eclass takes care of setting as much as possible.</p> for them and use an appropriate eclass as detailed in the eclass choice chapter.</p> <section id="build-time-use-with-no-extra-dependencies"> -<h3>Build-time use with no extra dependencies<a class="headerlink" href="#build-time-use-with-no-extra-dependencies" title="Permalink to this heading">¶</a></h3> +<h3>Build-time use with no extra dependencies<a class="headerlink" href="#build-time-use-with-no-extra-dependencies" title="Link to this heading">¶</a></h3> <p>If the package either has no other Python components than SCons, or all of them are purely build-time and have no dependencies, it is sufficient to inherit <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code>. The eclass takes care of setting @@ -121,7 +121,7 @@ to inherit <code class="docutils literal notranslate"><span class="pre">python-a </div> </section> <section id="build-time-use-with-extra-dependencies"> -<h3>Build-time use with extra dependencies<a class="headerlink" href="#build-time-use-with-extra-dependencies" title="Permalink to this heading">¶</a></h3> +<h3>Build-time use with extra dependencies<a class="headerlink" href="#build-time-use-with-extra-dependencies" title="Link to this heading">¶</a></h3> <p>If the package has extra dependencies, you need to take care of <em>all</em> dependencies yourself. This is because <code class="docutils literal notranslate"><span class="pre">python_gen_any_dep</span></code> cannot be combined.</p> @@ -216,7 +216,7 @@ be combined.</p> </div> </section> <section id="single-impl-package"> -<h3>Single-impl package<a class="headerlink" href="#single-impl-package" title="Permalink to this heading">¶</a></h3> +<h3>Single-impl package<a class="headerlink" href="#single-impl-package" title="Link to this heading">¶</a></h3> <p>If the package needs to install some Python components, and single-impl install is appropriate, you need to combine <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> with <code class="docutils literal notranslate"><span class="pre">scons-utils</span></code>. In this case, the eclass takes care of everything @@ -286,7 +286,7 @@ package.</p> </div> </section> <section id="single-impl-package-with-conditional-python-install"> -<h3>Single-impl package with conditional Python install<a class="headerlink" href="#single-impl-package-with-conditional-python-install" title="Permalink to this heading">¶</a></h3> +<h3>Single-impl package with conditional Python install<a class="headerlink" href="#single-impl-package-with-conditional-python-install" title="Link to this heading">¶</a></h3> <p>If the runtime part of the package uses Python only conditionally, the use is similar to a package with unconditional build-time and conditional runtime dependency on Python. That is, build-time @@ -391,7 +391,7 @@ unconditionally.</p> </div> </section> <section id="pure-python-multi-impl-package"> -<h3>Pure Python multi-impl package<a class="headerlink" href="#pure-python-multi-impl-package" title="Permalink to this heading">¶</a></h3> +<h3>Pure Python multi-impl package<a class="headerlink" href="#pure-python-multi-impl-package" title="Link to this heading">¶</a></h3> <p>When you are dealing with a pure Python package using SCons, it makes sense to use plain <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> API. This means that SCons is going to be called from a <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code> loop only.</p> @@ -467,7 +467,7 @@ to be called from a <code class="docutils literal notranslate"><span class="pre" </div> </section> <section id="hybrid-python-r1-scons-package"> -<h3>Hybrid python-r1 + SCons package<a class="headerlink" href="#hybrid-python-r1-scons-package" title="Permalink to this heading">¶</a></h3> +<h3>Hybrid python-r1 + SCons package<a class="headerlink" href="#hybrid-python-r1-scons-package" title="Link to this heading">¶</a></h3> <p>Finally, let’s consider a package that uses SCons as a build system and installs Python components independently of it. This could be e.g. a C/C++ program with separate Python bindings.</p> @@ -538,7 +538,7 @@ case, the any-r1 API is recommended.</p> </section> </section> <section id="waf"> -<h2>waf<a class="headerlink" href="#waf" title="Permalink to this heading">¶</a></h2> +<h2>waf<a class="headerlink" href="#waf" title="Link to this heading">¶</a></h2> <p>The <a class="reference external" href="https://waf.io/">waf</a> build system is written in Python and bundled with the packages using it. Therefore, it is necessary to combine <code class="docutils literal notranslate"><span class="pre">waf-utils</span></code> eclass with one of the Python eclasses.</p> @@ -551,7 +551,7 @@ interpreter, it is necessary to add <code class="docutils literal notranslate">< all waf packages (combined with individual package requirements if applicable).</p> <section id="build-time-use"> -<h3>Build-time use<a class="headerlink" href="#build-time-use" title="Permalink to this heading">¶</a></h3> +<h3>Build-time use<a class="headerlink" href="#build-time-use" title="Link to this heading">¶</a></h3> <p>If waf is the only build-time Python script in the package, it is only necessary to add <code class="docutils literal notranslate"><span class="pre">PYTHON_REQ_USE</span></code> and <code class="docutils literal notranslate"><span class="pre">${PYTHON_DEPS}</span></code> to build-time dependencies. If the package had other Python dependencies, you would @@ -582,7 +582,7 @@ specify them instead.</p> </div> </section> <section id="id1"> -<h3>Single-impl package<a class="headerlink" href="#id1" title="Permalink to this heading">¶</a></h3> +<h3>Single-impl package<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h3> <p>The rules for integrating simple-impl package are roughly the same as for pure <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> use. Again, waf requires only plain build-time <code class="docutils literal notranslate"><span class="pre">${PYTHON_DEPS}</span></code> and <code class="docutils literal notranslate"><span class="pre">PYTHON_REQ_USE</span></code>.</p> @@ -730,7 +730,7 @@ build-time <code class="docutils literal notranslate"><span class="pre">${PYTHON ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/concept.html b/guide/concept.html index a200d80..840c498 100644 --- a/guide/concept.html +++ b/guide/concept.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Advanced concepts — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Expert python-r1 usage" href="expert-multi.html" /> @@ -32,11 +32,11 @@ <div class="body" role="main"> <section id="advanced-concepts"> -<h1>Advanced concepts<a class="headerlink" href="#advanced-concepts" title="Permalink to this heading">¶</a></h1> +<h1>Advanced concepts<a class="headerlink" href="#advanced-concepts" title="Link to this heading">¶</a></h1> <section id="namespace-packages"> -<h2>Namespace packages<a class="headerlink" href="#namespace-packages" title="Permalink to this heading">¶</a></h2> +<h2>Namespace packages<a class="headerlink" href="#namespace-packages" title="Link to this heading">¶</a></h2> <section id="hierarchical-package-structure"> -<h3>Hierarchical package structure<a class="headerlink" href="#hierarchical-package-structure" title="Permalink to this heading">¶</a></h3> +<h3>Hierarchical package structure<a class="headerlink" href="#hierarchical-package-structure" title="Link to this heading">¶</a></h3> <p>Traditionally, Python packages were organized into a hierarchical structure with modules and subpackages being located inside the parent package directory. When submodules are imported, they are represented @@ -81,7 +81,7 @@ package directory:</p> to the build directory. However, there is a better solution.</p> </section> <section id="namespace-package-structure"> -<h3>Namespace package structure<a class="headerlink" href="#namespace-package-structure" title="Permalink to this heading">¶</a></h3> +<h3>Namespace package structure<a class="headerlink" href="#namespace-package-structure" title="Link to this heading">¶</a></h3> <p>Unlike traditional packages, namespace packages act as a kind of proxy. They are not strictly bound to the containing directory, and instead permit loading subpackages from all directories found in module search @@ -127,7 +127,7 @@ of Python.</p> namespace packages</a> in Python Packaging User Guide.</p> </section> <section id="determining-whether-namespaces-are-used"> -<h3>Determining whether namespaces are used<a class="headerlink" href="#determining-whether-namespaces-are-used" title="Permalink to this heading">¶</a></h3> +<h3>Determining whether namespaces are used<a class="headerlink" href="#determining-whether-namespaces-are-used" title="Link to this heading">¶</a></h3> <p>The exact method of detecting namespace packages depends on the type of namespace used.</p> <p>PEP 420 namespaces can generally be recognized by the lack @@ -148,7 +148,7 @@ or <code class="docutils literal notranslate"><span class="pre">setup.cfg</span> file that does enable setuptools namespaces.</p> </section> <section id="adding-new-namespace-packages-to-gentoo"> -<h3>Adding new namespace packages to Gentoo<a class="headerlink" href="#adding-new-namespace-packages-to-gentoo" title="Permalink to this heading">¶</a></h3> +<h3>Adding new namespace packages to Gentoo<a class="headerlink" href="#adding-new-namespace-packages-to-gentoo" title="Link to this heading">¶</a></h3> <p>If the package uses PEP 420 namespaces, no special action is required. Per PEP 420 layout, the package must not install <code class="docutils literal notranslate"><span class="pre">__init__.py</span></code> files for namespaces.</p> @@ -185,7 +185,7 @@ sources, this dependency needs to be stripped, e.g.:</p> </div> </section> <section id="legacy-namespace-packages-in-gentoo"> -<h3>Legacy namespace packages in Gentoo<a class="headerlink" href="#legacy-namespace-packages-in-gentoo" title="Permalink to this heading">¶</a></h3> +<h3>Legacy namespace packages in Gentoo<a class="headerlink" href="#legacy-namespace-packages-in-gentoo" title="Link to this heading">¶</a></h3> <p>Historically, Gentoo has used <code class="docutils literal notranslate"><span class="pre">dev-python/namespace-*</span></code> packages to support namespaces. This method is deprecated and it is in process of being retired.</p> @@ -274,7 +274,7 @@ of being retired.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/depend.html b/guide/depend.html index e0534fb..48a140c 100644 --- a/guide/depend.html +++ b/guide/depend.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Advanced dependencies — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="pytest recipes" href="pytest.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="advanced-dependencies"> -<h1>Advanced dependencies<a class="headerlink" href="#advanced-dependencies" title="Permalink to this heading">¶</a></h1> -<span class="target" id="index-0"></span><section id="requesting-use-flags-on-the-python-interpreter"> -<span id="index-1"></span><h2>Requesting USE flags on the Python interpreter<a class="headerlink" href="#requesting-use-flags-on-the-python-interpreter" title="Permalink to this heading">¶</a></h2> +<h1>Advanced dependencies<a class="headerlink" href="#advanced-dependencies" title="Link to this heading">¶</a></h1> +<section id="requesting-use-flags-on-the-python-interpreter"> +<span id="index-1"></span><span id="index-0"></span><h2>Requesting USE flags on the Python interpreter<a class="headerlink" href="#requesting-use-flags-on-the-python-interpreter" title="Link to this heading">¶</a></h2> <p>While the majority of Python standard library modules are available unconditionally, a few are controlled by USE flags. For example, the <a class="reference external" href="https://docs.python.org/3.8/library/sqlite3.html">sqlite3</a> module requires <code class="docutils literal notranslate"><span class="pre">sqlite</span></code> flag to be enabled @@ -125,7 +125,7 @@ SQLite support when running tests:</p> </div> </section> <section id="dependencies-conditional-to-python-version"> -<span id="index-2"></span><h2>Dependencies conditional to Python version<a class="headerlink" href="#dependencies-conditional-to-python-version" title="Permalink to this heading">¶</a></h2> +<span id="index-2"></span><h2>Dependencies conditional to Python version<a class="headerlink" href="#dependencies-conditional-to-python-version" title="Link to this heading">¶</a></h2> <p>When packaging software for multiple Python versions, it is quite likely that you’ll find yourself needing some packages only with some of the versions, and not with others. This is the case with backports @@ -199,7 +199,7 @@ Python 3.7 was removed:</p> </div> </section> <section id="dependencies-on-cffi-and-greenlet"> -<span id="index-3"></span><h2>Dependencies on CFFI and greenlet<a class="headerlink" href="#dependencies-on-cffi-and-greenlet" title="Permalink to this heading">¶</a></h2> +<span id="index-3"></span><h2>Dependencies on CFFI and greenlet<a class="headerlink" href="#dependencies-on-cffi-and-greenlet" title="Link to this heading">¶</a></h2> <p>The PyPy distribution includes special versions of the <a class="reference external" href="https://pypi.org/project/cffi/">cffi</a> and <a class="reference external" href="https://pypi.org/project/greenlet/">greenlet</a> packages. For this reason, packages using CFFI and/or greenlet and supporting PyPy3 need to make the explicit @@ -213,7 +213,7 @@ dependencies conditional to CPython:</p> </div> </section> <section id="optional-test-suite-dependencies-on-rust-packages"> -<span id="index-4"></span><h2>Optional test suite dependencies on Rust packages<a class="headerlink" href="#optional-test-suite-dependencies-on-rust-packages" title="Permalink to this heading">¶</a></h2> +<span id="index-4"></span><h2>Optional test suite dependencies on Rust packages<a class="headerlink" href="#optional-test-suite-dependencies-on-rust-packages" title="Link to this heading">¶</a></h2> <p>When the test suite of a high-profile Python package starts depending on Python-Rust packages, it may not be feasible to mask the package on all architectures that are not supported by Rust. In this case, @@ -349,7 +349,7 @@ to run them.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/distutils-legacy.html b/guide/distutils-legacy.html index a47fb79..1280f34 100644 --- a/guide/distutils-legacy.html +++ b/guide/distutils-legacy.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>distutils-r1 legacy concepts — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="pypi — helper eclass for PyPI archives" href="pypi.html" /> @@ -32,12 +32,12 @@ <div class="body" role="main"> <section id="distutils-r1-legacy-concepts"> -<h1>distutils-r1 legacy concepts<a class="headerlink" href="#distutils-r1-legacy-concepts" title="Permalink to this heading">¶</a></h1> +<h1>distutils-r1 legacy concepts<a class="headerlink" href="#distutils-r1-legacy-concepts" title="Link to this heading">¶</a></h1> <p>This section describes concepts specific to the legacy mode of the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass. When using the modern PEP 517 mode, none of the features described here are available.</p> <section id="different-build-system-variations"> -<span id="index-0"></span><h2>Different build system variations<a class="headerlink" href="#different-build-system-variations" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>Different build system variations<a class="headerlink" href="#different-build-system-variations" title="Link to this heading">¶</a></h2> <p>The commonly used build systems specific to Python packages can be classified for eclass support into following groups:</p> <ol class="arabic simple"> @@ -54,7 +54,7 @@ are used, the package needs to have a runtime dependency on <code class="docutils literal notranslate"><span class="pre">dev-python/setuptools</span></code>. Otherwise, a build-time dependency is sufficient.</p> <section id="distutils-use-setuptools"> -<h3>DISTUTILS_USE_SETUPTOOLS<a class="headerlink" href="#distutils-use-setuptools" title="Permalink to this heading">¶</a></h3> +<h3>DISTUTILS_USE_SETUPTOOLS<a class="headerlink" href="#distutils-use-setuptools" title="Link to this heading">¶</a></h3> <p>The most common case right now is a package using setuptools as a build system, and therefore needing a build-time dependency only. This is the eclass’ default. If your package does not fit this profile, @@ -105,7 +105,7 @@ An example report is:</p> </div> </section> <section id="distutils-and-setuptools-build-systems"> -<h3>distutils and setuptools build systems<a class="headerlink" href="#distutils-and-setuptools-build-systems" title="Permalink to this heading">¶</a></h3> +<h3>distutils and setuptools build systems<a class="headerlink" href="#distutils-and-setuptools-build-systems" title="Link to this heading">¶</a></h3> <p>Distutils and setuptools are the two most common build systems for Python packages right now. Their common feature is that they use a <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> script that interfaces with the build system. Generally, @@ -146,7 +146,7 @@ be necessary if you want to force distutils (e.g. to enable clean bootstrap) or the upstream condition requiers that.</p> </section> <section id="setuptools-entry-points"> -<h3>Setuptools’ entry points<a class="headerlink" href="#setuptools-entry-points" title="Permalink to this heading">¶</a></h3> +<h3>Setuptools’ entry points<a class="headerlink" href="#setuptools-entry-points" title="Link to this heading">¶</a></h3> <div class="admonition important"> <p class="admonition-title">Important</p> <p>With removal of Python 3.7, the correct <code class="docutils literal notranslate"><span class="pre">DISTUTILS_USE_SETUPTOOLS</span></code> @@ -195,7 +195,7 @@ the QA check will also trigger the wrong value because of leftover explicit dependencies on setuptools.</p> </section> <section id="other-runtime-uses-of-setuptools"> -<h3>Other runtime uses of setuptools<a class="headerlink" href="#other-runtime-uses-of-setuptools" title="Permalink to this heading">¶</a></h3> +<h3>Other runtime uses of setuptools<a class="headerlink" href="#other-runtime-uses-of-setuptools" title="Link to this heading">¶</a></h3> <p>Besides the generated wrapper scripts, the package code itself may use the <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> or <code class="docutils literal notranslate"><span class="pre">pkg_resources</span></code> packages. The common cases for this include getting package metadata and resource files. This @@ -209,7 +209,7 @@ dependency. If <code class="docutils literal notranslate"><span class="pre">ins in the installed modules, please submit a patch upstream.</p> </section> <section id="pyproject-toml-based-projects"> -<h3>pyproject.toml-based projects<a class="headerlink" href="#pyproject-toml-based-projects" title="Permalink to this heading">¶</a></h3> +<h3>pyproject.toml-based projects<a class="headerlink" href="#pyproject-toml-based-projects" title="Link to this heading">¶</a></h3> <p>The newer build systems used for Python packages avoid supplying <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> and instead declare package’s metadata and build system information in <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code>. Examples of these build systems @@ -229,7 +229,7 @@ points is not updated.</p> </section> </section> <section id="in-source-vs-out-of-source-builds"> -<span id="index-1"></span><h2>In-source vs out-of-source builds<a class="headerlink" href="#in-source-vs-out-of-source-builds" title="Permalink to this heading">¶</a></h2> +<span id="index-1"></span><h2>In-source vs out-of-source builds<a class="headerlink" href="#in-source-vs-out-of-source-builds" title="Link to this heading">¶</a></h2> <p>In the general definition, an <em>out-of-source build</em> is a build where output files are placed in a directory separate from source files. By default, distutils and its derivatives always do out-of-source builds @@ -280,7 +280,7 @@ files are contained within the copy used for the current interpreter.</p> </div> </section> <section id="installing-the-package-before-testing"> -<span id="index-2"></span><h2>Installing the package before testing<a class="headerlink" href="#installing-the-package-before-testing" title="Permalink to this heading">¶</a></h2> +<span id="index-2"></span><h2>Installing the package before testing<a class="headerlink" href="#installing-the-package-before-testing" title="Link to this heading">¶</a></h2> <p>The tests are executed in <code class="docutils literal notranslate"><span class="pre">src_test</span></code> phase, after <code class="docutils literal notranslate"><span class="pre">src_compile</span></code> installed package files into the build directory. The eclass automatically adds appropriate <code class="docutils literal notranslate"><span class="pre">PYTHONPATH</span></code> so that the installed @@ -407,7 +407,7 @@ has broken it for most of the consumers.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/distutils.html b/guide/distutils.html index 3cfc914..968660f 100644 --- a/guide/distutils.html +++ b/guide/distutils.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>distutils-r1 — standard Python build systems — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Tests in Python packages" href="test.html" /> @@ -32,7 +32,7 @@ <div class="body" role="main"> <section id="distutils-r1-standard-python-build-systems"> -<h1>distutils-r1 — standard Python build systems<a class="headerlink" href="#distutils-r1-standard-python-build-systems" title="Permalink to this heading">¶</a></h1> +<h1>distutils-r1 — standard Python build systems<a class="headerlink" href="#distutils-r1-standard-python-build-systems" title="Link to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass is used to facilitate build systems using <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> (distutils and its derivatives, notably setuptools) or <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> (flit, poetry). It is built on top @@ -40,7 +40,7 @@ of <code class="docutils literal notranslate"><span class="pre">python-r1</span> efficiently building multi-impl and single-impl packages.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/distutils-r1.eclass/index.html">distutils-r1.eclass(5)</a></p> <section id="the-pep-517-and-legacy-modes"> -<h2>The PEP 517 and legacy modes<a class="headerlink" href="#the-pep-517-and-legacy-modes" title="Permalink to this heading">¶</a></h2> +<h2>The PEP 517 and legacy modes<a class="headerlink" href="#the-pep-517-and-legacy-modes" title="Link to this heading">¶</a></h2> <p>The <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass has currently two modes of operation: the PEP 517 mode and the legacy mode. The former mode should be preferred for new ebuilds; the latter is provided for backwards @@ -66,7 +66,7 @@ variable. The legal values can be found in the <a class="reference internal" hr systems</a> section. If unset, the legacy mode is used.</p> </section> <section id="basic-use-pep-517-mode"> -<h2>Basic use (PEP 517 mode)<a class="headerlink" href="#basic-use-pep-517-mode" title="Permalink to this heading">¶</a></h2> +<h2>Basic use (PEP 517 mode)<a class="headerlink" href="#basic-use-pep-517-mode" title="Link to this heading">¶</a></h2> <p>By default, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> sets appropriate metadata variables and exports a full set of phase functions necessary to install packages using Python build systems.</p> @@ -95,7 +95,7 @@ for the build system.</p> </div> </section> <section id="source-archives"> -<span id="id1"></span><h2>Source archives<a class="headerlink" href="#source-archives" title="Permalink to this heading">¶</a></h2> +<span id="id1"></span><h2>Source archives<a class="headerlink" href="#source-archives" title="Link to this heading">¶</a></h2> <p>The vast majority of Python packages can be found in the <a class="reference external" href="https://pypi.org/">Python Package Index (PyPI)</a>. Often this includes both source (sdist) and binary (wheel) packages. In addition to that, many packages have public VCS @@ -135,7 +135,7 @@ cf. <a class="reference internal" href="#packages-using-cython">packages using C </ol> </section> <section id="dependencies"> -<h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> +<h2>Dependencies<a class="headerlink" href="#dependencies" title="Link to this heading">¶</a></h2> <p>Dependencies on Python packages are declared using the same method as the underlying eclass — that is, <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> or <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code>.</p> @@ -175,7 +175,7 @@ the widest test coverage, and avoid unpredictable test failures on users who have more dependencies installed).</p> </section> <section id="python-single-r1-variant"> -<span id="index-0"></span><h2>python-single-r1 variant<a class="headerlink" href="#python-single-r1-variant" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>python-single-r1 variant<a class="headerlink" href="#python-single-r1-variant" title="Link to this heading">¶</a></h2> <p>Normally, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> uses <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> to build multi-impl packages, and this is the recommended mode. However, in some cases you will need to use <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> instead, especially if you @@ -221,7 +221,7 @@ to be rewritten.</p> </div> </section> <section id="pep-517-build-systems"> -<span id="index-1"></span><h2>PEP 517 build systems<a class="headerlink" href="#pep-517-build-systems" title="Permalink to this heading">¶</a></h2> +<span id="index-1"></span><h2>PEP 517 build systems<a class="headerlink" href="#pep-517-build-systems" title="Link to this heading">¶</a></h2> <p>The majority of examples in this guide assume using setuptools build system. However, PEP 517 mode provides support for other build systems.</p> <p>In order to determine the correct build system used, read @@ -318,9 +318,9 @@ backend.</p> the <code class="docutils literal notranslate"><span class="pre">setuptools</span></code> backend (this applies to pure distutils packages as well). The eclass automatically uses the legacy setuptools backend for them.</p> -<span class="target" id="index-2"></span><span class="target" id="index-3"></span><span class="target" id="index-4"></span><span class="target" id="index-5"></span></section> +</section> <section id="setuptools-scm-flit-scm-hatch-vcs-pdm-backend-and-snapshots"> -<span id="index-6"></span><h2>setuptools_scm (flit_scm, hatch-vcs, pdm-backend) and snapshots<a class="headerlink" href="#setuptools-scm-flit-scm-hatch-vcs-pdm-backend-and-snapshots" title="Permalink to this heading">¶</a></h2> +<span id="index-6"></span><span id="index-5"></span><span id="index-4"></span><span id="index-3"></span><span id="index-2"></span><h2>setuptools_scm (flit_scm, hatch-vcs, pdm-backend) and snapshots<a class="headerlink" href="#setuptools-scm-flit-scm-hatch-vcs-pdm-backend-and-snapshots" title="Link to this heading">¶</a></h2> <p><a class="reference external" href="https://pypi.org/project/setuptools-scm/">setuptools_scm</a> is a package providing additional features for running inside a VCS checkout, in particular the ability to determine version from VCS tags. However, this works correctly only when the package @@ -376,7 +376,7 @@ backend can be set using a similarly purposed environment variable:</p> </div> </section> <section id="packages-installing-extensions-c-rust"> -<span id="index-7"></span><h2>Packages installing extensions (C, Rust…)<a class="headerlink" href="#packages-installing-extensions-c-rust" title="Permalink to this heading">¶</a></h2> +<span id="index-7"></span><h2>Packages installing extensions (C, Rust…)<a class="headerlink" href="#packages-installing-extensions-c-rust" title="Link to this heading">¶</a></h2> <p>Python extensions are compiled (C, Cython, Rust…) loadable modules. They can generally be recognized by the presence of <code class="docutils literal notranslate"><span class="pre">.so</span></code> files in site-packages directory.</p> @@ -419,7 +419,7 @@ is missing:</p> </div> </section> <section id="packages-using-cython"> -<span id="index-8"></span><h2>Packages using Cython<a class="headerlink" href="#packages-using-cython" title="Permalink to this heading">¶</a></h2> +<span id="index-8"></span><h2>Packages using Cython<a class="headerlink" href="#packages-using-cython" title="Link to this heading">¶</a></h2> <p><a class="reference external" href="https://cython.org/">Cython</a> is a static compiler that permits writing Python extensions in a hybrid of C and Python. Cython files are compiled into C code that is compatible with multiple Python interpreters. This makes it @@ -456,7 +456,7 @@ src_configure<span class="o">()</span><span class="w"> </span><span class="o">{< is compatible with all Python versions.</p> </section> <section id="parallel-build-race-conditions"> -<h2>Parallel build race conditions<a class="headerlink" href="#parallel-build-race-conditions" title="Permalink to this heading">¶</a></h2> +<h2>Parallel build race conditions<a class="headerlink" href="#parallel-build-race-conditions" title="Link to this heading">¶</a></h2> <p>The distutils build system has a major unresolved bug regarding race conditions. If the same source file is used to build multiple Python extensions, the build can start multiple simultaneous compiler processes @@ -488,7 +488,7 @@ additional .c files that <code class="docutils literal notranslate"><span class= source files for every extension.</p> </section> <section id="sub-phase-functions"> -<h2>Sub-phase functions<a class="headerlink" href="#sub-phase-functions" title="Permalink to this heading">¶</a></h2> +<h2>Sub-phase functions<a class="headerlink" href="#sub-phase-functions" title="Link to this heading">¶</a></h2> <p>Ebuilds define phase functions in order to conveniently override parts of the build process. <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> extends this concept by introducing <em>sub-phases</em>. All <code class="docutils literal notranslate"><span class="pre">src_*</span></code> phases in ebuild are split @@ -518,8 +518,8 @@ run in the following order:</p> defining <code class="docutils literal notranslate"><span class="pre">${BUILD_DIR}</span></code> to a dedicated build directory for each implementation. However, if in-source builds are enabled, all phases are run in these build directories.</p> -<span class="target" id="index-9"></span><section id="python-prepare"> -<span id="index-10"></span><h3>python_prepare<a class="headerlink" href="#python-prepare" title="Permalink to this heading">¶</a></h3> +<section id="python-prepare"> +<span id="index-10"></span><span id="index-9"></span><h3>python_prepare<a class="headerlink" href="#python-prepare" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_prepare_all</span></code> is responsible for applying changes to the package sources that are common to all Python implementations. The default implementation performs the tasks of <code class="docutils literal notranslate"><span class="pre">default_src_prepare</span></code> @@ -561,9 +561,9 @@ enables in-source builds.</p> <span class="o">}</span> </pre></div> </div> -<span class="target" id="index-11"></span></section> +</section> <section id="python-configure"> -<span id="index-12"></span><h3>python_configure<a class="headerlink" href="#python-configure" title="Permalink to this heading">¶</a></h3> +<span id="index-12"></span><span id="index-11"></span><h3>python_configure<a class="headerlink" href="#python-configure" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_configure</span></code> and <code class="docutils literal notranslate"><span class="pre">python_configure_all</span></code> have no default functionality. The former is convenient for running additional configuration steps if needed by the package, the latter for defining @@ -581,9 +581,9 @@ global environment variables.</p> <span class="o">}</span> </pre></div> </div> -<span class="target" id="index-13"></span></section> +</section> <section id="python-compile"> -<span id="index-14"></span><h3>python_compile<a class="headerlink" href="#python-compile" title="Permalink to this heading">¶</a></h3> +<span id="index-14"></span><span id="index-13"></span><h3>python_compile<a class="headerlink" href="#python-compile" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_compile</span></code> normally builds the package. It is sometimes used to pass additional arguments to the build step. For example, it can be used to disable parallel extension builds in packages that are broken @@ -602,9 +602,9 @@ the documentation (see <code class="docutils literal notranslate"><span class="p <span class="o">}</span> </pre></div> </div> -<span class="target" id="index-15"></span></section> +</section> <section id="python-test"> -<span id="index-16"></span><h3>python_test<a class="headerlink" href="#python-test" title="Permalink to this heading">¶</a></h3> +<span id="index-16"></span><span id="index-15"></span><h3>python_test<a class="headerlink" href="#python-test" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_test</span></code> is responsible for running tests. It has no default implementation but you are strongly encouraged to provide one (either directly or via <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code>). <code class="docutils literal notranslate"><span class="pre">python_test_all</span></code> @@ -615,9 +615,9 @@ to Python.</p> <span class="o">}</span> </pre></div> </div> -<span class="target" id="index-17"></span></section> +</section> <section id="python-install"> -<span id="index-18"></span><h3>python_install<a class="headerlink" href="#python-install" title="Permalink to this heading">¶</a></h3> +<span id="index-18"></span><span id="index-17"></span><h3>python_install<a class="headerlink" href="#python-install" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">python_install</span></code> installs the package’s Python part. It is usually redefined in order to pass additional <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> arguments or to install additional Python modules.</p> @@ -646,7 +646,7 @@ such as bash completions or examples.</p> </section> </section> <section id="passing-arguments-to-setup-py"> -<span id="index-19"></span><h2>Passing arguments to setup.py<a class="headerlink" href="#passing-arguments-to-setup-py" title="Permalink to this heading">¶</a></h2> +<span id="index-19"></span><h2>Passing arguments to setup.py<a class="headerlink" href="#passing-arguments-to-setup-py" title="Link to this heading">¶</a></h2> <p>There are two main methods of accepting additional command-line options in <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> scripts: using global options and via command options.</p> <p>Global options are usually implemented through manipulating <code class="docutils literal notranslate"><span class="pre">sys.path</span></code> @@ -685,7 +685,7 @@ take boolean arguments. In this case, the ebuild can use:</p> </div> </section> <section id="calling-custom-setup-py-commands"> -<span id="index-20"></span><h2>Calling custom setup.py commands<a class="headerlink" href="#calling-custom-setup-py-commands" title="Permalink to this heading">¶</a></h2> +<span id="index-20"></span><h2>Calling custom setup.py commands<a class="headerlink" href="#calling-custom-setup-py-commands" title="Link to this heading">¶</a></h2> <p>When working on packages using setuptools or modified distutils, you sometimes need to manually invoke <code class="docutils literal notranslate"><span class="pre">setup.py</span></code>. The eclass provides a <code class="docutils literal notranslate"><span class="pre">esetup.py</span></code> helper that wraps it with additional checks, error @@ -699,11 +699,11 @@ beforehand (much like <code class="docutils literal notranslate"><span class="pr </div> </section> <section id="enabling-tests"> -<h2>Enabling tests<a class="headerlink" href="#enabling-tests" title="Permalink to this heading">¶</a></h2> +<h2>Enabling tests<a class="headerlink" href="#enabling-tests" title="Link to this heading">¶</a></h2> <p>The support for test suites is now covered in the <a class="reference internal" href="test.html"><span class="doc">Tests in Python packages</span></a> chapter.</p> </section> <section id="building-documentation-via-sphinx"> -<span id="index-21"></span><h2>Building documentation via Sphinx<a class="headerlink" href="#building-documentation-via-sphinx" title="Permalink to this heading">¶</a></h2> +<span id="index-21"></span><h2>Building documentation via Sphinx<a class="headerlink" href="#building-documentation-via-sphinx" title="Link to this heading">¶</a></h2> <p><code class="docutils literal notranslate"><span class="pre">dev-python/sphinx</span></code> is commonly used to document Python packages. It comes with a number of plugins and themes that make it convenient to write and combine large text documents (such as this Guide!), @@ -716,7 +716,7 @@ for Sphinx, and packages that use plugins need to guarantee the same implementation across all plugins. To cover all those use cases easily, the <code class="docutils literal notranslate"><span class="pre">distutils_enable_sphinx</span></code> function is provided.</p> <section id="basic-documentation-with-autodoc"> -<h3>Basic documentation with autodoc<a class="headerlink" href="#basic-documentation-with-autodoc" title="Permalink to this heading">¶</a></h3> +<h3>Basic documentation with autodoc<a class="headerlink" href="#basic-documentation-with-autodoc" title="Link to this heading">¶</a></h3> <p>The most common case is a package that uses Sphinx along with autodoc. It can be recognized by <code class="docutils literal notranslate"><span class="pre">conf.py</span></code> listing <code class="docutils literal notranslate"><span class="pre">sphinx.ext.autodoc</span></code> in the extension list. In order to support building documentation, @@ -755,7 +755,7 @@ of the supported implementations, and appropriate <code class="docutils literal implementation to build and install HTML documentation.</p> </section> <section id="additional-sphinx-extensions"> -<h3>Additional Sphinx extensions<a class="headerlink" href="#additional-sphinx-extensions" title="Permalink to this heading">¶</a></h3> +<h3>Additional Sphinx extensions<a class="headerlink" href="#additional-sphinx-extensions" title="Link to this heading">¶</a></h3> <p>It is not uncommon for packages to require additional third-party extensions to Sphinx. Those include themes. In order to specify dependencies on the additional packages, pass them as extra arguments @@ -788,7 +788,7 @@ packages. However, it does not have to be the one in <code class="docutils lite for this package.</p> </section> <section id="sphinx-without-autodoc-or-extensions"> -<h3>Sphinx without autodoc or extensions<a class="headerlink" href="#sphinx-without-autodoc-or-extensions" title="Permalink to this heading">¶</a></h3> +<h3>Sphinx without autodoc or extensions<a class="headerlink" href="#sphinx-without-autodoc-or-extensions" title="Link to this heading">¶</a></h3> <p>Finally, there are packages that use Sphinx purely to build documentation from text files, without inspecting Python code. For those packages, the any-r1 API can be omitted entirely and plain @@ -819,10 +819,10 @@ If additional packages need to be installed, the previous variant must be used instead.</p> <p>The eclass tries to automatically determine whether <code class="docutils literal notranslate"><span class="pre">--no-autodoc</span></code> should be used, and issue a warning if it’s missing or incorrect.</p> -<span class="target" id="index-22"></span></section> +</section> </section> <section id="packages-with-optional-python-build-system-usage"> -<span id="index-23"></span><h2>Packages with optional Python build system usage<a class="headerlink" href="#packages-with-optional-python-build-system-usage" title="Permalink to this heading">¶</a></h2> +<span id="index-23"></span><span id="index-22"></span><h2>Packages with optional Python build system usage<a class="headerlink" href="#packages-with-optional-python-build-system-usage" title="Link to this heading">¶</a></h2> <p>The eclass has been written with the assumption that the vast majority of its consumers will be using the Python build systems unconditionally. For this reason, it sets the ebuild metadata variables (dependencies, @@ -931,7 +931,7 @@ follows:</p> </div> </section> <section id="packages-with-rust-extensions-using-cargo"> -<span id="index-24"></span><h2>Packages with Rust extensions (using Cargo)<a class="headerlink" href="#packages-with-rust-extensions-using-cargo" title="Permalink to this heading">¶</a></h2> +<span id="index-24"></span><h2>Packages with Rust extensions (using Cargo)<a class="headerlink" href="#packages-with-rust-extensions-using-cargo" title="Link to this heading">¶</a></h2> <p>Some Python build systems include support for writing extensions in the Rust programming language. Two examples of these are setuptools using <code class="docutils literal notranslate"><span class="pre">dev-python/setuptools_rust</span></code> plugin and Maturin. Normally, @@ -997,7 +997,7 @@ warnings. Finally, the ebuild needs to call <code class="docutils literal notra </div> </section> <section id="installing-packages-without-a-pep-517-build-backend"> -<h2>Installing packages without a PEP 517 build backend<a class="headerlink" href="#installing-packages-without-a-pep-517-build-backend" title="Permalink to this heading">¶</a></h2> +<h2>Installing packages without a PEP 517 build backend<a class="headerlink" href="#installing-packages-without-a-pep-517-build-backend" title="Link to this heading">¶</a></h2> <p>The eclass features a special ‘no build system’ that is dedicated to packages that could benefit from distutils-r1 features yet either do not use a PEP 517-compliant build system, or cannot use one. This @@ -1039,7 +1039,7 @@ are removed)</p></li> are functional</p></li> </ul> <section id="installing-packages-manually-into-build-dir"> -<h3>Installing packages manually into BUILD_DIR<a class="headerlink" href="#installing-packages-manually-into-build-dir" title="Permalink to this heading">¶</a></h3> +<h3>Installing packages manually into BUILD_DIR<a class="headerlink" href="#installing-packages-manually-into-build-dir" title="Link to this heading">¶</a></h3> <p>The simplest approach towards installing packages manually is to use <code class="docutils literal notranslate"><span class="pre">python_domodule</span></code> in <code class="docutils literal notranslate"><span class="pre">python_compile</span></code> sub-phase. This causes the modules to be installed into <code class="docutils literal notranslate"><span class="pre">${BUILD_DIR}/install</span></code> tree, @@ -1076,7 +1076,7 @@ and PyPI wheel (for generated .dist-info) follows:</p> automatic unpacking by the default <code class="docutils literal notranslate"><span class="pre">src_unpack</span></code>.</p> </section> <section id="installing-packages-manually-into-d"> -<h3>Installing packages manually into D<a class="headerlink" href="#installing-packages-manually-into-d" title="Permalink to this heading">¶</a></h3> +<h3>Installing packages manually into D<a class="headerlink" href="#installing-packages-manually-into-d" title="Link to this heading">¶</a></h3> <p>The alternative approach is to install files in <code class="docutils literal notranslate"><span class="pre">python_install</span></code> phase. This provides a greater number of helpers. However, the installed modules will not be provided in the venv for the test @@ -1107,7 +1107,7 @@ in <code class="docutils literal notranslate"><span class="pre">python_compile</ <code class="docutils literal notranslate"><span class="pre">distutils-r1_python_install</span></code> needs to be called explicitly.</p> </section> <section id="integrating-with-a-non-pep-517-build-system"> -<h3>Integrating with a non-PEP 517 build system<a class="headerlink" href="#integrating-with-a-non-pep-517-build-system" title="Permalink to this heading">¶</a></h3> +<h3>Integrating with a non-PEP 517 build system<a class="headerlink" href="#integrating-with-a-non-pep-517-build-system" title="Link to this heading">¶</a></h3> <p>The ‘no build system’ mode can also be used to use distutils-r1 sub-phases to integrate with a build system conveniently. The following ebuild fragment demonstrates using it with Meson:</p> @@ -1241,7 +1241,7 @@ python_install<span class="o">()</span><span class="w"> </span><span class="o">{ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/eclass.html b/guide/eclass.html index 27fe174..9faebd3 100644 --- a/guide/eclass.html +++ b/guide/eclass.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Choosing between Python eclasses — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Common basics" href="basic.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="choosing-between-python-eclasses"> -<h1>Choosing between Python eclasses<a class="headerlink" href="#choosing-between-python-eclasses" title="Permalink to this heading">¶</a></h1> +<h1>Choosing between Python eclasses<a class="headerlink" href="#choosing-between-python-eclasses" title="Link to this heading">¶</a></h1> <section id="overview"> -<h2>Overview<a class="headerlink" href="#overview" title="Permalink to this heading">¶</a></h2> +<h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">¶</a></h2> <p>The python-r1 eclass suite features 5 eclasses in total:</p> <ol class="arabic simple"> <li><p><code class="docutils literal notranslate"><span class="pre">python-utils-r1.eclass</span></code> that provides utility functions common @@ -51,7 +51,7 @@ files.</p></li> </ol> <figure class="align-default" id="id1"> <img alt="_images/eclass.svg" src="_images/eclass.svg" /><figcaption> -<p><span class="caption-text">Inheritance graph of python-r1 suite eclasses.</span><a class="headerlink" href="#id1" title="Permalink to this image">¶</a></p> +<p><span class="caption-text">Inheritance graph of python-r1 suite eclasses.</span><a class="headerlink" href="#id1" title="Link to this image">¶</a></p> </figcaption> </figure> <p>As a rule of thumb, the best eclass to use is the one that makes @@ -70,7 +70,7 @@ with <code class="docutils literal notranslate"><span class="pre">DISTUTILS_SING </ol> </section> <section id="build-time-vs-runtime-use"> -<h2>Build time vs runtime use<a class="headerlink" href="#build-time-vs-runtime-use" title="Permalink to this heading">¶</a></h2> +<h2>Build time vs runtime use<a class="headerlink" href="#build-time-vs-runtime-use" title="Link to this heading">¶</a></h2> <p>The first basis for choosing Python eclass is whether Python is used merely at build time or at runtime as well.</p> <p>A runtime use occurs if the package explicitly needs Python to be @@ -97,7 +97,7 @@ loads Python code from the package and a compatible Python version must be enforced.</p> </section> <section id="single-impl-vs-multi-impl"> -<h2>Single-impl vs multi-impl<a class="headerlink" href="#single-impl-vs-multi-impl" title="Permalink to this heading">¶</a></h2> +<h2>Single-impl vs multi-impl<a class="headerlink" href="#single-impl-vs-multi-impl" title="Link to this heading">¶</a></h2> <p>The second important basis for packages using Python at runtime is whether the package in question should support multi-implementation install or not.</p> @@ -137,7 +137,7 @@ flexibility for developers and end users.</p> by the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass.</p> </section> <section id="python-first-packages-distutils-r1-eclass"> -<h2>Python-first packages (distutils-r1 eclass)<a class="headerlink" href="#python-first-packages-distutils-r1-eclass" title="Permalink to this heading">¶</a></h2> +<h2>Python-first packages (distutils-r1 eclass)<a class="headerlink" href="#python-first-packages-distutils-r1-eclass" title="Link to this heading">¶</a></h2> <p>The third step in choosing the eclass for runtime use of Python is determining whether the ebuild would benefit from <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code>. This eclass is especially useful for packages that primarily focus @@ -248,7 +248,7 @@ For single-impl packages, <code class="docutils literal notranslate"><span class ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/expert-multi.html b/guide/expert-multi.html index 2248d41..4fd2a4b 100644 --- a/guide/expert-multi.html +++ b/guide/expert-multi.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Expert python-r1 usage — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Integration with build systems written in Python" href="buildsys.html" /> @@ -32,12 +32,12 @@ <div class="body" role="main"> <section id="expert-python-r1-usage"> -<h1>Expert python-r1 usage<a class="headerlink" href="#expert-python-r1-usage" title="Permalink to this heading">¶</a></h1> +<h1>Expert python-r1 usage<a class="headerlink" href="#expert-python-r1-usage" title="Link to this heading">¶</a></h1> <p>The APIs described in this chapter are powerful but even harder to use than those described in <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> chapter. You should not consider using them unless you have a proper ninja training.</p> <section id="partially-restricting-python-implementation"> -<span id="index-0"></span><h2>Partially restricting Python implementation<a class="headerlink" href="#partially-restricting-python-implementation" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>Partially restricting Python implementation<a class="headerlink" href="#partially-restricting-python-implementation" title="Link to this heading">¶</a></h2> <p>There are packages that have been ported to Python 3 only partially. They may still have some optional dependencies that support Python 2 only, they may have some components that do not support Python 3 yet. @@ -149,9 +149,9 @@ list.</p> <span class="s2"> "</span> </pre></div> </div> -<span class="target" id="index-1"></span></section> +</section> <section id="restricting-interpreters-for-python-setup"> -<span id="index-2"></span><h2>Restricting interpreters for python_setup<a class="headerlink" href="#restricting-interpreters-for-python-setup" title="Permalink to this heading">¶</a></h2> +<span id="index-2"></span><span id="index-1"></span><h2>Restricting interpreters for python_setup<a class="headerlink" href="#restricting-interpreters-for-python-setup" title="Link to this heading">¶</a></h2> <p>A specific case of the restriction described above is when the build step supports a subset of Python targets for the runtime part. This could happen e.g. if package’s Python bindings have been ported @@ -285,9 +285,9 @@ call).</p> </div> <p>Note that when the restriction is caused by dependencies rather than package’s files, the any-r1 API described below is preferable to this.</p> -<span class="target" id="index-3"></span></section> +</section> <section id="disjoint-build-dependencies-any-r1-api"> -<span id="index-4"></span><h2>Disjoint build dependencies (any-r1 API)<a class="headerlink" href="#disjoint-build-dependencies-any-r1-api" title="Permalink to this heading">¶</a></h2> +<span id="index-4"></span><span id="index-3"></span><h2>Disjoint build dependencies (any-r1 API)<a class="headerlink" href="#disjoint-build-dependencies-any-r1-api" title="Link to this heading">¶</a></h2> <p>Some packages have disjoint sets of runtime and pure build-time dependencies. The former need to be built for all enabled implementations, the latter only for one of them. The any-r1 API @@ -296,7 +296,7 @@ in <code class="docutils literal notranslate"><span class="pre">python-r1</span> to build documentation. Naturally, you’re going to build the documents only once, not separately for every enabled target.</p> <section id="using-regular-python-r1-api"> -<h3>Using regular python-r1 API<a class="headerlink" href="#using-regular-python-r1-api" title="Permalink to this heading">¶</a></h3> +<h3>Using regular python-r1 API<a class="headerlink" href="#using-regular-python-r1-api" title="Link to this heading">¶</a></h3> <p>If you were using the regular API, you’d have to use <code class="docutils literal notranslate"><span class="pre">${PYTHON_USEDEP}</span></code> on the dependencies. The resulting code could look like the following:</p> @@ -326,7 +326,7 @@ to the old version of <code class="docutils literal notranslate"><span class="pr be used via Python 2.7 at all.</p> </section> <section id="using-any-r1-api-with-python-r1"> -<h3>Using any-r1 API with python-r1<a class="headerlink" href="#using-any-r1-api-with-python-r1" title="Permalink to this heading">¶</a></h3> +<h3>Using any-r1 API with python-r1<a class="headerlink" href="#using-any-r1-api-with-python-r1" title="Link to this heading">¶</a></h3> <p>As the name suggests, the any-r1 API resembles the API used by <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> eclass. The disjoint build-time dependencies are declared using <code class="docutils literal notranslate"><span class="pre">python_gen_any_dep</span></code>, and need to be tested @@ -367,7 +367,7 @@ we have used this API to add Python 3.8 support to packages before another implementation for Sphinx.</p> </section> <section id="different-sets-of-build-time-dependencies"> -<h3>Different sets of build-time dependencies<a class="headerlink" href="#different-sets-of-build-time-dependencies" title="Permalink to this heading">¶</a></h3> +<h3>Different sets of build-time dependencies<a class="headerlink" href="#different-sets-of-build-time-dependencies" title="Link to this heading">¶</a></h3> <p>Let’s consider the case when Python is used at build-time for something else still. In that case, we want <code class="docutils literal notranslate"><span class="pre">python_setup</span></code> to work unconditionally but enforce dependencies only with <code class="docutils literal notranslate"><span class="pre">doc</span></code> flag enabled.</p> @@ -400,7 +400,7 @@ it will use <em>any</em> interpreter that is supported and installed, even if it is not enabled explicitly in <code class="docutils literal notranslate"><span class="pre">PYTHON_TARGETS</span></code>.</p> </section> <section id="using-any-r1-api-with-distutils-r1"> -<h3>Using any-r1 API with distutils-r1<a class="headerlink" href="#using-any-r1-api-with-distutils-r1" title="Permalink to this heading">¶</a></h3> +<h3>Using any-r1 API with distutils-r1<a class="headerlink" href="#using-any-r1-api-with-distutils-r1" title="Link to this heading">¶</a></h3> <p>The alternate build dependency API also integrates with <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass. If <code class="docutils literal notranslate"><span class="pre">python_check_deps()</span></code> is declared, the <code class="docutils literal notranslate"><span class="pre">python_*_all()</span></code> sub-phase functions are called with the interpreter selected according @@ -431,7 +431,7 @@ therefore <code class="docutils literal notranslate"><span class="pre">python_ch </section> </section> <section id="combining-any-r1-api-with-implementation-restrictions"> -<h2>Combining any-r1 API with implementation restrictions<a class="headerlink" href="#combining-any-r1-api-with-implementation-restrictions" title="Permalink to this heading">¶</a></h2> +<h2>Combining any-r1 API with implementation restrictions<a class="headerlink" href="#combining-any-r1-api-with-implementation-restrictions" title="Link to this heading">¶</a></h2> <p>Both APIs described above can be combined. This can be used when build-time scripts support a subset of implementations supported by the package itself, and by its build-time dependencies. For example, @@ -627,7 +627,7 @@ to <code class="docutils literal notranslate"><span class="pre">python_gen_any_d ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/genindex.html b/guide/genindex.html index d2d5035..9ca7852 100644 --- a/guide/genindex.html +++ b/guide/genindex.html @@ -1,15 +1,15 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Index — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="#" /> <link rel="search" title="Search" href="search.html" /> @@ -392,7 +392,7 @@ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> </div> diff --git a/guide/helper.html b/guide/helper.html index cda37e5..cc23987 100644 --- a/guide/helper.html +++ b/guide/helper.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Common helper functions — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Advanced dependencies" href="depend.html" /> @@ -32,15 +32,15 @@ <div class="body" role="main"> <section id="common-helper-functions"> -<h1>Common helper functions<a class="headerlink" href="#common-helper-functions" title="Permalink to this heading">¶</a></h1> +<h1>Common helper functions<a class="headerlink" href="#common-helper-functions" title="Link to this heading">¶</a></h1> <p>The functions described in this chapter are common to all three basic eclasses. To facilitate code reuse, they are declared in <code class="docutils literal notranslate"><span class="pre">python-utils-r1.eclass</span></code>. However, you should not inherit this eclass directly and instead assume the functions are provided as part of the API of other eclasses.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-utils-r1.eclass/index.html">python-utils-r1.eclass(5)</a></p> -<span class="target" id="index-0"></span><span class="target" id="index-1"></span><span class="target" id="index-2"></span><span class="target" id="index-3"></span><span class="target" id="index-4"></span><span class="target" id="index-5"></span><span class="target" id="index-6"></span><section id="install-helpers"> -<span id="index-7"></span><h2>Install helpers<a class="headerlink" href="#install-helpers" title="Permalink to this heading">¶</a></h2> +<section id="install-helpers"> +<span id="index-7"></span><span id="index-6"></span><span id="index-5"></span><span id="index-4"></span><span id="index-3"></span><span id="index-2"></span><span id="index-1"></span><span id="index-0"></span><h2>Install helpers<a class="headerlink" href="#install-helpers" title="Link to this heading">¶</a></h2> <p>The install helpers are provided commonly for <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> and <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> eclasses. Their main purpose is to facilitate installing Python scripts, modules and extensions whenever the package @@ -111,7 +111,7 @@ extensions:</p> </div> </section> <section id="fixing-shebangs-on-installed-scripts"> -<span id="index-8"></span><h2>Fixing shebangs on installed scripts<a class="headerlink" href="#fixing-shebangs-on-installed-scripts" title="Permalink to this heading">¶</a></h2> +<span id="index-8"></span><h2>Fixing shebangs on installed scripts<a class="headerlink" href="#fixing-shebangs-on-installed-scripts" title="Link to this heading">¶</a></h2> <p>If upstream build system installs Python scripts, it should also update their shebangs to match the interpreter used for install. Otherwise, the scripts could end up being run via another implementation, one @@ -160,7 +160,7 @@ to install a script with <code class="docutils literal notranslate"><span class= </div> </section> <section id="byte-compiling-python-modules"> -<span id="index-9"></span><h2>Byte-compiling Python modules<a class="headerlink" href="#byte-compiling-python-modules" title="Permalink to this heading">¶</a></h2> +<span id="index-9"></span><h2>Byte-compiling Python modules<a class="headerlink" href="#byte-compiling-python-modules" title="Link to this heading">¶</a></h2> <p>Python modules are byte compiled in order to speed up their loading. Byte-compilation is normally done by the build system when the modules are installed. However, sometimes packages fail to compile them @@ -197,9 +197,9 @@ to them can be passed to the function:</p> <span class="p">}</span> </pre></div> </div> -<span class="target" id="index-10"></span><span class="target" id="index-11"></span><span class="target" id="index-12"></span><span class="target" id="index-13"></span><span class="target" id="index-14"></span><span class="target" id="index-15"></span></section> +</section> <section id="querying-the-implementation-information"> -<span id="index-16"></span><h2>Querying the implementation information<a class="headerlink" href="#querying-the-implementation-information" title="Permalink to this heading">¶</a></h2> +<span id="index-16"></span><span id="index-15"></span><span id="index-14"></span><span id="index-13"></span><span id="index-12"></span><span id="index-11"></span><span id="index-10"></span><h2>Querying the implementation information<a class="headerlink" href="#querying-the-implementation-information" title="Link to this heading">¶</a></h2> <p>Most of the time, various build systems manage to detect and query the Python implementation correctly for necessary build details. Ocassionally, you need to provide those values or override bad detection @@ -341,7 +341,7 @@ helpers</a> instead.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/index.html b/guide/index.html index 04c8cc8..0ba7a4c 100644 --- a/guide/index.html +++ b/guide/index.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Gentoo Python Guide — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Preface" href="preface.html" /> @@ -31,7 +31,7 @@ <div class="body" role="main"> <section id="gentoo-python-guide"> -<h1>Gentoo Python Guide<a class="headerlink" href="#gentoo-python-guide" title="Permalink to this heading">¶</a></h1> +<h1>Gentoo Python Guide<a class="headerlink" href="#gentoo-python-guide" title="Link to this heading">¶</a></h1> <dl class="field-list simple"> <dt class="field-odd">Author<span class="colon">:</span></dt> <dd class="field-odd"><p>Michał Górny</p> @@ -229,7 +229,7 @@ </ul> </div> <section id="indices-and-tables"> -<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this heading">¶</a></h2> +<h2>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Link to this heading">¶</a></h2> <ul class="simple"> <li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li> <li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li> @@ -314,7 +314,7 @@ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/interpreter-maintenance.html b/guide/interpreter-maintenance.html index 46af68e..5a5821a 100644 --- a/guide/interpreter-maintenance.html +++ b/guide/interpreter-maintenance.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Maintenance of Python implementations — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="prev" title="Python package maintenance" href="package-maintenance.html" /> @@ -31,11 +31,11 @@ <div class="body" role="main"> <section id="maintenance-of-python-implementations"> -<h1>Maintenance of Python implementations<a class="headerlink" href="#maintenance-of-python-implementations" title="Permalink to this heading">¶</a></h1> +<h1>Maintenance of Python implementations<a class="headerlink" href="#maintenance-of-python-implementations" title="Link to this heading">¶</a></h1> <section id="notes-specific-to-python-interpreters"> -<h2>Notes specific to Python interpreters<a class="headerlink" href="#notes-specific-to-python-interpreters" title="Permalink to this heading">¶</a></h2> +<h2>Notes specific to Python interpreters<a class="headerlink" href="#notes-specific-to-python-interpreters" title="Link to this heading">¶</a></h2> <section id="cpython-patchsets"> -<h3>CPython patchsets<a class="headerlink" href="#cpython-patchsets" title="Permalink to this heading">¶</a></h3> +<h3>CPython patchsets<a class="headerlink" href="#cpython-patchsets" title="Link to this heading">¶</a></h3> <p>Gentoo is maintaining patchsets for all CPython versions. These include some non-upstreamable Gentoo patches and upstream backports. While it is considered acceptable to add a new patch (e.g. a security bug fix) @@ -76,7 +76,7 @@ create the tag and push it:</p> </div> </section> <section id="pypy"> -<h3>PyPy<a class="headerlink" href="#pypy" title="Permalink to this heading">¶</a></h3> +<h3>PyPy<a class="headerlink" href="#pypy" title="Link to this heading">¶</a></h3> <p>Due to high resource requirements and long build time, PyPy on Gentoo is provided both in source and precompiled form. This creates a bit unusual ebuild structure:</p> @@ -110,9 +110,9 @@ in <code class="docutils literal notranslate"><span class="pre">~/binpkg/${arch} </section> </section> <section id="adding-a-new-python-implementation"> -<h2>Adding a new Python implementation<a class="headerlink" href="#adding-a-new-python-implementation" title="Permalink to this heading">¶</a></h2> +<h2>Adding a new Python implementation<a class="headerlink" href="#adding-a-new-python-implementation" title="Link to this heading">¶</a></h2> <section id="eclass-and-profile-changes"> -<h3>Eclass and profile changes<a class="headerlink" href="#eclass-and-profile-changes" title="Permalink to this heading">¶</a></h3> +<h3>Eclass and profile changes<a class="headerlink" href="#eclass-and-profile-changes" title="Link to this heading">¶</a></h3> <div class="admonition note"> <p class="admonition-title">Note</p> <p>The best time to perform these changes is prior to adding the first @@ -146,7 +146,7 @@ in <code class="docutils literal notranslate"><span class="pre">app-portage/gpyu </ul> </section> <section id="porting-initial-packages"> -<h3>Porting initial packages<a class="headerlink" href="#porting-initial-packages" title="Permalink to this heading">¶</a></h3> +<h3>Porting initial packages<a class="headerlink" href="#porting-initial-packages" title="Link to this heading">¶</a></h3> <p>The initial porting is quite hard due to a number of circular dependencies. To ease the process, it is recommended to temporarily limit testing of the packages that feature many additional test @@ -233,9 +233,9 @@ on reenabling tests in the packages where they were skipped.</p> </section> </section> <section id="removing-a-python-implementation"> -<h2>Removing a Python implementation<a class="headerlink" href="#removing-a-python-implementation" title="Permalink to this heading">¶</a></h2> +<h2>Removing a Python implementation<a class="headerlink" href="#removing-a-python-implementation" title="Link to this heading">¶</a></h2> <section id="preparation"> -<h3>Preparation<a class="headerlink" href="#preparation" title="Permalink to this heading">¶</a></h3> +<h3>Preparation<a class="headerlink" href="#preparation" title="Link to this heading">¶</a></h3> <p>The obsolescence of the implementation needs to be announced on mailing lists, along with request to proceed with porting packages to a newer implementation. The package lists found on <a class="reference external" href="https://qa-reports.gentoo.org/">QA reports</a> can be used @@ -246,7 +246,7 @@ to the old implementation and used only conditionally to it) need to be masked for removal.</p> </section> <section id="id1"> -<h3>Eclass and profile changes<a class="headerlink" href="#id1" title="Permalink to this heading">¶</a></h3> +<h3>Eclass and profile changes<a class="headerlink" href="#id1" title="Link to this heading">¶</a></h3> <p>Rather than being removed entirely, old targets are implicitly disabled via the eclass. This ensures that old entries in <code class="docutils literal notranslate"><span class="pre">PYTHON_COMPAT</span></code> do not trigger errors.</p> @@ -276,7 +276,7 @@ in <code class="docutils literal notranslate"><span class="pre">app-portage/gpyu </section> </section> <section id="python-build-system-bootstrap"> -<h2>Python build system bootstrap<a class="headerlink" href="#python-build-system-bootstrap" title="Permalink to this heading">¶</a></h2> +<h2>Python build system bootstrap<a class="headerlink" href="#python-build-system-bootstrap" title="Link to this heading">¶</a></h2> <p>Python build systems are often facing the bootstrap problem — that is, the build system itself has some dependencies, while these dependencies require the same build system to build. The common upstream way @@ -391,7 +391,7 @@ dependencies will be added or vendored into flit_core.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/interpreter.html b/guide/interpreter.html index ef2cc99..07df833 100644 --- a/guide/interpreter.html +++ b/guide/interpreter.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Python interpreters — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Choosing between Python eclasses" href="eclass.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="python-interpreters"> -<h1>Python interpreters<a class="headerlink" href="#python-interpreters" title="Permalink to this heading">¶</a></h1> +<h1>Python interpreters<a class="headerlink" href="#python-interpreters" title="Link to this heading">¶</a></h1> <section id="versions-of-python"> -<h2>Versions of Python<a class="headerlink" href="#versions-of-python" title="Permalink to this heading">¶</a></h2> +<h2>Versions of Python<a class="headerlink" href="#versions-of-python" title="Link to this heading">¶</a></h2> <p>By a <em>version of Python</em> we usually mean the variant of Python language and standard library interface as used by a specific version of <a class="reference external" href="https://www.python.org/">CPython</a>, the reference implementation of Python.</p> @@ -64,7 +64,7 @@ window of 3-4 versions of Python 3. They are provided as slots of <code class="docutils literal notranslate"><span class="pre">dev-lang/python</span></code>.</p> </section> <section id="life-cycle-of-a-python-implementation"> -<h2>Life cycle of a Python implementation<a class="headerlink" href="#life-cycle-of-a-python-implementation" title="Permalink to this heading">¶</a></h2> +<h2>Life cycle of a Python implementation<a class="headerlink" href="#life-cycle-of-a-python-implementation" title="Link to this heading">¶</a></h2> <p>Every Python implementation (understood as a potential target) in Gentoo follows roughly the following life cycle:</p> <ol class="arabic"> @@ -124,7 +124,7 @@ vulnerabilities or build failures).</p></li> </ol> </section> <section id="stability-guarantees-of-python-implementations"> -<h2>Stability guarantees of Python implementations<a class="headerlink" href="#stability-guarantees-of-python-implementations" title="Permalink to this heading">¶</a></h2> +<h2>Stability guarantees of Python implementations<a class="headerlink" href="#stability-guarantees-of-python-implementations" title="Link to this heading">¶</a></h2> <p>The language and standard library API of every Python version is expected to be stable since the first beta release of the matching CPython version. However, historically there were cases of breaking @@ -152,7 +152,7 @@ Gentoo switched to the next PyPy branch (i.e. the one corresponding to the next Python language version).</p> </section> <section id="alternative-python-implementations"> -<h2>Alternative Python implementations<a class="headerlink" href="#alternative-python-implementations" title="Permalink to this heading">¶</a></h2> +<h2>Alternative Python implementations<a class="headerlink" href="#alternative-python-implementations" title="Link to this heading">¶</a></h2> <p>CPython is the reference and most commonly used Python implementation. However, there are other interpreters that aim to maintain reasonable compatibility with it.</p> @@ -189,7 +189,7 @@ features and standard library modules while preserving backwards compatibility with existing code. It is not packaged in Gentoo.</p> </section> <section id="support-for-multiple-implementations"> -<h2>Support for multiple implementations<a class="headerlink" href="#support-for-multiple-implementations" title="Permalink to this heading">¶</a></h2> +<h2>Support for multiple implementations<a class="headerlink" href="#support-for-multiple-implementations" title="Link to this heading">¶</a></h2> <p>The support for simultaneously using multiple Python implementations is implemented primarily through USE flags. The packages installing or using Python files define either <code class="docutils literal notranslate"><span class="pre">PYTHON_TARGETS</span></code> @@ -213,7 +213,7 @@ nor <code class="docutils literal notranslate"><span class="pre">python3</span>< also be modified to call specific version of Python directly.</p> </section> <section id="backports"> -<h2>Backports<a class="headerlink" href="#backports" title="Permalink to this heading">¶</a></h2> +<h2>Backports<a class="headerlink" href="#backports" title="Link to this heading">¶</a></h2> <p>A common method of improving compatibility with older versions of Python is to backport new standard library modules or features. Packages doing that are generally called <em>backports</em>.</p> @@ -360,7 +360,7 @@ syntax than native asyncio code.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/migration.html b/guide/migration.html index cb4bb3b..3529cb6 100644 --- a/guide/migration.html +++ b/guide/migration.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Migration guides — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="QA checks and warnings" href="qawarn.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="migration-guides"> -<h1>Migration guides<a class="headerlink" href="#migration-guides" title="Permalink to this heading">¶</a></h1> +<h1>Migration guides<a class="headerlink" href="#migration-guides" title="Link to this heading">¶</a></h1> <section id="migrating-from-old-python-usedep-syntax-in-python-single-r1"> -<span id="index-0"></span><h2>Migrating from old PYTHON_USEDEP syntax in python-single-r1<a class="headerlink" href="#migrating-from-old-python-usedep-syntax-in-python-single-r1" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>Migrating from old PYTHON_USEDEP syntax in python-single-r1<a class="headerlink" href="#migrating-from-old-python-usedep-syntax-in-python-single-r1" title="Link to this heading">¶</a></h2> <p>Prior to February 2020, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> used to provide a single <code class="docutils literal notranslate"><span class="pre">PYTHON_USEDEP</span></code> variable alike the two other eclasses. However, getting it to work correctly both on single-impl and multi-impl packages @@ -65,7 +65,7 @@ you probably got single-impl vs. multi-impl wrong.</p></li> method.</p> </section> <section id="migrating-from-eapi-7-to-eapi-8"> -<span id="index-1"></span><h2>Migrating from EAPI 7 to EAPI 8<a class="headerlink" href="#migrating-from-eapi-7-to-eapi-8" title="Permalink to this heading">¶</a></h2> +<span id="index-1"></span><h2>Migrating from EAPI 7 to EAPI 8<a class="headerlink" href="#migrating-from-eapi-7-to-eapi-8" title="Link to this heading">¶</a></h2> <p>EAPI 8 has banned everything that’s been deprecated in EAPI 7, as well as some other obsolete stuff. The following table lists all banned things along with their suggested replacements.</p> @@ -190,7 +190,7 @@ of Python 2 support, it always evaluated to true.</p></li> <p>All the aforementioned replacements are available in all EAPIs.</p> </section> <section id="migrating-to-pep-517-builds"> -<h2>Migrating to PEP 517 builds<a class="headerlink" href="#migrating-to-pep-517-builds" title="Permalink to this heading">¶</a></h2> +<h2>Migrating to PEP 517 builds<a class="headerlink" href="#migrating-to-pep-517-builds" title="Link to this heading">¶</a></h2> <p>As of January 2022, the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> can use PEP 517 build backends instead of calling setuptools directly. The new mode is particularly useful for:</p> @@ -310,7 +310,7 @@ necessary and tests should work out of the box.</p></li> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/multi.html b/guide/multi.html index 4ffe527..43a91af 100644 --- a/guide/multi.html +++ b/guide/multi.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>python-r1 — multi-impl packages — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="distutils-r1 — standard Python build systems" href="distutils.html" /> @@ -32,7 +32,7 @@ <div class="body" role="main"> <section id="python-r1-multi-impl-packages"> -<h1>python-r1 — multi-impl packages<a class="headerlink" href="#python-r1-multi-impl-packages" title="Permalink to this heading">¶</a></h1> +<h1>python-r1 — multi-impl packages<a class="headerlink" href="#python-r1-multi-impl-packages" title="Link to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> eclass is used to install multi-impl packages. It is considered an expert eclass — when possible, you should prefer using <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> instead. For packages using distutils @@ -40,7 +40,7 @@ or a similar Python build system, <code class="docutils literal notranslate"><sp instead.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-r1.eclass/index.html">python-r1.eclass(5)</a></p> <section id="manual-install"> -<span id="index-0"></span><h2>Manual install<a class="headerlink" href="#manual-install" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>Manual install<a class="headerlink" href="#manual-install" title="Link to this heading">¶</a></h2> <p>The simplest case of multi-impl package is a package without a specific build system. The modules need to be installed manually here, and <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code> function is used to repeat the install step @@ -108,7 +108,7 @@ need to be executed:</p> </div> </section> <section id="dependencies"> -<span id="index-1"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> +<span id="index-1"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Link to this heading">¶</a></h2> <p>When depending on other Python packages, USE dependencies need to be declared in order to ensure that the dependencies would be built against all the Python implementations enabled for the package. This is easily @@ -122,7 +122,7 @@ to the dependencies:</p> </div> </section> <section id="pure-python-autotools-package"> -<span id="index-2"></span><h2>Pure Python autotools package<a class="headerlink" href="#pure-python-autotools-package" title="Permalink to this heading">¶</a></h2> +<span id="index-2"></span><h2>Pure Python autotools package<a class="headerlink" href="#pure-python-autotools-package" title="Link to this heading">¶</a></h2> <p>Another typical case for this eclass is to handle a pure Python package with a non-standard build system. In this case, it is generally necessary to call phase functions via <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code>. Whenever @@ -247,7 +247,7 @@ to do that:</p> has been removed in order to disable out-of-source builds.</p> </section> <section id="conditional-python-use"> -<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this heading">¶</a></h2> +<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Link to this heading">¶</a></h2> <p>When the package installs Python components conditionally to a USE flag, the respective USE conditional needs to be consistently used in metadata variables and in <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code> calls.</p> @@ -307,7 +307,7 @@ rules for installing Python files as they are suitable only for single-impl installs.</p> </section> <section id="additional-build-time-python-use"> -<span id="index-3"></span><h2>Additional build-time Python use<a class="headerlink" href="#additional-build-time-python-use" title="Permalink to this heading">¶</a></h2> +<span id="index-3"></span><h2>Additional build-time Python use<a class="headerlink" href="#additional-build-time-python-use" title="Link to this heading">¶</a></h2> <p>Some packages additionally require Python at build time, independently of Python components installed (i.e. outside <code class="docutils literal notranslate"><span class="pre">python_foreach_impl</span></code>). The eclass provides extensive API for this purpose but for now we’ll @@ -453,7 +453,7 @@ flag, while parts affecting build time (<code class="docutils literal notranslat ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/package-maintenance.html b/guide/package-maintenance.html index 3e1ad21..b80dce1 100644 --- a/guide/package-maintenance.html +++ b/guide/package-maintenance.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Python package maintenance — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Maintenance of Python implementations" href="interpreter-maintenance.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="python-package-maintenance"> -<h1>Python package maintenance<a class="headerlink" href="#python-package-maintenance" title="Permalink to this heading">¶</a></h1> +<h1>Python package maintenance<a class="headerlink" href="#python-package-maintenance" title="Link to this heading">¶</a></h1> <section id="package-name-policy"> -<h2>Package name policy<a class="headerlink" href="#package-name-policy" title="Permalink to this heading">¶</a></h2> +<h2>Package name policy<a class="headerlink" href="#package-name-policy" title="Link to this heading">¶</a></h2> <p>All packages in <code class="docutils literal notranslate"><span class="pre">dev-python/*</span></code> that are published on <a class="reference external" href="https://pypi.org/">PyPI</a>, must be named to match their respective PyPI names. The package names must match after <a class="reference external" href="https://peps.python.org/pep-0503/#normalized-names">normalization specified in PEP 503</a>, i.e. after replacing @@ -107,7 +107,7 @@ may also suggest that upstream publishes to PyPI, or at least pushes an empty package to reserve the name.</p> </section> <section id="support-for-python-2"> -<h2>Support for Python 2<a class="headerlink" href="#support-for-python-2" title="Permalink to this heading">¶</a></h2> +<h2>Support for Python 2<a class="headerlink" href="#support-for-python-2" title="Link to this heading">¶</a></h2> <p>Since Python 2.7 reached EOL, Gentoo is currently phasing out support for Python 2. Unless your package or its reverse dependencies really need it, you should omit it from <code class="docutils literal notranslate"><span class="pre">PYTHON_COMPAT</span></code>. If you’re adding @@ -120,7 +120,7 @@ of reverse dependencies afterwards.</p> supporting it soon are being slowly removed.</p> </section> <section id="which-implementations-to-test-new-packages-for"> -<h2>Which implementations to test new packages for?<a class="headerlink" href="#which-implementations-to-test-new-packages-for" title="Permalink to this heading">¶</a></h2> +<h2>Which implementations to test new packages for?<a class="headerlink" href="#which-implementations-to-test-new-packages-for" title="Link to this heading">¶</a></h2> <p>The absolute minimum set of targets are the current default targets found in <code class="docutils literal notranslate"><span class="pre">profiles/base/make.defaults</span></code>. However, developers are strongly encouraged to test at least the next Python 3 version @@ -129,7 +129,7 @@ in order to ease future transition, and preferably all future versions.</p> coverage of PyPy3 support.</p> </section> <section id="adding-new-python-implementations-to-existing-packages"> -<h2>Adding new Python implementations to existing packages<a class="headerlink" href="#adding-new-python-implementations-to-existing-packages" title="Permalink to this heading">¶</a></h2> +<h2>Adding new Python implementations to existing packages<a class="headerlink" href="#adding-new-python-implementations-to-existing-packages" title="Link to this heading">¶</a></h2> <p>New Python implementations can generally be added to existing packages without a revision bump. This is because the new dependencies are added conditionally to new USE flags. Since the existing users can not have @@ -141,7 +141,7 @@ will not be able to enable newly added flags and therefore the risk of the change breaking stable systems is minimal.</p> </section> <section id="which-packages-can-be-co-maintained-by-the-python-project"> -<h2>Which packages can be (co-)maintained by the Python project?<a class="headerlink" href="#which-packages-can-be-co-maintained-by-the-python-project" title="Permalink to this heading">¶</a></h2> +<h2>Which packages can be (co-)maintained by the Python project?<a class="headerlink" href="#which-packages-can-be-co-maintained-by-the-python-project" title="Link to this heading">¶</a></h2> <p>A large part of the Python ecosystem is fairly consistent, making it feasible for (co-)maintenance by the Gentoo Python team.</p> <p>As a rule of thumb, Python team is ready to maintain packages specific @@ -158,7 +158,7 @@ the package. However, if you are not a member of the project, please do not add us without asking first.</p> </section> <section id="porting-packages-to-a-new-eapi"> -<h2>Porting packages to a new EAPI<a class="headerlink" href="#porting-packages-to-a-new-eapi" title="Permalink to this heading">¶</a></h2> +<h2>Porting packages to a new EAPI<a class="headerlink" href="#porting-packages-to-a-new-eapi" title="Link to this heading">¶</a></h2> <p>When porting packages to a new EAPI, please take care not to port the dependencies of Portage prematurely. This generally includes <code class="docutils literal notranslate"><span class="pre">app-portage/gemato</span></code>, <code class="docutils literal notranslate"><span class="pre">dev-python/setuptools</span></code> and their recursive @@ -173,9 +173,9 @@ e.g.:</p> necessary to install a new Portage version.</p> </section> <section id="monitoring-new-package-versions"> -<h2>Monitoring new package versions<a class="headerlink" href="#monitoring-new-package-versions" title="Permalink to this heading">¶</a></h2> +<h2>Monitoring new package versions<a class="headerlink" href="#monitoring-new-package-versions" title="Link to this heading">¶</a></h2> <section id="pypi-release-feeds"> -<h3>PyPI release feeds<a class="headerlink" href="#pypi-release-feeds" title="Permalink to this heading">¶</a></h3> +<h3>PyPI release feeds<a class="headerlink" href="#pypi-release-feeds" title="Link to this heading">¶</a></h3> <p>The most efficient way to follow new Python package releases are the feeds found on <a class="reference external" href="https://pypi.org/">PyPI</a>. These can be found in the package’s “Release history” tab, as “RSS feed”.</p> @@ -184,7 +184,7 @@ for packages</a> in <code class="docutils literal notranslate"><span class="pre" packages maintained by the Python team) in OPML format.</p> </section> <section id="checking-via-pip"> -<h3>Checking via pip<a class="headerlink" href="#checking-via-pip" title="Permalink to this heading">¶</a></h3> +<h3>Checking via pip<a class="headerlink" href="#checking-via-pip" title="Link to this heading">¶</a></h3> <p>The <a class="reference internal" href="#pip-list-outdated">pip list --outdated</a> command described in a followup section can also be used to verify installed packages against their latest PyPI releases. However, this is naturally limited to packages installed @@ -192,7 +192,7 @@ on the particular system, and does not account for newer versions being already available in the Gentoo repository.</p> </section> <section id="repology"> -<h3>Repology<a class="headerlink" href="#repology" title="Permalink to this heading">¶</a></h3> +<h3>Repology<a class="headerlink" href="#repology" title="Link to this heading">¶</a></h3> <p><a class="reference external" href="https://repology.org/">Repology</a> provides a comprehensive service for tracking distribution package versions and upstream releases. The easiest ways to find Python packages present in the Gentoo repository is to search by their @@ -210,12 +210,12 @@ syntax (e.g. <code class="docutils literal notranslate"><span class="pre">.post< </section> </section> <section id="routine-checks-on-installed-python-packages"> -<h2>Routine checks on installed Python packages<a class="headerlink" href="#routine-checks-on-installed-python-packages" title="Permalink to this heading">¶</a></h2> +<h2>Routine checks on installed Python packages<a class="headerlink" href="#routine-checks-on-installed-python-packages" title="Link to this heading">¶</a></h2> <p>The following actions are recommended to be run periodically on systems used to test Python packages. They could be run e.g. via post-sync actions.</p> <section id="pip-check"> -<h3>pip check<a class="headerlink" href="#pip-check" title="Permalink to this heading">¶</a></h3> +<h3>pip check<a class="headerlink" href="#pip-check" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">check</span></code> (provided by <code class="docutils literal notranslate"><span class="pre">dev-python/pip</span></code>) can be used to check installed packages for missing dependencies and version conflicts:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>$ python3.10 -m pip check @@ -246,7 +246,7 @@ requests 2.28.0 requires certifi, which is not installed. </div> </section> <section id="pip-list-outdated"> -<h3>pip list --outdated<a class="headerlink" href="#pip-list-outdated" title="Permalink to this heading">¶</a></h3> +<h3>pip list --outdated<a class="headerlink" href="#pip-list-outdated" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">list</span> <span class="pre">--outdated</span></code> (provided by <code class="docutils literal notranslate"><span class="pre">dev-python/pip</span></code>) can be used to check whether installed packages are up-to-date. This can help checking for pending version bumps, as well as to detect wrong versions @@ -283,7 +283,7 @@ older than the actual release, and therefore the respective options need to be stripped.</p> </section> <section id="gpy-verify-deps"> -<h3>gpy-verify-deps<a class="headerlink" href="#gpy-verify-deps" title="Permalink to this heading">¶</a></h3> +<h3>gpy-verify-deps<a class="headerlink" href="#gpy-verify-deps" title="Link to this heading">¶</a></h3> <p><code class="docutils literal notranslate"><span class="pre">gpy-verify-deps</span></code> (provided by <code class="docutils literal notranslate"><span class="pre">app-portage/gpyutils</span></code>) compares the ebuild dependencies of all installed Python packages against their metadata. It reports the dependencies that are potentially missing @@ -399,7 +399,7 @@ than to copy the mistakes into the ebuild.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/porting.html b/guide/porting.html index 0b6a547..58d3d5e 100644 --- a/guide/porting.html +++ b/guide/porting.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Porting tips — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Migration guides" href="migration.html" /> @@ -32,7 +32,7 @@ <div class="body" role="main"> <section id="porting-tips"> -<h1>Porting tips<a class="headerlink" href="#porting-tips" title="Permalink to this heading">¶</a></h1> +<h1>Porting tips<a class="headerlink" href="#porting-tips" title="Link to this heading">¶</a></h1> <p>This section highlights some of the known incompatible changes made in Python that could break Python scripts and modules that used to work in prior versions. The sections are split into retroactive changes made @@ -42,9 +42,9 @@ to all Python releases, and information specific to every Python branch of other problems you’ve hit while porting your packages, please let me know and I will update it.</p> <section id="retroactive-changes"> -<h2>Retroactive changes<a class="headerlink" href="#retroactive-changes" title="Permalink to this heading">¶</a></h2> +<h2>Retroactive changes<a class="headerlink" href="#retroactive-changes" title="Link to this heading">¶</a></h2> <section id="bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters"> -<h3><a class="reference external" href="https://bugs.python.org/issue43882">bpo43882</a>: urlsplit now strips LF, CR and HT characters<a class="headerlink" href="#bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters" title="Permalink to this heading">¶</a></h3> +<h3><a class="reference external" href="https://bugs.python.org/issue43882">bpo43882</a>: urlsplit now strips LF, CR and HT characters<a class="headerlink" href="#bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters" title="Link to this heading">¶</a></h3> <p>Changed in: 2.7.18_p9, 3.6.13_p3, 3.7.10_p3, 3.8.9_p2, 3.9.4_p1</p> <p>Historically, various <a class="reference external" href="https://docs.python.org/3/library/urllib.parse.html">urllib.parse</a> methods have passed special characters such as LF, CR and HT through into the split URL components. @@ -72,10 +72,10 @@ PR#14349</a> for an example of impact and a fix.</p> </section> </section> <section id="python-3-11"> -<h2>Python 3.11<a class="headerlink" href="#python-3-11" title="Permalink to this heading">¶</a></h2> +<h2>Python 3.11<a class="headerlink" href="#python-3-11" title="Link to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3.11/whatsnew/3.11.html">what’s new in Python 3.11</a></p> <section id="generator-based-coroutine-removal-asyncio-coroutine"> -<h3>Generator-based coroutine removal (asyncio.coroutine)<a class="headerlink" href="#generator-based-coroutine-removal-asyncio-coroutine" title="Permalink to this heading">¶</a></h3> +<h3>Generator-based coroutine removal (asyncio.coroutine)<a class="headerlink" href="#generator-based-coroutine-removal-asyncio-coroutine" title="Link to this heading">¶</a></h3> <p>Support for <a class="reference external" href="https://docs.python.org/3.10/library/asyncio-task.html#generator-based-coroutines">generator-based coroutines</a> has been deprecated since Python 3.8, and is finally removed in 3.11. This usually results in the following error:</p> @@ -99,7 +99,7 @@ and <code class="docutils literal notranslate"><span class="pre">yield</span> <s </div> </section> <section id="inspect-getargspec-and-inspect-formatargspec-removal"> -<h3>inspect.getargspec() and inspect.formatargspec() removal<a class="headerlink" href="#inspect-getargspec-and-inspect-formatargspec-removal" title="Permalink to this heading">¶</a></h3> +<h3>inspect.getargspec() and inspect.formatargspec() removal<a class="headerlink" href="#inspect-getargspec-and-inspect-formatargspec-removal" title="Link to this heading">¶</a></h3> <p>The <a class="reference external" href="https://docs.python.org/3.10/library/inspect.html#inspect.getargspec">inspect.getargspec()</a> (deprecated since Python 3.0) and <a class="reference external" href="https://docs.python.org/3.10/library/inspect.html#inspect.formatargspec">inspect.formatargspec()</a> (deprecated since Python 3.5) functions are both removed in Python 3.11.</p> @@ -200,10 +200,10 @@ of <code class="docutils literal notranslate"><span class="pre">Signature</span> </section> </section> <section id="python-3-10"> -<h2>Python 3.10<a class="headerlink" href="#python-3-10" title="Permalink to this heading">¶</a></h2> +<h2>Python 3.10<a class="headerlink" href="#python-3-10" title="Link to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3/whatsnew/3.10.html">what’s new in Python 3.10</a></p> <section id="configure-no-package-python-3-1-found"> -<h3>configure: No package ‘python-3.1’ found<a class="headerlink" href="#configure-no-package-python-3-1-found" title="Permalink to this heading">¶</a></h3> +<h3>configure: No package ‘python-3.1’ found<a class="headerlink" href="#configure-no-package-python-3-1-found" title="Link to this heading">¶</a></h3> <p>automake prior to 1.16.3 wrongly recognized Python 3.10 as 3.1. As a result, build with Python 3.10 fails:</p> <div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="go">checking for python version... 3.1</span> @@ -239,7 +239,7 @@ distribution of automake:</p> <p>The upstream fix is to create new distfiles using automake-1.16.3+.</p> </section> <section id="distutils-sysconfig-deprecation"> -<h3>distutils.sysconfig deprecation<a class="headerlink" href="#distutils-sysconfig-deprecation" title="Permalink to this heading">¶</a></h3> +<h3>distutils.sysconfig deprecation<a class="headerlink" href="#distutils-sysconfig-deprecation" title="Link to this heading">¶</a></h3> <p>Upstream intends to remove distutils by Python 3.12. Python 3.10 starts throwing deprecation warnings for various distutils modules. The distutils.sysconfig is usually easy to port.</p> @@ -278,10 +278,10 @@ no trivial replacement for the variants with <code class="docutils literal notra </section> </section> <section id="python-3-9"> -<h2>Python 3.9<a class="headerlink" href="#python-3-9" title="Permalink to this heading">¶</a></h2> +<h2>Python 3.9<a class="headerlink" href="#python-3-9" title="Link to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3/whatsnew/3.9.html">what’s new in Python 3.9</a></p> <section id="base64-encodestring-base64-decodestring-removal"> -<h3>base64.encodestring / base64.decodestring removal<a class="headerlink" href="#base64-encodestring-base64-decodestring-removal" title="Permalink to this heading">¶</a></h3> +<h3>base64.encodestring / base64.decodestring removal<a class="headerlink" href="#base64-encodestring-base64-decodestring-removal" title="Link to this heading">¶</a></h3> <p>Python 3.9 removes the deprecated <code class="docutils literal notranslate"><span class="pre">base64.encodestring()</span></code> and <code class="docutils literal notranslate"><span class="pre">base64.decodestring()</span></code> functions. While they were deprecated since Python 3.1, many packages still use them today.</p> @@ -310,10 +310,10 @@ of base64-encoded data for any length of output.</p> </section> </section> <section id="python-3-8"> -<h2>Python 3.8<a class="headerlink" href="#python-3-8" title="Permalink to this heading">¶</a></h2> +<h2>Python 3.8<a class="headerlink" href="#python-3-8" title="Link to this heading">¶</a></h2> <p>See also: <a class="reference external" href="https://docs.python.org/3/whatsnew/3.8.html">what’s new in Python 3.8</a></p> <section id="python-config-and-pkg-config-no-longer-list-python-library-by-default"> -<h3>python-config and pkg-config no longer list Python library by default<a class="headerlink" href="#python-config-and-pkg-config-no-longer-list-python-library-by-default" title="Permalink to this heading">¶</a></h3> +<h3>python-config and pkg-config no longer list Python library by default<a class="headerlink" href="#python-config-and-pkg-config-no-longer-list-python-library-by-default" title="Link to this heading">¶</a></h3> <p>Until Python 3.7, the <code class="docutils literal notranslate"><span class="pre">python-X.Y</span></code> pkg-config file and python-config tool listed the Python library. Starting with 3.8, this is no longer the case. If you are building Python extensions, this is fine (they @@ -334,7 +334,7 @@ are provided for the purpose.</p> </section> </section> <section id="replacing-the-toml-package"> -<h2>Replacing the toml package<a class="headerlink" href="#replacing-the-toml-package" title="Permalink to this heading">¶</a></h2> +<h2>Replacing the toml package<a class="headerlink" href="#replacing-the-toml-package" title="Link to this heading">¶</a></h2> <p>The old <a class="reference external" href="https://pypi.org/project/toml/">toml</a> package is no longer maintained. It was last released in November 2020 and it was never updated to implement TOML 1.0. The recommended alternatives are:</p> @@ -346,7 +346,7 @@ The recommended alternatives are:</p> while preserving style</p></li> </ul> <section id="porting-to-tomllib-tomli-without-toml-fallback"> -<h3>Porting to tomllib/tomli without toml fallback<a class="headerlink" href="#porting-to-tomllib-tomli-without-toml-fallback" title="Permalink to this heading">¶</a></h3> +<h3>Porting to tomllib/tomli without toml fallback<a class="headerlink" href="#porting-to-tomllib-tomli-without-toml-fallback" title="Link to this heading">¶</a></h3> <p>Using a combination of <a class="reference external" href="https://docs.python.org/3.11/library/tomllib.html">tomllib</a> and <a class="reference external" href="https://pypi.org/project/tomli/">tomli</a> is the recommended approach for packages that only read TOML files, or both read and write them but do not need to preserve style. The tomllib module is available @@ -411,7 +411,7 @@ where it is named <code class="docutils literal notranslate"><span class="pre">T </div> </section> <section id="porting-to-tomllib-tomli-with-toml-fallback"> -<h3>Porting to tomllib/tomli with toml fallback<a class="headerlink" href="#porting-to-tomllib-tomli-with-toml-fallback" title="Permalink to this heading">¶</a></h3> +<h3>Porting to tomllib/tomli with toml fallback<a class="headerlink" href="#porting-to-tomllib-tomli-with-toml-fallback" title="Link to this heading">¶</a></h3> <p>If upstream insists on preserving compatibility with EOL versions of Python, it is possible to use a combination of <a class="reference external" href="https://docs.python.org/3.11/library/tomllib.html">tomllib</a>, <a class="reference external" href="https://pypi.org/project/tomli/">tomli</a> and <a class="reference external" href="https://pypi.org/project/toml/">toml</a>. Unfortunately, the incompatibilites in API need to be taken @@ -450,7 +450,7 @@ look like the following:</p> </div> </section> <section id="porting-to-tomli-w"> -<h3>Porting to tomli-w<a class="headerlink" href="#porting-to-tomli-w" title="Permalink to this heading">¶</a></h3> +<h3>Porting to tomli-w<a class="headerlink" href="#porting-to-tomli-w" title="Link to this heading">¶</a></h3> <p><a class="reference external" href="https://pypi.org/project/tomli-w/">tomli-w</a> provides a minimal module for dumping TOML files.</p> <p>The key differences between <a class="reference external" href="https://pypi.org/project/toml/">toml</a> and tomli-w are:</p> <ul class="simple"> @@ -564,7 +564,7 @@ modules need to be imported and used separately rather than one.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/preface.html b/guide/preface.html index 797607c..b5398ee 100644 --- a/guide/preface.html +++ b/guide/preface.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Preface — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Python interpreters" href="interpreter.html" /> @@ -32,7 +32,7 @@ <div class="body" role="main"> <section id="preface"> -<h1>Preface<a class="headerlink" href="#preface" title="Permalink to this heading">¶</a></h1> +<h1>Preface<a class="headerlink" href="#preface" title="Link to this heading">¶</a></h1> <p>Gentoo provides one of the best frameworks for providing Python support in packages among operating systems. This includes support for running multiple versions of Python (while most other distributions @@ -133,7 +133,7 @@ and improvements are welcome.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/pypi.html b/guide/pypi.html index d745b17..dae5bcc 100644 --- a/guide/pypi.html +++ b/guide/pypi.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>pypi — helper eclass for PyPI archives — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Common helper functions" href="helper.html" /> @@ -32,7 +32,7 @@ <div class="body" role="main"> <section id="pypi-helper-eclass-for-pypi-archives"> -<h1>pypi — helper eclass for PyPI archives<a class="headerlink" href="#pypi-helper-eclass-for-pypi-archives" title="Permalink to this heading">¶</a></h1> +<h1>pypi — helper eclass for PyPI archives<a class="headerlink" href="#pypi-helper-eclass-for-pypi-archives" title="Link to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">pypi</span></code> eclass is a small eclass to facilitate fetching sources from PyPI. It abstracts away the complexity of PyPI URLs, and makes it easier to adapt <code class="docutils literal notranslate"><span class="pre">SRC_URI</span></code> to their future changes.</p> @@ -43,9 +43,9 @@ other archives should be used. Read the <a class="reference internal" href="dis for more information.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/pypi.eclass/index.html">pypi.eclass(5)</a></p> <section id="pypi-urls"> -<h2>PyPI URLs<a class="headerlink" href="#pypi-urls" title="Permalink to this heading">¶</a></h2> +<h2>PyPI URLs<a class="headerlink" href="#pypi-urls" title="Link to this heading">¶</a></h2> <section id="modern-and-legacy-urls"> -<h3>Modern and legacy URLs<a class="headerlink" href="#modern-and-legacy-urls" title="Permalink to this heading">¶</a></h3> +<h3>Modern and legacy URLs<a class="headerlink" href="#modern-and-legacy-urls" title="Link to this heading">¶</a></h3> <p>The modern form of PyPI URLs include a hash of the distribution file, e.g.:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>https://files.pythonhosted.org/packages/20/2e/36e46173a288c1c40853ffdb712c67e0e022df0e1ce50b7b1b50066b74d4/gpep517-13.tar.gz @@ -76,7 +76,7 @@ guaranteed and using the canonical project name is recommended.</p> <p>The filenames and <code class="docutils literal notranslate"><span class="pre">${pytag}</span></code> are described in the subsequent sections.</p> </section> <section id="source-distribution-filenames"> -<h3>Source distribution filenames<a class="headerlink" href="#source-distribution-filenames" title="Permalink to this heading">¶</a></h3> +<h3>Source distribution filenames<a class="headerlink" href="#source-distribution-filenames" title="Link to this heading">¶</a></h3> <p>The filename of a source distribution (sdist) has the general form of:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="si">${</span><span class="nv">name</span><span class="si">}</span>-<span class="si">${</span><span class="nv">version</span><span class="si">}</span>.tar.gz </pre></div> @@ -101,7 +101,7 @@ name as the archive filename, minus <code class="docutils literal notranslate">< <code class="docutils literal notranslate"><span class="pre">.zip</span></code> distributions were used as well.</p> </section> <section id="binary-distribution-filenames"> -<h3>Binary distribution filenames<a class="headerlink" href="#binary-distribution-filenames" title="Permalink to this heading">¶</a></h3> +<h3>Binary distribution filenames<a class="headerlink" href="#binary-distribution-filenames" title="Link to this heading">¶</a></h3> <p>The filename of a binary distribution (wheel) has the general form of:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="si">${</span><span class="nv">name</span><span class="si">}</span>-<span class="si">${</span><span class="nv">version</span><span class="si">}</span>-<span class="si">${</span><span class="nv">pytag</span><span class="si">}</span>-<span class="si">${</span><span class="nv">abitag</span><span class="si">}</span>-<span class="si">${</span><span class="nv">platformtag</span><span class="si">}</span>.whl </pre></div> @@ -131,7 +131,7 @@ In this normalization, the example wheel is named:</p> </section> </section> <section id="packages-with-matching-name-and-version"> -<h2>Packages with matching name and version<a class="headerlink" href="#packages-with-matching-name-and-version" title="Permalink to this heading">¶</a></h2> +<h2>Packages with matching name and version<a class="headerlink" href="#packages-with-matching-name-and-version" title="Link to this heading">¶</a></h2> <p>In the most common case, the upstream package will have exactly the same name as the Gentoo package, and the version numbers will be entirely compatible. In this case, it is sufficient to inherit the eclass, @@ -191,7 +191,7 @@ to the variable or the default will be overwritten, e.g.:</p> </div> </section> <section id="package-with-a-different-name"> -<h2>Package with a different name<a class="headerlink" href="#package-with-a-different-name" title="Permalink to this heading">¶</a></h2> +<h2>Package with a different name<a class="headerlink" href="#package-with-a-different-name" title="Link to this heading">¶</a></h2> <p>If the project name used on PyPI differs from the Gentoo package name, the <code class="docutils literal notranslate"><span class="pre">PYPI_PN</span></code> variable can be used to use another name. This is especially useful for project that use uppercase letters or dots @@ -214,7 +214,7 @@ inherit<span class="w"> </span>distutils-r1<span class="w"> </span>pypi </div> </section> <section id="customizing-the-generated-url"> -<h2>Customizing the generated URL<a class="headerlink" href="#customizing-the-generated-url" title="Permalink to this heading">¶</a></h2> +<h2>Customizing the generated URL<a class="headerlink" href="#customizing-the-generated-url" title="Link to this heading">¶</a></h2> <p>The default value may not be suitable for your package if it uses a different project name than the Gentoo package name, a version number that needs to be translated differently or the legacy <code class="docutils literal notranslate"><span class="pre">.zip</span></code> sdist @@ -250,7 +250,7 @@ without <code class="docutils literal notranslate"><span class="pre">SRC_URI</sp the canonical project name, as normalization is not guaranteed.</p> </section> <section id="fetching-wheels"> -<h2>Fetching wheels<a class="headerlink" href="#fetching-wheels" title="Permalink to this heading">¶</a></h2> +<h2>Fetching wheels<a class="headerlink" href="#fetching-wheels" title="Link to this heading">¶</a></h2> <p>In very specific cases, it may be necessary to fetch wheels (i.e. prebuilt Python packages) instead. The <code class="docutils literal notranslate"><span class="pre">pypi_wheel_url</span></code> function is provided to aid this purpose. Its usage is:</p> @@ -364,7 +364,7 @@ the wheel filename. It has a matching synopsis:</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/pytest.html b/guide/pytest.html index 85054e4..22299ce 100644 --- a/guide/pytest.html +++ b/guide/pytest.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>pytest recipes — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Advanced concepts" href="concept.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="pytest-recipes"> -<h1>pytest recipes<a class="headerlink" href="#pytest-recipes" title="Permalink to this heading">¶</a></h1> +<h1>pytest recipes<a class="headerlink" href="#pytest-recipes" title="Link to this heading">¶</a></h1> <section id="skipping-tests-based-on-markers"> -<h2>Skipping tests based on markers<a class="headerlink" href="#skipping-tests-based-on-markers" title="Permalink to this heading">¶</a></h2> +<h2>Skipping tests based on markers<a class="headerlink" href="#skipping-tests-based-on-markers" title="Link to this heading">¶</a></h2> <p>A few packages use <a class="reference external" href="https://docs.pytest.org/en/stable/example/markers.html">custom pytest markers</a> to indicate e.g. tests requiring Internet access. These markers can be used to conveniently disable whole test groups, e.g.:</p> @@ -45,7 +45,7 @@ disable whole test groups, e.g.:</p> </div> </section> <section id="skipping-tests-based-on-paths-names"> -<h2>Skipping tests based on paths/names<a class="headerlink" href="#skipping-tests-based-on-paths-names" title="Permalink to this heading">¶</a></h2> +<h2>Skipping tests based on paths/names<a class="headerlink" href="#skipping-tests-based-on-paths-names" title="Link to this heading">¶</a></h2> <p>There are two primary methods of skipping tests based on path (and name) in pytest: using <code class="docutils literal notranslate"><span class="pre">--ignore</span></code> and <code class="docutils literal notranslate"><span class="pre">--deselect</span></code>.</p> <p><code class="docutils literal notranslate"><span class="pre">--ignore</span></code> causes pytest to entirely ignore a file or a directory @@ -87,7 +87,7 @@ requires using the local scope.</p> </div> </section> <section id="avoiding-the-dependency-on-pytest-runner"> -<h2>Avoiding the dependency on pytest-runner<a class="headerlink" href="#avoiding-the-dependency-on-pytest-runner" title="Permalink to this heading">¶</a></h2> +<h2>Avoiding the dependency on pytest-runner<a class="headerlink" href="#avoiding-the-dependency-on-pytest-runner" title="Link to this heading">¶</a></h2> <p><a class="reference external" href="https://pypi.org/project/pytest-runner/">pytest-runner</a> is a package providing <code class="docutils literal notranslate"><span class="pre">pytest</span></code> command to setuptools. While it might be convenient upstream, there is no real reason to use it in Gentoo packages. It has no real advantage over calling pytest @@ -105,7 +105,7 @@ tests. If this is the case, the dependency must be stripped.</p> </div> </section> <section id="using-pytest-xdist-to-run-tests-in-parallel"> -<h2>Using pytest-xdist to run tests in parallel<a class="headerlink" href="#using-pytest-xdist-to-run-tests-in-parallel" title="Permalink to this heading">¶</a></h2> +<h2>Using pytest-xdist to run tests in parallel<a class="headerlink" href="#using-pytest-xdist-to-run-tests-in-parallel" title="Link to this heading">¶</a></h2> <p><a class="reference external" href="https://pypi.org/project/pytest-xdist/">pytest-xdist</a> is a plugin that makes it possible to run multiple tests in parallel. This is especially useful for programs with large test suites that take significant time to run single-threaded.</p> @@ -143,7 +143,7 @@ tests are very slow while others are fast. Otherwise, the lengthy tests may end up being executed on the same thread and become a bottleneck.</p> </section> <section id="avoiding-dependencies-on-other-pytest-plugins"> -<h2>Avoiding dependencies on other pytest plugins<a class="headerlink" href="#avoiding-dependencies-on-other-pytest-plugins" title="Permalink to this heading">¶</a></h2> +<h2>Avoiding dependencies on other pytest plugins<a class="headerlink" href="#avoiding-dependencies-on-other-pytest-plugins" title="Link to this heading">¶</a></h2> <p>There is a number of pytest plugins that have little value to Gentoo users. They include plugins for test coverage (<code class="docutils literal notranslate"><span class="pre">dev-python/pytest-cov</span></code>), coding style (<code class="docutils literal notranslate"><span class="pre">dev-python/pytest-flake8</span></code>) @@ -168,7 +168,7 @@ to strip options enabling them from <code class="docutils literal notranslate">< </div> </section> <section id="explicitly-disabling-automatic-pytest-plugins"> -<h2>Explicitly disabling automatic pytest plugins<a class="headerlink" href="#explicitly-disabling-automatic-pytest-plugins" title="Permalink to this heading">¶</a></h2> +<h2>Explicitly disabling automatic pytest plugins<a class="headerlink" href="#explicitly-disabling-automatic-pytest-plugins" title="Link to this heading">¶</a></h2> <p>Besides plugins explicitly used by the package, there are a few pytest plugins that enable themselves automatically for all test suites when installed. In some cases, their presence causes tests of packages @@ -184,7 +184,7 @@ it explicitly:</p> </div> </section> <section id="expert-disabling-plugin-autoloading-entirely"> -<h2>Expert: disabling plugin autoloading entirely<a class="headerlink" href="#expert-disabling-plugin-autoloading-entirely" title="Permalink to this heading">¶</a></h2> +<h2>Expert: disabling plugin autoloading entirely<a class="headerlink" href="#expert-disabling-plugin-autoloading-entirely" title="Link to this heading">¶</a></h2> <p>If a test suite invokes pytest recursively (this is particularly the case when packaging other pytest plugins), the <code class="docutils literal notranslate"><span class="pre">-p</span></code> option can be insufficient to disable problematic plugins, as it does not @@ -209,7 +209,7 @@ the <code class="docutils literal notranslate"><span class="pre">entry_points.tx </div> </section> <section id="typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns"> -<h2>TypeError: _make_test_flaky() got an unexpected keyword argument ‘reruns’<a class="headerlink" href="#typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns" title="Permalink to this heading">¶</a></h2> +<h2>TypeError: _make_test_flaky() got an unexpected keyword argument ‘reruns’<a class="headerlink" href="#typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns" title="Link to this heading">¶</a></h2> <p>If you see a test error resembling the following:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>TypeError:<span class="w"> </span>_make_test_flaky<span class="o">()</span><span class="w"> </span>got<span class="w"> </span>an<span class="w"> </span>unexpected<span class="w"> </span>keyword<span class="w"> </span>argument<span class="w"> </span><span class="s1">'reruns'</span> </pre></div> @@ -232,7 +232,7 @@ python_test<span class="o">()</span><span class="w"> </span><span class="o">{</s </div> </section> <section id="importpathmismatcherror"> -<h2>ImportPathMismatchError<a class="headerlink" href="#importpathmismatcherror" title="Permalink to this heading">¶</a></h2> +<h2>ImportPathMismatchError<a class="headerlink" href="#importpathmismatcherror" title="Link to this heading">¶</a></h2> <p>An <code class="docutils literal notranslate"><span class="pre">ImportPathMismatchError</span></code> generally indicates that the same Python module (or one that supposedly looks the same) has been loaded twice using different paths, e.g.:</p> @@ -260,7 +260,7 @@ discovery to the actual test directories, e.g.:</p> </div> </section> <section id="fixture-not-found"> -<h2>fixture ‘…’ not found<a class="headerlink" href="#fixture-not-found" title="Permalink to this heading">¶</a></h2> +<h2>fixture ‘…’ not found<a class="headerlink" href="#fixture-not-found" title="Link to this heading">¶</a></h2> <p>Most of the time, a missing fixture indicates that some pytest plugin is not installed. In rare cases, it can signify an incompatible pytest version or package issue.</p> @@ -292,7 +292,7 @@ plugins.</p> </table> </section> <section id="warnings"> -<h2>Warnings<a class="headerlink" href="#warnings" title="Permalink to this heading">¶</a></h2> +<h2>Warnings<a class="headerlink" href="#warnings" title="Link to this heading">¶</a></h2> <p>pytest captures all warnings from the test suite by default, and prints a summary of them at the end of the test suite run:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">===============================</span><span class="w"> </span>warnings<span class="w"> </span><span class="nv">summary</span><span class="w"> </span><span class="o">===============================</span> @@ -436,7 +436,7 @@ setting ignores <code class="docutils literal notranslate"><span class="pre">Dep ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/qawarn.html b/guide/qawarn.html index cefaf4a..e1333b3 100644 --- a/guide/qawarn.html +++ b/guide/qawarn.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>QA checks and warnings — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Python package maintenance" href="package-maintenance.html" /> @@ -32,12 +32,12 @@ <div class="body" role="main"> <section id="qa-checks-and-warnings"> -<h1>QA checks and warnings<a class="headerlink" href="#qa-checks-and-warnings" title="Permalink to this heading">¶</a></h1> +<h1>QA checks and warnings<a class="headerlink" href="#qa-checks-and-warnings" title="Link to this heading">¶</a></h1> <p>This section explains Python-related QA checks and the resulting QA warnings that can be output while running the package manager or related tooling.</p> <section id="improved-qa-warning-reporting-in-portage"> -<h2>Improved QA warning reporting in Portage<a class="headerlink" href="#improved-qa-warning-reporting-in-portage" title="Permalink to this heading">¶</a></h2> +<h2>Improved QA warning reporting in Portage<a class="headerlink" href="#improved-qa-warning-reporting-in-portage" title="Link to this heading">¶</a></h2> <p>Normally, Portage outputs QA warnings at specific phases of the build process. They are usually interspersed with other verbose output, and they are easy to miss, especially when building multiple packages @@ -53,7 +53,7 @@ by default. To change that, set in your <code class="docutils literal notransla to <a class="reference external" href="https://gitweb.gentoo.org/proj/portage.git/tree/cnf/make.conf.example#n330">make.conf.example</a> included in the Portage distribution.</p> </section> <section id="compiled-bytecode-related-warnings"> -<h2>Compiled bytecode-related warnings<a class="headerlink" href="#compiled-bytecode-related-warnings" title="Permalink to this heading">¶</a></h2> +<h2>Compiled bytecode-related warnings<a class="headerlink" href="#compiled-bytecode-related-warnings" title="Link to this heading">¶</a></h2> <p>To improve performance, the Python interpreter compiles Python sources into bytecode. CPython and PyPy3 feature three optimization levels that impact the bytecode size:</p> @@ -89,7 +89,7 @@ missing:/usr/lib/python3.10/site-packages/trimesh/resources/templates/__pycache_ </pre></div> </div> <section id="modules-are-not-byte-compiled"> -<h3>Modules are not byte-compiled<a class="headerlink" href="#modules-are-not-byte-compiled" title="Permalink to this heading">¶</a></h3> +<h3>Modules are not byte-compiled<a class="headerlink" href="#modules-are-not-byte-compiled" title="Link to this heading">¶</a></h3> <p>The most common QA warning that can be noticed while building packages indicates that at least some of the expected <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files are missing. For example:</p> @@ -135,7 +135,7 @@ another suffix. For example, the template triggering the QA warning in trimesh package could be renamed from <code class="docutils literal notranslate"><span class="pre">.py</span></code> to <code class="docutils literal notranslate"><span class="pre">.py.tmpl</span></code>.</p> </section> <section id="stray-compiled-bytecode"> -<h3>Stray compiled bytecode<a class="headerlink" href="#stray-compiled-bytecode" title="Permalink to this heading">¶</a></h3> +<h3>Stray compiled bytecode<a class="headerlink" href="#stray-compiled-bytecode" title="Link to this heading">¶</a></h3> <p>The following QA warning indicates that there are stray <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files that are not clearly matching any installed Python module-implementation pair:</p> @@ -161,7 +161,7 @@ not to install them in the first place.</p></li> </section> </section> <section id="stray-top-level-files-in-site-packages"> -<h2>Stray top-level files in site-packages<a class="headerlink" href="#stray-top-level-files-in-site-packages" title="Permalink to this heading">¶</a></h2> +<h2>Stray top-level files in site-packages<a class="headerlink" href="#stray-top-level-files-in-site-packages" title="Link to this heading">¶</a></h2> <p>distutils-r1 checks for the common mistake of installing unexpected files that are installed top-level into the site-packages directory. An example error due to that looks like the following:</p> @@ -183,7 +183,7 @@ locally in the ebuild while waiting for a release with the fix.</p> <p>The subsequent sections describe the common causes and the suggested fixes.</p> <section id="example-for-test-packages-installed-by-setuptools"> -<h3>Example for test packages installed by setuptools<a class="headerlink" href="#example-for-test-packages-installed-by-setuptools" title="Permalink to this heading">¶</a></h3> +<h3>Example for test packages installed by setuptools<a class="headerlink" href="#example-for-test-packages-installed-by-setuptools" title="Link to this heading">¶</a></h3> <p>Many packages using the setuptools build system utilize the convenient <code class="docutils literal notranslate"><span class="pre">find_packages()</span></code> method to locate the Python sources. In some cases, this method also wrongly grabs top-level test directories or other files @@ -220,7 +220,7 @@ that restricts the installed package list, for example:</p> <p>For reference, see <a class="reference external" href="https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#custom-discovery">custom discovery in setuptools documentation</a>.</p> </section> <section id="documentation-files-installed-by-poetry"> -<h3>Documentation files installed by Poetry<a class="headerlink" href="#documentation-files-installed-by-poetry" title="Permalink to this heading">¶</a></h3> +<h3>Documentation files installed by Poetry<a class="headerlink" href="#documentation-files-installed-by-poetry" title="Link to this heading">¶</a></h3> <p>It is a relatively common problem that packages using the Poetry build system are installing documentation files (such as <code class="docutils literal notranslate"><span class="pre">README</span></code>) to the site-packages directory. This is because of incorrect @@ -249,9 +249,9 @@ entry:</p> </section> </section> <section id="deprecated-pep-517-backends"> -<h2>Deprecated PEP 517 backends<a class="headerlink" href="#deprecated-pep-517-backends" title="Permalink to this heading">¶</a></h2> +<h2>Deprecated PEP 517 backends<a class="headerlink" href="#deprecated-pep-517-backends" title="Link to this heading">¶</a></h2> <section id="flit-buildapi"> -<h3>flit.buildapi<a class="headerlink" href="#flit-buildapi" title="Permalink to this heading">¶</a></h3> +<h3>flit.buildapi<a class="headerlink" href="#flit-buildapi" title="Link to this heading">¶</a></h3> <p>Some packages are still found using the historical flit build backend. Their <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> files contain a section similar to the following:</p> @@ -273,7 +273,7 @@ reduces the build-time dependency footprint and therefore makes isolated PEP 517 builds faster.</p> </section> <section id="poetry-masonry-api"> -<h3>poetry.masonry.api<a class="headerlink" href="#poetry-masonry-api" title="Permalink to this heading">¶</a></h3> +<h3>poetry.masonry.api<a class="headerlink" href="#poetry-masonry-api" title="Link to this heading">¶</a></h3> <p>A similar problem applies to the packages using poetry. The respective <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> files contain:</p> <div class="highlight-toml notranslate"><div class="highlight"><pre><span></span><span class="k">[build-system]</span> @@ -292,7 +292,7 @@ PEP-517 documentation</a>:</p> dependency footprint and makes isolated builds much faster.</p> </section> <section id="setuptools-build-meta-legacy"> -<h3>setuptools.build_meta:__legacy__<a class="headerlink" href="#setuptools-build-meta-legacy" title="Permalink to this heading">¶</a></h3> +<h3>setuptools.build_meta:__legacy__<a class="headerlink" href="#setuptools-build-meta-legacy" title="Link to this heading">¶</a></h3> <p>Some packages using setuptools specify the following:</p> <div class="highlight-toml notranslate"><div class="highlight"><pre><span></span><span class="k">[build-system]</span> <span class="n">requires</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="s">"setuptools>=40.8.0"</span><span class="p">,</span><span class="w"> </span><span class="s">"wheel"</span><span class="p">]</span> @@ -400,7 +400,7 @@ and other packages tend to copy that mistake.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/search.html b/guide/search.html index 576386a..fe5aff0 100644 --- a/guide/search.html +++ b/guide/search.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Search — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <script src="_static/searchtools.js"></script> <script src="_static/language_data.js"></script> <link rel="index" title="Index" href="genindex.html" /> @@ -130,7 +130,7 @@ ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> </div> diff --git a/guide/searchindex.js b/guide/searchindex.js index ad73d01..ada37ae 100644 --- a/guide/searchindex.js +++ b/guide/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["any", "basic", "buildsys", "concept", "depend", "distutils", "distutils-legacy", "eclass", "expert-multi", "helper", "index", "interpreter", "interpreter-maintenance", "migration", "multi", "package-maintenance", "porting", "preface", "pypi", "pytest", "qawarn", "single", "test"], "filenames": ["any.rst", "basic.rst", "buildsys.rst", "concept.rst", "depend.rst", "distutils.rst", "distutils-legacy.rst", "eclass.rst", "expert-multi.rst", "helper.rst", "index.rst", "interpreter.rst", "interpreter-maintenance.rst", "migration.rst", "multi.rst", "package-maintenance.rst", "porting.rst", "preface.rst", "pypi.rst", "pytest.rst", "qawarn.rst", "single.rst", "test.rst"], "titles": ["python-any-r1 \u2014 build-time dependency", "Common basics", "Integration with build systems written in Python", "Advanced concepts", "Advanced dependencies", "distutils-r1 \u2014 standard Python build systems", "distutils-r1 legacy concepts", "Choosing between Python eclasses", "Expert python-r1 usage", "Common helper functions", "Gentoo Python Guide", "Python interpreters", "Maintenance of Python implementations", "Migration guides", "python-r1 \u2014 multi-impl packages", "Python package maintenance", "Porting tips", "Preface", "pypi \u2014 helper eclass for PyPI archives", "pytest recipes", "QA checks and warnings", "python-single-r1 \u2014 single-impl packages", "Tests in Python packages"], "terms": {"The": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "eclass": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 13, 14, 17, 19, 21, 22], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "enabl": [0, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 19, 20, 22], "support": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22], "packag": [0, 8, 9, 10, 11, 13, 17, 19], "need": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "pure": [0, 5, 6, 7, 8, 10, 11, 15, 18, 22], "refer": [0, 1, 5, 9, 11, 13, 14, 17, 18, 20, 21], "5": [0, 2, 5, 7, 8, 9, 11, 14, 15, 16, 18, 19, 21, 22], "defin": [0, 1, 5, 6, 11, 21, 22], "featur": [0, 4, 5, 6, 7, 8, 11, 12, 13, 20, 21, 22], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "pkg_setup": [0, 1, 2, 8, 21], "phase": [0, 1, 3, 6, 7, 8, 9, 10, 13, 14, 15, 20, 21], "It": [0, 1, 3, 4, 5, 6, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "normal": [0, 3, 5, 8, 9, 14, 15, 16, 18, 20, 21, 22], "call": [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 16, 18, 19, 20, 21, 22], "python_setup": [0, 1, 2, 10, 13, 14, 21], "function": [0, 1, 4, 6, 7, 8, 10, 11, 13, 14, 16, 18, 20, 21, 22], "order": [0, 1, 2, 4, 5, 7, 9, 12, 13, 14, 15, 21, 22], "find": [0, 2, 3, 4, 6, 14, 15, 19, 20, 22], "suitabl": [0, 7, 9, 14, 17, 18], "interpret": [0, 1, 2, 5, 6, 7, 9, 10, 13, 14, 15, 16, 19, 20, 21], "global": [0, 1, 5, 8, 13, 14, 19, 21, 22], "environ": [0, 5, 6, 10, 11, 13, 14, 16, 19, 21], "appropri": [0, 2, 4, 5, 6, 7, 9, 11, 12, 15, 18, 21, 22], "mean": [0, 1, 2, 5, 7, 8, 11, 15, 16, 18, 19, 21, 22], "most": [0, 3, 5, 6, 9, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22], "trivial": [0, 5, 12, 16, 21], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22], "autotool": [0, 5, 6, 10, 16, 21], "compat": [0, 1, 2, 4, 5, 6, 7, 9, 11, 13, 16, 18, 21], "system": [0, 3, 7, 8, 9, 10, 13, 14, 15, 17, 18, 20, 21, 22], "could": [0, 2, 3, 5, 6, 8, 9, 15, 16, 18, 20, 21, 22], "look": [0, 1, 6, 8, 16, 19, 20, 21, 22], "like": [0, 2, 4, 5, 6, 8, 11, 15, 16, 20, 21, 22], "follow": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22], "copyright": [0, 2, 4, 5, 6, 8, 14, 21, 22], "1999": [0, 2, 4, 5, 6, 8, 14, 21, 22], "2020": [0, 2, 4, 5, 6, 8, 13, 14, 16, 21, 22], "gentoo": [0, 1, 2, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22], "author": [0, 2, 4, 5, 6, 8, 9, 10, 12, 14, 20, 21, 22], "distribut": [0, 2, 4, 5, 6, 8, 14, 15, 16, 17, 20, 21, 22], "under": [0, 1, 2, 3, 4, 5, 6, 8, 14, 21, 22], "term": [0, 2, 4, 5, 6, 8, 14, 21, 22], "gnu": [0, 2, 4, 5, 6, 8, 14, 21, 22], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 21, 22], "public": [0, 2, 4, 5, 6, 8, 11, 14, 21, 22], "licens": [0, 2, 4, 5, 6, 8, 10, 14, 20, 21, 22], "v2": [0, 2, 4, 5, 6, 8, 14, 21, 22], "eapi": [0, 2, 4, 5, 6, 8, 10, 14, 21, 22], "7": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "python_compat": [0, 2, 4, 5, 6, 8, 10, 11, 12, 14, 15, 21, 22], "python3_": [0, 1, 2, 4, 5, 6, 8, 12, 21, 22], "6": [0, 1, 2, 4, 5, 6, 8, 11, 12, 14, 15, 16, 19, 21, 22], "8": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 20, 21, 22], "inherit": [0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 21, 22], "descript": [0, 2, 4, 5, 6, 8, 14, 21, 22], "A": [0, 1, 2, 4, 6, 7, 8, 10, 11, 15, 19, 20], "repositori": [0, 5, 6, 12, 15, 20], "data": [0, 2, 5, 6, 9, 16, 21, 22], "file": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 21], "describ": [0, 5, 6, 8, 9, 15, 18, 20], "media": [0, 2, 8], "player": [0, 4], "capabl": 0, "homepag": [0, 2, 4, 5, 6, 8, 14, 15, 21, 22], "http": [0, 2, 4, 5, 6, 8, 9, 12, 14, 16, 18, 20, 21, 22], "cgit": 0, "freedesktop": 0, "org": [0, 2, 4, 5, 6, 8, 9, 12, 14, 18, 20, 21, 22], "info": [0, 5, 6, 19], "src_uri": [0, 2, 4, 5, 6, 8, 14, 15, 18, 21, 22], "www": [0, 2, 8, 14, 21], "softwar": [0, 1, 4, 8, 14, 15, 16, 22], "pn": [0, 2, 4, 5, 6, 8, 9, 14, 18, 21, 22], "p": [0, 2, 4, 5, 6, 8, 14, 18, 19, 21, 22], "tar": [0, 2, 4, 5, 6, 8, 12, 14, 18, 21, 22], "gz": [0, 2, 4, 5, 6, 8, 14, 18, 21, 22], "bsd": [0, 2, 5, 6, 8, 14, 21], "slot": [0, 2, 4, 5, 6, 8, 11, 14, 21, 22], "0": [0, 2, 4, 5, 6, 8, 10, 11, 12, 14, 15, 16, 19, 20, 21, 22], "keyword": [0, 2, 4, 5, 6, 8, 10, 14, 16, 21, 22], "alpha": [0, 2, 4, 5, 6, 8, 11, 12, 14, 21, 22], "amd64": [0, 2, 4, 5, 6, 8, 12, 14, 21, 22], "arm": [0, 2, 4, 5, 6, 8, 21, 22], "arm64": [0, 2, 4, 5, 6, 8, 14, 21, 22], "hppa": [0, 2, 4, 5, 6, 8, 14, 21, 22], "ia64": [0, 2, 4, 5, 6, 8, 14, 21, 22], "mip": [0, 2, 4, 5, 6, 8, 21, 22], "ppc": [0, 2, 4, 5, 6, 8, 14, 21, 22], "ppc64": [0, 2, 4, 5, 6, 8, 14, 21, 22], "sh": [0, 2, 4, 5, 6, 8, 12, 21, 22], "sparc": [0, 2, 4, 5, 6, 8, 14, 21, 22], "x86": [0, 2, 4, 5, 6, 8, 12, 14, 21, 22], "ius": [0, 2, 4, 5, 8, 14, 21, 22], "rdepend": [0, 1, 2, 4, 5, 6, 8, 13, 14, 21, 22], "virtual": [0, 2, 8, 14], "udev": 0, "208": 0, "bdepend": [0, 1, 2, 4, 5, 6, 8, 12, 14, 19, 21, 22], "python_dep": [0, 2, 4, 5, 8, 10, 14, 21], "pkgconfig": [0, 2, 8, 14], "ebuild": [0, 1, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22], "demonstr": [0, 5, 21], "absolut": [0, 1, 9, 15, 21, 22], "minimum": [0, 15, 21], "work": [0, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 21, 22], "code": [0, 1, 3, 5, 6, 7, 8, 9, 11, 13, 14, 16, 19, 20, 21, 22], "onli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "three": [0, 1, 3, 9, 13, 16, 20], "highlight": [0, 16, 21], "line": [0, 3, 5, 13, 15, 16, 21, 22], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22], "specif": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22], "plu": [0, 21], "implicitli": [0, 3, 5, 8, 12, 20, 21, 22], "export": [0, 1, 2, 5, 21], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22], "other": [0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22], "declar": [0, 1, 2, 5, 6, 8, 9, 11, 14, 19, 21, 22], "ensur": [0, 1, 4, 5, 6, 9, 12, 14, 20, 21], "would": [0, 2, 4, 5, 7, 11, 12, 14, 15, 16, 18, 21, 22], "built": [0, 1, 3, 5, 6, 7, 8, 11, 12, 14, 16, 17, 18, 21, 22], "against": [0, 4, 7, 9, 11, 12, 14, 15, 21, 22], "implement": [0, 1, 3, 4, 5, 6, 7, 10, 14, 16, 17, 19, 20, 21, 22], "specifi": [0, 1, 2, 5, 6, 7, 8, 14, 15, 18, 19, 20, 21, 22], "get": [0, 5, 6, 12, 13, 18, 19, 22], "replac": [0, 5, 6, 10, 11, 13, 15, 18], "python_gen_any_dep": [0, 2, 8], "match": [0, 2, 4, 5, 6, 8, 9, 10, 11, 12, 15, 20, 21], "python_check_dep": [0, 2, 8], "accept": [0, 1, 4, 5, 6, 9, 12, 15, 16, 18, 19, 20], "templat": [0, 2, 4, 5, 15, 20, 21], "where": [0, 3, 5, 6, 9, 11, 12, 14, 16, 18, 21, 22], "liter": [0, 4, 21], "python_usedep": [0, 2, 4, 5, 8, 10, 12, 14, 15, 19, 21, 22], "substitut": [0, 4, 21], "requir": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "same": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22], "least": [0, 5, 8, 15, 20, 22], "one": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 16, 17, 19, 20, 21, 22], "test": [0, 1, 2, 3, 7, 8, 10, 11, 12, 13, 16, 17, 18, 21], "whether": [0, 1, 4, 5, 6, 7, 15, 19, 21, 22], "question": [0, 1, 5, 7, 14, 18, 19, 22], "In": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "particular": [0, 1, 4, 5, 6, 11, 15, 18, 22], "verifi": [0, 1, 5, 6, 8, 13, 20, 22], "branch": [0, 11, 16, 22], "wa": [0, 4, 5, 11, 12, 13, 16, 18, 19, 20, 22], "satisfi": [0, 1, 8, 12], "were": [0, 2, 3, 8, 11, 12, 13, 16, 18, 20], "instal": [0, 1, 3, 4, 7, 8, 10, 11, 12, 13, 16, 19], "current": [0, 5, 6, 11, 12, 13, 15, 19, 22], "For": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22], "purpos": [0, 5, 6, 9, 12, 14, 16, 18, 21, 22], "variabl": [0, 1, 5, 6, 8, 13, 14, 16, 18, 19, 21, 22], "string": [0, 1, 4, 5, 8, 14, 16, 21], "best": [0, 7, 12, 16, 17, 18, 19], "explain": [0, 1, 6, 20], "exampl": [0, 4, 5, 6, 7, 8, 9, 11, 12, 15, 16, 17, 18, 19, 21, 22], "meson": [0, 4, 5, 7, 10, 15], "manag": [0, 4, 6, 8, 9, 18, 20, 22], "cinnamon": 0, "fork": [0, 11, 12, 15, 22], "from": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "nautilu": 0, "develop": [0, 1, 7, 11, 15, 17, 19, 22], "linuxmint": 0, "com": [0, 2, 4, 5, 6, 8, 12, 14, 16, 18, 22], "project": [0, 1, 5, 8, 9, 10, 14, 17, 18, 19, 20, 22], "html": [0, 5, 8, 20, 22], "github": [0, 2, 4, 5, 6, 8, 12, 14, 17, 18, 21, 22], "nemo": 0, "archiv": [0, 2, 4, 10, 21, 22], "pv": [0, 2, 4, 5, 8, 14, 18, 21, 22], "gpl": [0, 2, 4, 8, 14, 21], "2": [0, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 22], "lgpl": [0, 2, 14, 21, 22], "fdl": [0, 21], "1": [0, 2, 3, 4, 5, 6, 8, 9, 15, 18, 19, 20, 21, 22], "dev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22], "polib": 0, "pygobject": [0, 14], "3": [0, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22], "python_has_vers": [0, 2, 8], "provid": [0, 1, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22], "its": [0, 1, 2, 5, 6, 7, 8, 11, 12, 15, 16, 18, 19, 22], "both": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13, 16, 17, 18, 19, 20, 21, 22], "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "dep": [0, 5, 13, 19], "true": [0, 1, 2, 5, 6, 8, 12, 13, 16, 22], "them": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 18, 19, 20, 21, 22], "while": [0, 2, 3, 4, 5, 6, 7, 8, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22], "which": [0, 6, 9, 10, 11, 14, 22], "wrapper": [0, 1, 6, 9, 13, 14, 22], "help": [0, 15, 17, 22], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 15, 16, 19, 22], "singl": [0, 1, 4, 6, 9, 10, 14, 15, 16, 18, 19, 20, 22], "option": [0, 1, 3, 6, 8, 10, 13, 15, 18, 19, 20, 21, 22], "class": [0, 1, 5, 16, 19], "flag": [0, 1, 5, 7, 8, 9, 10, 11, 12, 14, 15, 21, 22], "more": [0, 1, 3, 4, 5, 7, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21], "similarli": [0, 1, 5, 15, 18], "has_vers": [0, 4, 12], "root": [0, 5, 6, 13, 21, 22], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 21, 22], "b": [0, 18], "d": [0, 2, 3, 8, 9, 14, 18, 19], "r": [0, 2, 5, 9, 16, 22], "idepend": 0, "pdepend": [0, 2, 8, 12], "pass": [0, 6, 8, 9, 10, 12, 13, 16, 18, 19, 22], "assum": [0, 1, 4, 5, 6, 9, 13, 15, 21, 22], "verbos": [0, 15, 20, 22], "print": [0, 5, 8, 14, 19, 22], "check": [0, 5, 6, 9, 10, 12, 13, 16, 17, 22], "perform": [0, 2, 5, 6, 11, 12, 14, 18, 20, 21, 22], "result": [0, 5, 6, 8, 9, 12, 15, 16, 17, 18, 19, 20, 22], "return": [0, 2, 8, 16, 20, 22], "success": 0, "found": [0, 1, 3, 5, 6, 9, 10, 11, 12, 15, 18, 20, 22], "fals": [0, 2, 5, 8, 12, 15, 16], "otherwis": [0, 6, 7, 8, 9, 19], "note": [0, 1, 3, 4, 5, 6, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22], "invoc": [0, 5, 19, 20], "chain": 0, "abov": [0, 1, 6, 8, 12, 13, 15, 20, 21, 22], "also": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22], "written": [0, 1, 5, 7, 10, 11, 16, 19], "import": [0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 18, 19], "understand": 0, "correctli": [0, 1, 5, 6, 7, 9, 11, 12, 13, 15, 16, 22], "exactli": [0, 7, 18], "furthermor": [0, 2, 5], "combin": [0, 2, 3, 5, 10, 11, 12, 13, 16, 17, 18, 19, 21, 22], "must": [0, 1, 2, 3, 5, 6, 7, 8, 11, 15, 16, 19, 21, 22], "onc": [0, 5, 8, 11, 12, 20], "invalid": [0, 16], "split": [0, 5, 13, 16], "some": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "necessari": [0, 2, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22], "particularli": [0, 5, 6, 7, 11, 13, 15, 19, 22], "common": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22], "suit": [0, 1, 2, 5, 6, 7, 8, 9, 10, 12, 19, 22], "case": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21], "wrap": [0, 5, 6, 9, 13, 22], "programm": [0, 15], "complet": [0, 5, 16, 17, 20, 22], "bash": [0, 5, 7, 8, 9, 21, 22], "scop": 0, "releas": [0, 2, 8, 11, 12, 14, 16, 20], "download": [0, 2, 5, 8, 14], "xz": [0, 4, 12, 14, 21], "s390": [0, 2, 4, 5, 6, 8, 21, 22], "linux": [0, 2, 4, 5, 6, 8, 9, 14, 16, 21, 22], "maco": [0, 4, 6, 8, 21, 22], "x64": [0, 4, 6, 8, 21, 22], "m68k": [0, 4, 5, 6, 8, 21, 22], "mint": 0, "solari": [0, 6, 21, 22], "sparc64": [0, 6], "restrict": [0, 2, 4, 5, 10, 19, 20, 21, 22], "app": [0, 2, 4, 5, 8, 12, 14, 15, 18, 20, 22], "shell": [0, 8, 14, 22], "4": [0, 3, 5, 8, 9, 10, 11, 12, 14, 15, 22], "3_p30": 0, "pexpect": [0, 22], "pytest": [0, 4, 5, 8, 10, 12, 15, 18], "r1_pkg_setup": [0, 2, 21], "anoth": [0, 8, 9, 14, 15, 16, 18, 19, 20, 22], "possibl": [0, 2, 4, 5, 8, 9, 12, 14, 16, 17, 19, 22], "uncondition": [0, 1, 2, 4, 5, 6, 8, 11, 20, 21, 22], "condition": [0, 1, 2, 4, 5, 11, 12, 14, 15, 19, 21], "simplest": [0, 2, 5, 7, 14, 19, 22], "wai": [0, 5, 6, 9, 12, 13, 15, 19, 22], "achiev": [0, 8, 11, 16], "block": [0, 8, 13, 22], "express": [0, 8, 13, 21], "similar": [0, 2, 5, 14, 15, 20, 21, 22], "cmake": [0, 5, 6, 21], "qt": 0, "bind": [0, 2, 5, 8, 14, 21], "telepathi": 0, "bu": 0, "protocol": [0, 2, 21], "dbu": [0, 2], "hardest": 0, "differ": [0, 1, 3, 5, 9, 10, 11, 15, 16, 19, 22], "do": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22], "error": [0, 2, 5, 9, 12, 13, 16, 19, 20, 22], "prone": 0, "move": [0, 4, 5, 12], "insid": [0, 1, 3, 5, 6, 9, 14, 18, 19, 21, 22], "python3_6": [0, 2, 4, 8, 14], "gnome2": [0, 4, 14], "gobject": 0, "librari": [0, 1, 2, 3, 4, 8, 9, 11, 14, 21, 22], "access": [0, 10, 11, 19], "secret": 0, "servic": [0, 15, 22], "api": [0, 2, 5, 9, 10, 11, 13, 14, 16], "wiki": [0, 4, 8, 9, 12, 14, 17], "gnome": [0, 4, 14], "libsecret": 0, "apach": [0, 2, 4, 5, 8, 22], "introspect": 0, "fail": [0, 1, 2, 5, 8, 9, 11, 12, 16, 19, 22], "bug": [0, 5, 6, 12, 20, 22], "655482": 0, "required_us": [0, 1, 2, 4, 5, 7, 8, 13, 14, 21], "mock": [0, 4, 8, 11, 12, 19, 22], "fi": [0, 2, 4, 5, 8, 12, 14, 21], "host": 0, "variou": [1, 5, 6, 9, 13, 16], "r1": [1, 4, 9, 10, 12, 15, 18, 20, 22], "try": [1, 6, 8, 9, 11, 16, 22], "design": [1, 21], "you": [1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22], "probabl": [1, 6, 8, 13, 21], "us": [1, 9, 10, 11, 12, 13, 15, 16, 18, 20], "than": [1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 20, 22], "so": [1, 4, 5, 6, 11, 12, 15, 18, 19, 21, 22], "worthwhil": [1, 22], "shortli": 1, "bit": [1, 12, 17], "well": [1, 5, 7, 8, 11, 13, 15, 18, 20], "non": [1, 6, 7, 9, 12, 14, 16, 18, 19, 22], "obviou": [1, 22], "between": [1, 3, 5, 8, 10, 11, 13, 16, 18], "befor": [1, 4, 5, 8, 9, 10, 12, 14, 16], "thei": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22], "valid": [1, 5, 8, 15, 16, 20, 22], "valu": [1, 5, 6, 9, 13, 18, 19, 22], "pythonx_i": 1, "cpython": [1, 4, 5, 9, 11, 13, 18, 20], "x": [1, 5, 11, 16, 19, 22], "y": [1, 2, 11, 16], "pypy3": [1, 4, 5, 6, 8, 11, 12, 13, 15, 19, 20, 22], "typic": [1, 14], "ani": [1, 2, 3, 5, 6, 7, 10, 14, 16, 18, 19, 20, 22], "respons": [1, 5], "explicitli": [1, 5, 7, 8, 10, 13, 18, 20, 22], "put": [1, 8], "correct": [1, 5, 6, 7, 9, 10, 15, 18, 19, 20, 21], "meant": [1, 13, 20], "consist": [1, 6, 9, 12, 13, 14, 15], "cover": [1, 5, 6, 13, 22], "time": [1, 3, 4, 5, 6, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 22], "runtim": [1, 2, 3, 5, 8, 10, 13, 14, 15], "form": [1, 4, 12, 17, 18], "doe": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20, 22], "appli": [1, 4, 5, 6, 7, 12, 15, 19, 20, 21, 22], "distutil": [1, 3, 4, 9, 10, 13, 14, 18, 19, 20, 21, 22], "assign": 1, "default": [1, 2, 5, 6, 7, 8, 9, 11, 13, 14, 15, 18, 19, 20, 21, 22], "commonli": [1, 2, 3, 5, 6, 9, 11, 18], "concept": [1, 5, 10], "state": 1, "enforc": [1, 4, 5, 7, 8, 11, 19, 22], "whenev": [1, 4, 9, 11, 14, 15, 19, 21, 22], "run": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 20], "two": [1, 5, 6, 8, 9, 11, 13, 16, 19, 20, 21], "being": [1, 3, 5, 6, 8, 9, 11, 12, 15, 16, 18, 19, 22], "epython": [1, 2, 5, 8, 9, 12, 13, 19, 22], "contain": [1, 3, 4, 5, 6, 7, 12, 13, 15, 20], "": [1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 18, 19, 20, 21, 22], "basenam": 1, "identifi": 1, "e": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "g": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "python3": [1, 3, 5, 9, 11, 13, 15, 16, 19, 20, 22], "10": [1, 4, 5, 8, 10, 11, 12, 15, 20], "final": [1, 2, 4, 5, 9, 11, 13, 16, 21, 22], "path": [1, 3, 5, 6, 9, 10, 12, 13, 16, 18, 20, 22], "usr": [1, 2, 3, 5, 7, 8, 9, 19, 20, 22], "bin": [1, 2, 5, 7, 8, 9, 12, 21, 22], "full": [1, 2, 4, 5, 13, 22], "should": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "embed": [1, 2, 9, 11], "program": [1, 2, 5, 6, 11, 16, 19, 22], "shebang": [1, 10, 11, 22], "spawn": 1, "dure": [1, 5, 6, 7, 12, 13, 19, 20], "prefer": [1, 4, 5, 7, 8, 11, 12, 14, 15, 19, 22], "rather": [1, 5, 6, 8, 12, 15, 16, 17, 19, 20, 22], "bypass": 1, "virtualenv": [1, 6, 12, 22], "creat": [1, 3, 4, 5, 6, 12, 13, 15, 16, 20, 22], "pep": [1, 3, 6, 7, 10, 12, 15, 16, 18], "517": [1, 3, 6, 7, 10, 12], "mode": [1, 6, 7, 10, 13, 16, 20], "mai": [1, 3, 4, 5, 6, 8, 11, 12, 13, 15, 16, 18, 19, 22], "caus": [1, 4, 5, 8, 9, 13, 15, 18, 19, 20, 22], "failur": [1, 5, 10, 11, 12, 19], "modul": [1, 3, 4, 5, 6, 7, 8, 10, 11, 14, 15, 16, 19, 22], "previou": [1, 5, 12, 13, 16], "version": [1, 2, 3, 5, 6, 7, 8, 10, 12, 13, 16, 17, 19, 22], "just": [1, 6, 11, 13, 22], "resolv": [1, 5, 6, 16, 19, 22], "problem": [1, 3, 4, 5, 6, 8, 12, 15, 16, 17, 19, 20, 22], "pythonn": 1, "tool": [1, 2, 5, 8, 14, 15, 16, 20, 22], "etc": 1, "via": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 21, 22], "exec": [1, 8, 9, 11, 12, 22], "hardcod": [1, 12, 19], "either": [1, 2, 5, 8, 9, 11, 13, 19, 20, 22], "establish": [1, 13, 22], "local": [1, 2, 3, 4, 5, 8, 9, 12, 13, 14, 19, 20, 21, 22], "scope": [1, 4, 5, 8, 13, 19, 22], "multi": [1, 5, 10, 13, 21], "impl": [1, 5, 10, 13], "python_foreach_impl": [1, 2, 8, 14], "sub": [1, 3, 7, 8, 10, 22], "setup": [1, 3, 6, 7, 10, 13, 15, 19, 20, 22], "done": [1, 3, 5, 6, 8, 9, 14, 15, 19, 22], "directli": [1, 5, 6, 7, 9, 11, 13, 16, 19, 22], "section": [1, 5, 6, 7, 12, 15, 16, 18, 20, 22], "focu": [1, 7, 12, 14], "often": [1, 5, 12, 22], "extern": [1, 2, 5, 6, 7, 11, 12, 22], "languag": [1, 2, 5, 11, 15], "usual": [1, 3, 4, 5, 7, 11, 13, 15, 16, 19, 20, 22], "rule": [1, 2, 6, 7, 8, 13, 14, 15, 18], "classifi": [1, 6], "categori": [1, 15], "present": [1, 5, 6, 15, 20], "script": [1, 2, 5, 6, 7, 8, 10, 11, 12, 14, 16, 21], "usabl": [1, 11], "whose": [1, 5, 18], "therefor": [1, 2, 5, 6, 7, 8, 11, 12, 15, 19, 20, 22], "howev": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22], "modern": [1, 4, 5, 6, 11, 12, 19, 22], "base": [1, 4, 5, 7, 8, 10, 12, 14, 15, 21, 22], "entri": [1, 5, 12, 19, 20], "point": [1, 5, 11, 13, 15, 19, 22], "refus": [1, 4, 11], "place": [1, 6, 11, 12, 18, 20], "special": [1, 3, 4, 5, 6, 16, 22], "subclass": 1, "extra": [1, 5, 6, 10], "still": [1, 5, 6, 8, 11, 13, 16, 18, 20, 22], "meaningfulli": 1, "handl": [1, 4, 5, 6, 8, 13, 14, 15, 22], "gracefulli": [1, 4, 8], "subset": [1, 4, 5, 7, 8, 11, 12, 14, 15, 20, 22], "without": [1, 4, 10, 11, 13, 14, 15, 18, 19, 22], "There": [1, 3, 5, 8, 9, 15, 16, 19, 20, 22], "multipl": [1, 3, 4, 5, 7, 10, 14, 15, 17, 19, 20, 22], "approach": [1, 5, 7, 8, 12, 16, 22], "ad": [1, 5, 7, 10, 11, 13, 14, 19], "consid": [1, 2, 3, 5, 6, 7, 8, 11, 12, 14, 15, 16, 20], "light": 1, "enough": [1, 11, 22], "inform": [1, 3, 6, 10, 13, 16, 18, 20, 22], "messag": [1, 5, 22], "pkg_postinst": [1, 5], "util": [1, 2, 4, 5, 7, 8, 9, 12, 15, 19, 20, 21, 22], "optfeatur": 1, "cheap": 1, "rebuild": [1, 6, 11], "includ": [1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 15, 16, 17, 18, 19, 20, 21, 22], "__init__": [1, 3, 5, 9, 19, 20, 22], "py": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 22], "As": [1, 3, 5, 6, 7, 8, 11, 12, 13, 15, 16, 19, 21, 22], "thumb": [1, 6, 7, 13, 15], "belong": [1, 22], "care": [1, 2, 5, 7, 9, 15, 22], "addit": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 15, 18, 19, 22], "plugin": [1, 3, 5, 6, 8, 10, 22], "setuptools_scm": [1, 10, 22], "document": [1, 2, 7, 8, 10, 11, 14, 17, 22], "former": [1, 5, 7, 8, 13, 16, 22], "runner": [1, 5, 7, 10], "sinc": [1, 2, 3, 5, 6, 7, 11, 12, 13, 15, 16, 19, 22], "sometim": [1, 4, 5, 6, 7, 9, 11, 19, 22], "These": [1, 5, 6, 7, 11, 12, 13, 15, 19, 22], "go": [1, 2, 8, 17, 18, 19], "doc": [1, 2, 5, 8, 21], "respect": [1, 4, 5, 12, 14, 15, 19, 20], "maximum": [1, 5], "coverag": [1, 5, 15, 19, 22], "further": [1, 19], "guid": [1, 3, 5, 16, 17, 20], "linter": 1, "report": [1, 6, 9, 10, 12, 15, 22], "actual": [1, 5, 6, 8, 9, 11, 12, 15, 18, 19, 22], "undesir": [1, 5, 10, 19], "again": [1, 2, 15, 22], "conveni": [1, 4, 5, 6, 7, 19, 20, 22], "add": [1, 2, 5, 6, 8, 12, 15, 18, 20, 21, 22], "sphinx": [1, 3, 6, 7, 8, 10, 12, 15], "copi": [1, 3, 5, 6, 9, 11, 15, 20, 21, 22], "c": [1, 2, 6, 8, 9, 10, 11, 14], "extens": [1, 6, 7, 8, 9, 10, 11, 14, 15, 16], "header": [1, 9], "numpi": [1, 2, 22], "If": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "metadata": [1, 5, 6, 14, 15, 21], "pyproject": [1, 5, 7, 12, 20, 22], "toml": [1, 5, 7, 10, 12, 20, 22], "setuptool": [1, 3, 4, 5, 7, 8, 12, 13, 15, 18, 19, 22], "cfg": [1, 3, 5, 6, 15, 19, 20, 22], "custom": [1, 2, 3, 6, 10, 13, 15, 16, 19, 20], "read": [1, 5, 16, 18, 22], "name": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 16, 22], "uncondit": [1, 2, 5, 10, 13, 14, 15], "upstream": [1, 3, 4, 5, 6, 7, 9, 11, 12, 14, 15, 16, 18, 19, 20, 22], "spuriou": 1, "strip": [1, 3, 5, 11, 15, 19, 22], "ommit": 1, "kei": [1, 5, 16, 19, 20, 21], "kind": [1, 3, 7, 9, 11, 22], "621": 1, "older": [1, 11, 15, 18], "flit": [1, 5, 6, 12, 13], "poetri": [1, 5, 6, 13], "indic": [1, 5, 6, 11, 12, 13, 15, 18, 19, 20, 22], "install_requir": [1, 3, 5, 6], "group": [1, 2, 6, 13, 15, 19], "extras_requir": [1, 5], "setup_requir": [1, 5, 19], "deprec": [1, 3, 5, 10, 11, 13, 22], "tests_requir": [1, 5], "tox": [1, 5, 22], "ini": [1, 5, 19, 22], "noxfil": 1, "python_requir": 1, "besid": [2, 6, 11, 14, 19, 20], "few": [2, 4, 6, 12, 19, 22], "make": [2, 3, 4, 5, 6, 7, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22], "proper": [2, 8], "fairli": [2, 15, 21], "recent": [2, 3, 5, 15, 22], "agnost": 2, "henc": [2, 5, 14], "treat": [2, 19], "arbitrari": [2, 13, 18, 22], "ha": [2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22], "gain": [2, 19], "quit": [2, 4, 6, 11, 12], "At": [2, 5, 11, 15, 17, 20], "mani": [2, 5, 8, 12, 14, 15, 16, 20, 22], "old": [2, 4, 5, 6, 8, 10, 11, 12, 16, 22], "reason": [2, 4, 5, 6, 11, 18, 19, 22], "suffici": [2, 5, 6, 7, 11, 14, 18], "prior": [2, 3, 5, 6, 8, 11, 12, 13, 16, 20, 22], "happen": [2, 3, 4, 6, 7, 8, 11, 21, 22], "natur": [2, 3, 5, 8, 15], "sort": 2, "latter": [2, 5, 7, 8, 13, 15, 16, 19, 22], "set": [2, 4, 5, 6, 7, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "much": [2, 5, 20, 22], "compon": [2, 3, 8, 11, 14, 16], "account": [2, 8, 11, 15, 22], "detail": [2, 7, 9, 11, 13, 16, 20, 22], "choic": [2, 6, 7, 13, 18, 22], "chapter": [2, 5, 8, 9], "along": [2, 5, 6, 7, 11, 12, 13, 20, 21, 22], "toolchain": [2, 4, 8], "func": [2, 8], "commit": [2, 12, 18, 22], "6e5e8a57628095d8d0c8bbb38187afb0f3a42112": 2, "userspac": 2, "xbox": 2, "360": 2, "control": [2, 4, 5, 19], "driver": 2, "xboxdrv": 2, "gitlab": [2, 8], "io": [2, 4, 5, 8, 14, 21], "chewi": 2, "workdir": [2, 5, 18], "lib": [2, 3, 5, 7, 9, 16, 19, 20, 22], "boost": [2, 7], "glib": 2, "sy": [2, 5, 8, 11, 14, 15, 16, 22], "libudev": 2, "libusb": 2, "x11": 2, "libx11": 2, "src_compil": [2, 5, 6, 8, 14, 22], "escon": 2, "cxx": 2, "tc": [2, 9], "getcxx": 2, "getar": 2, "ranlib": 2, "getranlib": 2, "cxxflag": 2, "wall": 2, "linkflag": 2, "ldflag": [2, 5], "src_instal": [2, 5, 8, 9, 14, 21], "dobin": [2, 9], "doman": 2, "dodoc": [2, 5], "new": [2, 5, 6, 9, 10, 11, 13, 16, 19, 22], "readm": [2, 12, 20], "md": [2, 20], "todo": [2, 9, 12], "yourself": [2, 4, 22], "becaus": [2, 6, 11, 12, 15, 19, 20, 22], "cannot": [2, 3, 4, 5, 9, 11, 22], "my_p": 2, "src": [2, 5, 9, 22], "_rc": [2, 18], "rc": [2, 11, 18], "high": [2, 4, 11, 12, 15, 21], "open": [2, 16], "sourc": [2, 3, 10, 12, 14, 17, 20, 22], "schema": [2, 15], "free": [2, 15, 22], "orient": [2, 16], "databas": [2, 4], "mongodb": [2, 4], "fastdl": 2, "sspl": 2, "acct": 2, "user": [2, 3, 5, 6, 7, 8, 11, 12, 15, 19, 21, 22], "arch": [2, 5, 8, 11, 12, 18], "snappi": 2, "cpp": 2, "yaml": [2, 3], "70": 2, "thread": [2, 8, 19, 21, 22], "libpcr": 2, "42": 2, "zstd": 2, "snowbal": 2, "stemmer": 2, "net": [2, 8, 11, 14, 15, 21], "libpcap": 2, "zlib": 2, "11": [2, 5, 10, 12, 15, 22], "pymongo": 2, "cheetah3": 2, "psutil": 2, "pyyaml": 2, "type": [2, 3, 6, 13, 15, 16], "ncurs": [2, 14], "readlin": [2, 5, 8, 14], "admin": [2, 8], "mongo": 2, "src_configur": [2, 5, 8, 9, 13, 14, 21], "scons_opt": 2, "cc": [2, 9], "getcc": [2, 9], "disabl": [2, 5, 8, 10, 11, 12, 14, 18, 21, 22], "warn": [2, 5, 10, 16, 22], "pcre": 2, "core": [2, 5, 20, 22], "src_test": [2, 5, 6, 14, 22], "buildscript": 2, "resmok": 2, "dbpathprefix": 2, "job": [2, 5, 19], "makeopts_job": [2, 19], "die": [2, 3, 5, 8, 9, 14, 19, 22], "nostrip": [2, 8], "prefix": [2, 8, 9, 15, 16, 22], "ed": [2, 9, 15], "everyth": [2, 13, 20], "your": [2, 4, 5, 6, 7, 8, 11, 12, 15, 16, 18, 19, 20, 22], "python2_7": [2, 5, 6, 8, 13, 14, 21, 22], "eutil": 2, "molecular": 2, "dynam": 2, "nmr": 2, "analysi": [2, 21], "relax": [2, 19], "gna": 2, "bz2": [2, 8, 21], "python_required_us": [2, 4, 5, 8, 10, 14, 21], "python_gen_cond_dep": [2, 4, 5, 8, 12, 13, 21, 22], "numdifftool": 2, "matplotlib": [2, 5, 21], "python2": [2, 8, 9, 13, 21], "wxpython": [2, 21], "wx_gtk_ver": [2, 21], "sci": [2, 5, 21], "chemistri": 2, "pymol": 2, "bmrblib": 2, "minfx": 2, "scipi": 2, "molmol": 2, "vmd": 2, "visual": 2, "grace": 2, "opendx": 2, "gfx": 2, "pngcrush": 2, "python_moduleinto": [2, 5, 9, 14], "python_domodul": [2, 5, 9, 12, 14, 21], "make_wrapp": [2, 9], "python_get_sitedir": [2, 3, 8, 9, 22], "part": [2, 3, 4, 5, 8, 9, 12, 13, 14, 15, 18, 19, 22], "That": [2, 16, 22], "fortran_need": 2, "fortran": 2, "fortran_standard": 2, "90": [2, 14], "object": [2, 11, 16, 21], "chemic": 2, "kinet": 2, "thermodynam": 2, "transport": 2, "cantera": 2, "v": [2, 4, 5, 10, 13, 14, 22], "pch": 2, "sundial": 2, "eigen": 2, "libfmt": 2, "cython": [2, 10, 14, 21], "2_pkg_setup": 2, "scons_var": 2, "cc_flag": 2, "cxx_flag": 2, "std": [2, 3], "debug": [2, 5], "getfc": 2, "fortranflag": 2, "optimize_flag": 2, "wno": 2, "inlin": [2, 7, 14, 18], "renamed_shared_librari": 2, "use_pch": 2, "usex": [2, 5, 21], "system_fmt": 2, "system_sundi": 2, "system_eigen": 2, "env_var": 2, "extra_inc_dir": 2, "eigen3": 2, "scons_target": 2, "f90_interfac": 2, "n": [2, 16, 19], "python2_packag": 2, "none": [2, 5, 6, 16, 18], "python3_packag": 2, "python3_cmd": 2, "els": [2, 8, 11, 16], "stage_dir": 2, "libdirnam": 2, "get_libdir": [2, 8], "python_optim": [2, 8, 9, 20], "deal": [2, 7, 8, 10, 15], "sens": 2, "plain": [2, 5, 6, 13], "loop": [2, 5, 19], "autom": 2, "pipelin": [2, 22], "poisson": 2, "boltzmann": 2, "electrostat": 2, "calcul": 2, "poissonboltzmann": 2, "apb": 2, "opal": 2, "openbabel": 2, "zsi": 2, "lang": [2, 8, 11, 12, 21], "swig": [2, 21], "src_prepar": [2, 3, 5, 8, 9, 14, 16, 19, 20], "f": [2, 9, 16], "pyc": [2, 9, 20], "o": [2, 5, 20], "pyo": [2, 9, 20], "delet": [2, 14], "eappli": 2, "patch": [2, 4, 5, 6, 8, 11, 12, 18, 20, 22], "eapply_us": 2, "rm": [2, 3, 5, 9, 22], "rf": [2, 22], "python_copy_sourc": [2, 14], "python_configur": 2, "cat": [2, 5], "build_dir": [2, 3, 9, 14, 22], "build_config": 2, "eof": [2, 5], "eprefix": [2, 5, 8, 9], "max_atom": 2, "10000": 2, "build_pdb2pka": 2, "rebuild_swig": 2, "run_in_build_dir": [2, 8, 14], "python_instal": [2, 14], "cd": [2, 5, 9, 12, 22], "let": [2, 4, 8, 16, 21], "independ": [2, 4, 5, 6, 7, 14, 21], "separ": [2, 5, 6, 7, 8, 11, 14, 15, 16, 19, 22], "presum": 2, "manual": [2, 3, 6, 10, 11, 12, 18, 20], "wider": 2, "target": [2, 8, 9, 11, 12, 15, 21, 22], "rang": [2, 5, 12], "recommend": [2, 5, 7, 12, 13, 14, 15, 16, 18, 19, 21, 22], "gp": [2, 8], "daemon": [2, 8], "usb": [2, 8], "serial": [2, 5, 8, 15], "devic": [2, 8], "map": [2, 5, 6, 8, 15, 19], "client": [2, 8, 9, 11, 14], "gpsd": [2, 8], "mirror": [2, 4, 5, 6, 8, 14, 21, 22], "nongnu": [2, 8], "24": [2, 8, 19, 22], "misc": [2, 8], "pp": [2, 8], "20120407": [2, 8], "myesconsarg": [2, 8], "libdir": [2, 8, 9], "udevdir": [2, 8], "get_udevdir": [2, 8], "chrpath": [2, 8], "gpsd_user": [2, 8], "gpsd_group": [2, 8], "uucp": [2, 8], "manbuild": [2, 8], "use_scon": [2, 8], "sconstruct": [2, 8], "py2": [2, 8, 18, 22], "construct": [2, 4, 8, 21], "pkg_config": 2, "shlinkflag": 2, "destdir": [2, 8, 9, 20], "bundl": [2, 5, 12], "simpl": [2, 5, 7, 13, 14, 17], "impli": [2, 9, 11], "python_req_us": [2, 4, 5, 6, 8, 14, 21], "individu": [2, 5, 11, 19], "applic": [2, 9, 11], "had": 2, "instead": [2, 3, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 20, 21, 22], "no_waf_libdir": 2, "ye": 2, "unit": 2, "framework": [2, 3, 5, 11, 17], "mrzechonek": 2, "tut": 2, "roughli": [2, 9, 11, 13, 18], "ldap": 2, "ldb": 2, "samba": [2, 21], "ftp": [2, 21], "pub": 2, "elibc_freebsd": 2, "libbsd": 2, "popt": 2, "talloc": [2, 21], "tevent": 2, "9": [2, 5, 10, 12, 15, 18, 20, 22], "31": [2, 15], "tdb": 2, "12": [2, 8, 15, 16, 19, 20], "nd": 2, "openldap": 2, "libxslt": 2, "waf_binari": [2, 21], "buildtool": [2, 21], "filesdir": 2, "27": [2, 8], "optional_packag": 2, "myconf": [2, 8], "rpath": 2, "modulesdir": 2, "builtin": 2, "utils_src_configur": [2, 21], "tradition": 3, "python": [3, 6, 17, 18, 19, 20], "organ": 3, "subpackag": [3, 20], "locat": [3, 5, 20], "parent": [3, 9], "directori": [3, 5, 6, 9, 11, 12, 13, 14, 16, 18, 19, 20, 22], "submodul": 3, "repres": [3, 5, 22], "attribut": [3, 10, 16], "session": [3, 22], "addnod": 3, "site": [3, 5, 6, 9, 10, 11, 16, 19, 22], "fine": [3, 12, 16], "start": [3, 4, 5, 6, 11, 12, 15, 16, 18, 22], "problemat": [3, 6, 10, 19], "top": [3, 5, 9, 10, 18, 19, 22], "level": [3, 9, 10, 11, 22], "layout": [3, 6, 13, 22], "wish": [3, 6, 22], "zope": [3, 15], "share": [3, 5], "interfac": [3, 6, 11, 15, 16], "event": [3, 11, 19], "depend": [3, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20], "far": [3, 12, 21], "concern": 3, "entir": [3, 5, 9, 10, 12, 13, 14, 18, 22], "doabl": 3, "real": [3, 19, 20, 22], "we": [3, 4, 6, 8, 11, 12, 14, 15, 17, 20], "freshli": 3, "build": [3, 9, 10, 11, 15, 16, 18, 20, 22], "abl": [3, 15], "tmp": [3, 5, 9, 19, 20, 22], "portag": [3, 5, 8, 10, 12, 14, 15, 19, 22], "python3_8": 3, "traceback": [3, 5, 22], "last": [3, 5, 16], "stdin": 3, "modulenotfounderror": 3, "No": [3, 22], "now": [3, 5, 6, 8, 13, 14, 22], "around": [3, 5, 6, 11, 12, 22], "back": [3, 6, 16, 22], "better": [3, 6, 11, 12, 13, 14, 20], "solut": [3, 15, 16, 20, 22], "unlik": [3, 5, 6, 11, 15], "tradit": 3, "act": 3, "proxi": [3, 14], "strictli": [3, 5, 6, 15, 22], "bound": [3, 11, 16], "permit": [3, 4, 5, 6, 11, 15, 22], "load": [3, 7, 9, 16, 19, 20, 22], "search": [3, 10, 15], "method": [3, 5, 11, 13, 16, 19, 20, 22], "420": 3, "newer": [3, 4, 5, 6, 11, 12, 15, 16, 20], "pkgutil": 3, "standard": [3, 4, 6, 7, 9, 10, 11, 14, 16, 22], "discourag": [3, 6], "earlier": [3, 13], "ignor": [3, 4, 5, 8, 15, 19, 22], "did": [3, 13, 16, 22], "within": [3, 5, 6, 12, 15, 17, 22], "content": [3, 5, 7], "__path__": 3, "__import__": 3, "extend_path": 3, "__name__": 3, "pkg_resourc": [3, 6], "declare_namespac": 3, "altern": [3, 5, 6, 8, 10, 16, 17, 18, 22], "pth": 3, "automat": [3, 4, 5, 6, 10, 12, 15, 18, 20, 22], "inject": [3, 21, 22], "portabl": 3, "topic": [3, 17], "exact": [3, 5, 11, 21], "detect": [3, 5, 9, 15, 22], "recogn": [3, 5, 15, 16], "lack": [3, 9, 22], "action": [3, 15, 22], "distinguish": [3, 5, 13], "veri": [3, 4, 5, 6, 9, 11, 15, 17, 18, 19, 20, 22], "through": [3, 4, 5, 6, 8, 11, 16, 19], "suspici": 3, "less": [3, 15, 22], "ruamel": 3, "miss": [3, 4, 5, 6, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20], "learn": 3, "about": [3, 5, 6, 13, 15, 22], "collid": [3, 19, 22], "namespace_packag": 3, "per": [3, 20], "regular": [3, 7, 20, 22], "python3_11": [3, 12], "r1_run_phas": 3, "r1_python_instal": [3, 5], "style": [3, 4, 5, 13, 16, 17, 19, 22], "remov": [3, 4, 5, 6, 10, 11, 13, 14, 15, 19, 20, 22], "after": [3, 6, 9, 11, 12, 13, 15, 16, 18, 20, 22], "python_compil": 3, "r1_python_compil": [3, 5], "jaraco": [3, 5, 12, 19], "extrem": [3, 5, 6], "good": [3, 11, 15, 17, 19, 22], "been": [3, 5, 6, 8, 11, 12, 13, 14, 16, 19, 20], "yet": [3, 5, 8, 11, 21], "explicit": [3, 4, 5, 6, 18, 21, 22], "rdep": 3, "sed": [3, 5, 8, 14, 15, 19, 22], "r1_src_prepar": [3, 5, 19], "histor": [3, 6, 11, 13, 16, 18, 20, 22], "process": [3, 5, 7, 12, 16, 20, 21], "retir": 3, "major": [4, 5, 6, 11, 15, 22], "avail": [4, 5, 6, 8, 11, 13, 15, 16, 17], "sqlite3": 4, "sqlite": [4, 8], "xdg": 4, "music": 4, "lollypop": 4, "adishatz": 4, "syntax": [4, 10, 11, 15, 20], "lightweight": [4, 20], "password": 4, "backend": [4, 10, 12, 13], "pwman3": 4, "mysql": [4, 14], "postgr": 4, "fulli": [4, 5, 7, 11], "solv": [4, 17], "python_gen_impl_dep": 4, "helper": [4, 5, 7, 10, 14, 21, 22], "2_7": [4, 22], "3_": 4, "travel": 4, "spulec": 4, "freezegun": [4, 19, 22], "pypi": [4, 5, 6, 8, 10, 11, 13], "dateutil": 4, "six": [4, 8, 22], "nose": [4, 22], "distutils_enable_test": [4, 5, 10, 13, 19], "ll": [4, 14], "backport": [4, 6, 10, 12], "zero": [4, 15], "argument": [4, 6, 10, 13, 16, 22], "output": [4, 5, 6, 9, 16, 20, 22], "everi": [4, 5, 6, 8, 11, 14, 15, 16, 18, 20, 22], "escap": [4, 13, 21], "quot": [4, 21], "partial": [4, 5, 9, 10, 13], "python_single_usedep": [4, 5, 13, 21], "cli": [4, 5], "black": 4, "click": 4, "fnmatch": 4, "wildcard": 4, "stdlib": [4, 13, 16], "rememb": [4, 12, 18], "pattern": [4, 12, 13, 21], "prevent": [4, 5, 11, 21, 22], "filenam": [4, 5], "expans": 4, "expand": 4, "zoneinfo": 4, "advantag": [4, 5, 7, 19, 22], "adjust": [4, 9, 11, 16], "switch": [4, 7, 9, 11, 12, 13, 15, 22], "list": [4, 5, 8, 12, 13, 19, 20, 22], "longer": [4, 6, 11, 13, 18, 22], "silent": [4, 22], "updat": [4, 6, 9, 11, 12, 16, 18], "immedi": [4, 5, 12, 21], "becam": [4, 11], "empti": [4, 5, 15, 18], "importlib_metadata": [4, 6, 15, 22], "python3_7": [4, 8], "profil": [4, 6, 15], "feasibl": [4, 11, 15], "mask": [4, 11, 12, 15], "architectur": [4, 11], "skip": [4, 8, 10, 12, 16, 20], "merg": [4, 5], "deselect": [4, 12, 19, 22], "python_test": [4, 6, 8, 9, 12, 19, 22], "epytest_deselect": [4, 12, 19], "trustm": 4, "test_request": 4, "testrequest": 4, "test_https_warn": 4, "epytest": [4, 5, 6, 8, 12, 19, 22], "outer": 4, "whole": [4, 19, 22], "convinc": [4, 22], "signific": [4, 12, 19], "tl": 4, "pull": 4, "forc": [4, 5, 6, 8, 9, 12, 13, 19, 22], "remain": [4, 11, 12, 13], "facilit": [5, 9, 18], "deriv": [5, 6], "notabl": [5, 15, 16, 18], "effici": [5, 15], "oper": [5, 11, 17, 18], "backward": [5, 11, 16], "incompat": [5, 6, 11, 16, 19, 22], "greater": [5, 7], "number": [5, 7, 12, 15, 18, 19, 20, 22], "cost": [5, 11], "flexibl": [5, 7], "wheel": [5, 10, 11, 12, 15, 19, 20], "zip": [5, 6, 18], "stage": [5, 11, 20, 22], "compil": [5, 6, 10, 11, 22], "mere": [5, 7], "imag": [5, 9, 20], "compliant": [5, 7, 18], "invok": [5, 19, 22], "popul": [5, 15], "addition": [5, 9, 11, 14], "pyproject2setuppi": [5, 6, 13], "hack": [5, 6, 7, 13], "reli": [5, 6, 11, 22], "distutils_use_pep517": [5, 13], "legal": 5, "unset": [5, 6], "By": [5, 6, 11], "2022": [5, 13, 19], "xml": [5, 6], "feel": [5, 15], "json": 5, "martinblech": 5, "xmltodict": 5, "mit": [5, 6, 22], "vast": 5, "index": [5, 10], "sdist": [5, 15, 18, 20, 22], "binari": [5, 9, 12, 16], "mechan": [5, 7, 11], "especi": [5, 7, 18, 19, 20, 22], "pregener": 5, "nodej": 5, "fetch": [5, 10, 12], "own": [5, 22], "append": [5, 14, 15, 18, 22], "uniqu": [5, 14], "suffix": [5, 15, 18, 20], "gh": [5, 22], "request": [5, 8, 10, 12, 15], "distfil": [5, 16, 18, 21], "clearli": [5, 20, 22], "tarbal": [5, 12, 22], "textual": 5, "rich": 5, "implic": 5, "cf": [5, 12], "regener": [5, 12], "anywai": [5, 16], "underli": [5, 6, 7], "txt": [5, 6, 12, 19], "ci": [5, 22], "travi": 5, "yml": 5, "grep": 5, "statement": [5, 20], "indirect": 5, "relev": [5, 6, 13, 17, 19, 22], "unnecessarili": 5, "logic": [5, 6, 12, 22], "long": [5, 11, 12], "quickli": 5, "widest": 5, "avoid": [5, 6, 8, 10, 15, 16, 17, 22], "unpredict": 5, "who": [5, 17, 22], "distutils_single_impl": [5, 7], "aim": [5, 11, 15, 17, 20], "exist": [5, 10, 11, 12, 16, 20], "rewritten": [5, 21, 22], "layer": [5, 14], "pyroot": 5, "rootpi": 5, "physic": [5, 21], "root_numpi": 5, "pytabl": 5, "termcolor": 5, "determin": [5, 6, 7, 11, 21, 22], "flit_cor": [5, 12, 20], "buildapi": 5, "maintain": [5, 10, 11, 12, 16, 19], "suggest": [5, 8, 13, 15, 17, 19, 20, 22], "tabl": [5, 12, 13, 15, 16, 19], "summar": [5, 16], "use_pep517": 5, "hatchl": 5, "jupyt": 5, "jupyter_packag": 5, "build_api": 5, "maturin": 5, "mesonpi": 5, "see": [5, 9, 16, 19, 20, 22], "below": [5, 8], "pbr": [5, 6], "pep517": [5, 20], "masonri": 5, "scikit": 5, "scikit_build_cor": 5, "build_meta": 5, "__legacy__": 5, "sip": [5, 8, 15], "sipbuild": 5, "standalon": [5, 12], "itself": [5, 6, 8, 9, 12, 15, 19], "checkout": [5, 12, 22], "abil": [5, 6], "tag": [5, 12, 18, 22], "execut": [5, 6, 7, 9, 11, 12, 13, 14, 19, 22], "143": 5, "_install_setup_requir": 5, "attr": [5, 12, 22], "131": 5, "dist": [5, 19], "dict": [5, 21], "425": 5, "_distribut": 5, "self": [5, 16, 19, 22], "292": 5, "finalize_opt": 5, "717": 5, "ep": 5, "48": 5, "infer_vers": 5, "_get_vers": 5, "config": [5, 9, 12], "148": 5, "parsed_vers": 5, "_do_pars": 5, "110": 5, "rais": [5, 16], "lookuperror": 5, "scm": 5, "unabl": [5, 15, 22], "sure": [5, 15, 19, 22], "re": [5, 8, 15, 22], "intact": 5, "git": [5, 12, 22], "folder": 5, "don": [5, 13], "t": [5, 7, 8, 11, 13], "pip": [5, 12, 22], "proj": 5, "master": [5, 22], "egg": [5, 6, 19], "setuptools_scm_pretend_vers": 5, "incomplet": 5, "pleas": [5, 6, 8, 9, 12, 15, 16, 18, 19, 20, 21, 22], "reinvent": 5, "throw": [5, 16], "overrid": [5, 9, 14, 18, 22], "pdm_build_scm_vers": 5, "loadabl": 5, "presenc": [5, 8, 19], "distutils_ext": 5, "relat": [5, 10, 12, 13, 15, 22], "cross": 5, "unless": [5, 6, 8, 15, 18], "distutils_opt": 5, "assert": [5, 10, 20], "among": [5, 17], "esetup": [5, 8], "build_ext": [5, 6, 22], "2023": 5, "even": [5, 8, 9, 11, 19, 22], "isn": 5, "worth": 5, "complex": [5, 7, 16, 18, 21], "worri": 5, "qa": [5, 6, 9, 10, 12, 17], "static": [5, 8], "write": [5, 6, 7, 12, 16, 17, 20], "hybrid": [5, 10], "expos": [5, 6, 22], "alwai": [5, 6, 8, 11, 13, 16, 17, 18, 20], "guarante": [5, 6, 10, 18], "fix": [5, 6, 10, 11, 12, 15, 16, 19, 20, 22], "taken": [5, 16, 22], "ship": [5, 20], "issu": [5, 6, 13, 15, 16, 19, 22], "frobnic": 5, "makefil": [5, 14], "jq": 5, "pyx": 5, "unresolv": 5, "regard": 5, "simultan": [5, 11, 17, 22], "link": [5, 7, 9, 16], "editor": 5, "broken": [5, 6, 19, 22], "cryptic": 5, "revers": [5, 7, 12, 15], "miscompil": 5, "panda": 5, "breakag": [5, 22], "dask": [5, 19], "29": 5, "_lib": 5, "hashtabl": 5, "_hashtabl": 5, "tslib": 5, "_tslib": 5, "13": [5, 15, 18, 19, 22], "interv": 5, "init": 5, "30": [5, 11], "convers": [5, 6], "outofboundstimedelta": 5, "localize_pydatetim": 5, "importerror": [5, 6, 10, 11, 16], "38": [5, 20], "x86_64": 5, "undefin": 5, "symbol": 5, "pandas_datetime_to_datetimestruct": 5, "easiest": [5, 15, 21], "workaround": [5, 20], "j1": 5, "origin": [5, 9, 11, 12, 16, 22], "extend": [5, 11], "introduc": [5, 11], "src_": 5, "python_": [5, 8], "_all": [5, 8], "compris": 5, "behav": [5, 8], "r1_": 5, "correspond": [5, 11, 12, 15], "python_prepare_al": [5, 19], "each": [5, 6, 7, 11, 14], "python_configure_al": 5, "python_compile_al": [5, 8], "python_test_al": 5, "python_install_al": 5, "dedic": [5, 6, 12, 14], "chang": [5, 6, 8, 9, 10, 11, 13, 14, 15, 18, 20, 22], "task": [5, 8, 12], "default_src_prepar": 5, "ez_setup": 5, "bootstrap": [5, 6, 10], "end": [5, 6, 7, 9, 11, 14, 19, 22], "dir": [5, 14], "extran": 5, "fixm": 5, "test_pytest_plugin": 5, "test_testcase_no_app": 5, "_": [5, 12, 15, 18, 22], "test_test_util": 5, "pointless": 5, "cov": [5, 19, 22], "addopt": 5, "aiohttp": [5, 19], "r1_python_prepare_al": [5, 19], "duplic": [5, 14, 22], "moment": [5, 11, 13, 15], "modif": 5, "keep": [5, 15, 17], "why": [5, 6, 10], "console_script": [5, 6], "configur": [5, 6, 8, 13, 14, 20, 22], "step": [5, 6, 7, 8, 14], "mpi": 5, "distutils_arg": [5, 13], "resourcepath": 5, "compress": 5, "manpag": 5, "distutils_enable_sphinx": [5, 8], "emak": [5, 8, 9], "strongli": [5, 6, 15], "encourag": [5, 15], "testbitvector": 5, "redefin": [5, 19], "too": [5, 11, 22], "collada": 5, "einstalldoc": [5, 8, 14], "docinto": 5, "sample_cod": 5, "docompress": 5, "pf": 5, "r1_python_install_al": 5, "main": [5, 9], "manipul": [5, 22], "arrai": 5, "futur": [5, 15, 18], "pillow": 5, "tiff": 5, "webp": 5, "dash": 5, "underscor": [5, 15, 18, 22], "boolean": 5, "disable_tiff": 5, "enable_tiff": 5, "disable_webp": 5, "enable_webp": 5, "modifi": [5, 6, 11, 15, 20, 22], "beforehand": 5, "econf": [5, 21], "paremet": 5, "come": [5, 13, 19], "theme": [5, 6, 8], "larg": [5, 12, 15, 19, 20], "text": [5, 8, 16, 22], "hard": [5, 8, 12], "across": [5, 11, 22], "To": [5, 6, 8, 9, 12, 15, 16, 19, 20, 21], "those": [5, 6, 8, 9, 19, 22], "easili": [5, 14, 19, 22], "conf": [5, 6, 20], "ext": 5, "distutils_use_setuptool": [5, 13], "color": 5, "stream": 5, "handler": 5, "log": [5, 20], "coloredlog": 5, "xolox": 5, "readthedoc": 5, "en": 5, "latest": [5, 15], "humanfriendli": 5, "expert": [5, 10, 14, 22], "uncommon": [5, 15], "third": [5, 7, 13, 20], "parti": 5, "inflect": 5, "word": 5, "jazzband": 5, "rst": 5, "linker": [5, 9], "alabast": [5, 6], "python_target": [5, 7, 8, 11, 12], "inspect": 5, "omit": [5, 15, 16], "port": [5, 8, 10], "pyseri": 5, "psf": 5, "tri": 5, "incorrect": [5, 6, 20], "assumpt": 5, "consum": [5, 6, 22], "alter": [5, 19], "distutils_dep": 5, "dependneci": 5, "r1_src_compil": 5, "r1_src_instal": 5, "collis": [5, 15, 22], "r1_src_test": [5, 22], "primari": [5, 19, 22], "alongsid": [5, 6], "libfoo": 5, "setuptools_rust": 5, "ecosystem": [5, 15, 17], "over": [5, 7, 11, 12, 19, 21, 22], "internet": [5, 10, 19], "bump": [5, 12, 15, 18], "lock": 5, "pycargoebuild": 5, "cargo_opt": 5, "crate": 5, "url": [5, 10, 11, 15, 16], "cargo_crate_uri": 5, "qa_flags_ignor": 5, "posit": [5, 15], "cflag": [5, 9, 22], "cargo_src_unpack": 5, "inflector": 5, "alias": [5, 16], "asn1": 5, "asn1_der": 5, "_rust": 5, "src_unpack": 5, "benefit": [5, 7], "cyclic": 5, "suppos": [5, 16], "overlap": 5, "machineri": 5, "op": 5, "temporari": [5, 6, 22], "venv": [5, 6, 13, 22], "toward": 5, "tree": [5, 12, 13, 20, 22], "effect": [5, 8, 11, 20], "pick": [5, 12], "up": [5, 6, 9, 11, 13, 14, 15, 17, 19, 20, 22], "hukkin": 5, "tomli": [5, 12, 15], "pythonhost": [5, 18], "py3": [5, 18, 19], "whl": [5, 18], "unzip": [5, 18], "unittest": [5, 11, 22], "deliber": 5, "unpack": [5, 18], "gpep517": [5, 18, 20], "python_newscript": [5, 9], "__main__": [5, 22], "exit": [5, 16, 20, 22], "fragment": [5, 16], "emesonarg": 5, "dlint": 5, "meson_src_configur": 5, "meson_src_compil": 5, "meson_src_test": 5, "meson_src_instal": 5, "here": [6, 8, 14, 21], "direct": [6, 14], "first": [6, 10, 11, 12, 15, 16, 19, 20, 22], "convert": [6, 8, 13], "facil": 6, "right": [6, 7], "fit": [6, 22], "pyproject2toml": 6, "misbehav": 6, "subsequ": [6, 18, 20], "post": [6, 13, 15, 18, 22], "expect": [6, 11, 16, 19, 20, 22], "sidebar": 6, "bitprophet": 6, "Their": [6, 9, 20], "possibli": [6, 22], "snippet": [6, 16, 20], "except": [6, 7, 9, 11, 12, 16], "pm": 6, "cleanli": [6, 12], "condit": [6, 10, 12, 19, 22], "leav": 6, "fallback": [6, 20], "never": [6, 11, 13, 16], "want": [6, 8, 22], "clean": [6, 11, 13], "requier": 6, "With": [6, 22], "themselv": [6, 19, 20, 22], "entry_point": [6, 19], "dictionari": [6, 21], "our": [6, 19, 22], "interest": [6, 8, 22], "gui_script": 6, "meaning": 6, "importlib": [6, 11, 22], "fall": [6, 16, 22], "remind": 6, "distutils_strict_entry_point": 6, "trigger": [6, 12, 19, 20, 22], "wrong": [6, 13, 15], "leftov": 6, "resourc": [6, 11, 12, 20], "submit": [6, 20], "suppli": 6, "heavi": 6, "thin": [6, 22], "speak": [6, 11], "known": [6, 16, 22], "limit": [6, 12, 15, 17], "address": [6, 11, 16], "definit": 6, "subdirectori": [6, 9], "interspers": [6, 20], "closest": 6, "equival": [6, 8, 9, 13, 18], "inplac": 6, "shift": [6, 11], "littl": [6, 19, 22], "throughout": 6, "2to3": 6, "distutils_in_source_build": 6, "collect": [6, 19, 22], "pypa": 6, "riscv": [6, 8, 21], "cygwin": [6, 22], "pythonpath": [6, 22], "properli": [6, 13], "distutils_install_for_test": [6, 13, 19, 22], "alik": [6, 7, 11, 13], "preserv": [6, 11, 15, 16], "home": [6, 12, 13], "went": 6, "awai": [6, 7, 18], "network": [6, 19, 22], "total": 7, "rare": [7, 9, 19, 22], "simpler": 7, "primarili": [7, 11], "involv": [7, 8, 13], "graph": [7, 11, 12], "meet": 7, "potenti": [7, 11, 15, 16, 19], "basi": 7, "occur": [7, 11, 19], "libpython": [7, 11, 16], "aforement": [7, 13, 16, 18], "foo": [7, 16], "wise": 7, "abstract": [7, 14, 18], "scon": [7, 8, 10, 20], "second": [7, 13, 20], "easier": [7, 18, 20, 22], "earli": [7, 8, 12, 19, 22], "select": [7, 8, 19, 21], "allow": [7, 22], "repeat": [7, 14, 15, 20], "model": 7, "libboost_python": 7, "python_single_target": [7, 11, 12], "Its": [7, 12, 18], "legaci": [7, 10, 13, 16, 20, 22], "power": 8, "harder": [8, 15], "ninja": [8, 15], "train": 8, "opposit": [8, 11, 13], "investig": 8, "paramet": [8, 16, 20, 22], "human": 8, "beings": 8, "socks5": 8, "ssl": 8, "certifi": [8, 15], "2017": 8, "17": 8, "chardet": [8, 22], "idna": 8, "urllib3": [8, 12], "26": 8, "pysock": 8, "cryptographi": [8, 15], "pyopenssl": 8, "14": [8, 22], "httpbin": [8, 19], "hang": 8, "continu": [8, 12, 22], "python_gen_useflag": 8, "out": [8, 9, 10, 11, 12, 13, 14, 15, 16], "toolkit": 8, "translat": [8, 18], "format": [8, 12, 15, 16, 18, 20], "subtitl": 8, "pydiff": 8, "iso": 8, "lxml": 8, "pycountri": 8, "18": 8, "levenshtein": 8, "devel": 8, "gettext": 8, "video": 8, "gaupol": 8, "riverbankcomput": 8, "intro": 8, "sip_api_major_nr": 8, "siplib": 8, "h": [8, 9, 21], "bison": 8, "flex": 8, "prepar": [8, 9, 20, 21], "bindir": 8, "incdir": 8, "python_get_includedir": [8, 9, 13], "echo": [8, 20], "distutils_all_subphase_impl": 8, "python3_5": 8, "bzip2": 8, "epydoc": 8, "eselect": 8, "elibc_glibc": 8, "sandbox": [8, 20, 22], "kernel_linux": 8, "pax": 8, "rsync": 8, "userland_gnu": 8, "coreutil": 8, "sphinx_rtd_them": 8, "practic": [8, 11, 12], "big": 8, "imagin": 8, "anymor": [8, 11], "downgrad": 8, "though": [8, 11], "resembl": [8, 19], "activ": [8, 17], "behavior": [8, 11, 16, 18], "goal": [8, 12, 22], "side": [8, 11], "someth": [8, 9, 22], "accord": [8, 18], "integr": [8, 9, 10, 11], "won": 8, "precis": [8, 9, 22], "reject": [8, 15, 16], "unsupport": [8, 11], "python_is_python3": [8, 13], "basic": [9, 10], "reus": [9, 15], "four": [9, 13, 21], "python_doex": 9, "python_newex": 9, "python_doscript": [9, 14, 21], "recurs": [9, 15, 19], "python_dohead": 9, "python_scriptinto": 9, "affect": [9, 11, 14, 18], "symlink": 9, "onto": 9, "improv": [9, 10, 11, 17], "cropgtk": 9, "sbin": 9, "pynslcd": 9, "anyth": 9, "land": 9, "my_pn": 9, "doin": 9, "libimag": 9, "env": [9, 12], "python_fix_shebang": 9, "sphinxtrain": 9, "openvpn": 9, "vulnkei": 9, "insinto": 9, "kitti": 9, "speed": 9, "nowadai": [9, 12, 13], "pypy2": [9, 11], "_feedparser_sgmllib": 9, "lib64": 9, "byte_compil": 9, "cmake_src_instal": 9, "entropi": 9, "ocassion": 9, "bad": [9, 16], "seri": 9, "getter": [9, 13, 16], "python_get_scriptdir": 9, "python_get_library_path": [9, 13], "python_get_cflag": 9, "preprocessor": 9, "pkg": 9, "python_get_lib": 9, "python_get_python_config": 9, "offset": 9, "alreadi": [9, 12, 14, 15, 16, 20, 22], "mycmakearg": [9, 13, 21], "dpython_dest": 9, "dpython_execut": 9, "dpython_include_dir": 9, "dpython_librari": 9, "cmake_src_configur": [9, 21], "pyinc": 9, "pylib": 9, "micha\u0142": 10, "g\u00f3rny": 10, "creativ": 10, "intern": 10, "prefac": 10, "life": 10, "cycl": [10, 12], "stabil": 10, "choos": [10, 11, 14], "overview": 10, "variant": [10, 11, 16, 19, 22], "flit_scm": 10, "hatch": 10, "vc": [10, 22], "pdm": [10, 13], "snapshot": [10, 22], "rust": 10, "parallel": 10, "race": 10, "command": [10, 14, 15, 19, 20, 22], "usag": [10, 18], "cargo": 10, "checklist": 10, "abort": 10, "due": [10, 12, 14, 18, 19, 20], "variat": 10, "byte": [10, 16], "queri": [10, 16], "advanc": 10, "cffi": 10, "greenlet": [10, 19], "recip": 10, "marker": [10, 22], "xdist": [10, 12, 22], "autoload": 10, "typeerror": 10, "_make_test_flaki": 10, "got": [10, 13], "unexpect": [10, 20], "rerun": 10, "importpathmismatcherror": 10, "fixtur": [10, 12], "namespac": [10, 19], "disjoint": 10, "waf": [10, 21], "tip": [10, 22], "retroact": 10, "migrat": [10, 18], "bytecod": 10, "strai": 10, "mainten": 10, "polici": 10, "co": [10, 22], "monitor": [10, 20], "routin": [10, 14], "page": [10, 16, 17], "increment": 11, "minor": [11, 22], "plan": 11, "On": 11, "hand": [11, 13], "platform": [11, 16, 18, 22], "linux_distribut": 11, "window": 11, "understood": 11, "initi": [11, 22], "enter": 11, "stabl": [11, 12, 15], "prematur": [11, 15], "beta": [11, 12], "made": [11, 13, 14, 16, 21], "regress": 11, "readi": [11, 12, 15], "dai": 11, "inconsist": [11, 15, 22], "mark": [11, 15, 19, 22], "clear": [11, 15], "depenend": 11, "repeatedli": 11, "ask": [11, 15], "push": [11, 12, 15], "forward": 11, "eventu": [11, 12], "becom": [11, 16, 19], "slowli": [11, 15], "discontinu": 11, "next": [11, 12, 15, 19], "june": 11, "juli": 11, "year": 11, "predict": [11, 21], "nears": 11, "great": 11, "obsolet": [11, 13], "vulner": 11, "break": [11, 15, 16], "revert": 11, "enum": 11, "urlsplit": 11, "sanit": [11, 16, 22], "secur": [11, 12], "abi": [11, 18], "bugfix": 11, "occasion": 11, "contrari": [11, 16], "hold": [11, 16], "subslot": 11, "fortun": 11, "late": 11, "hous": 11, "rpython": 11, "lot": [11, 15], "gc": 11, "jython": 11, "java": 11, "stand": 11, "alon": 11, "bidirect": 11, "interact": 11, "slow": [11, 19], "pace": 11, "ironpython": 11, "brython": 11, "web": 11, "javascript": 11, "dom": 11, "micropython": 11, "microcontrol": 11, "down": 11, "hardwar": 11, "tauthon": 11, "accompani": 11, "nor": [11, 17, 20], "ideal": [11, 15, 22], "minim": [11, 15, 16, 22], "funcsig": 11, "signatur": [11, 16], "afterward": [11, 14, 15, 22], "later": 11, "lzma": 11, "compet": 11, "amount": [11, 12, 22], "ipaddress": 11, "drop": [11, 16], "box": [11, 13], "hexvers": [11, 22], "0x03030000": 11, "trolliu": 11, "asyncio": [11, 19, 22], "nativ": 11, "workflow": 12, "clone": 12, "remot": [12, 15, 22], "rebas": 12, "v3": 12, "cherri": 12, "upload": 12, "mkdir": 12, "scp": 12, "precompil": [12, 20], "unusu": 12, "structur": [12, 22], "ex": 12, "Then": 12, "technic": [12, 18], "docker": 12, "binpkg": 12, "produc": [12, 15, 20], "diff": 12, "mgorni": 12, "depgraph": 12, "desc": 12, "_python_all_impl": 12, "_python_verify_pattern": 12, "_python_set_impl": 12, "_python_impl_match": 12, "python_pkg_dep": 12, "gpyutil": [12, 15], "circular": 12, "eas": [12, 15], "temporarili": [12, 13], "20": [12, 18], "pwd": 12, "round": 12, "remaind": 12, "pydant": 12, "test_comparison": 12, "test_close_to_now_": 12, "lenient": 12, "unblock": 12, "100": 12, "40": [12, 20], "emerg": [12, 20], "previous": 12, "reinstal": 12, "batch": [12, 20], "focus": 12, "reenabl": [12, 19], "obsolesc": 12, "announc": 12, "mail": [12, 15], "proce": 12, "track": [12, 15], "progress": 12, "show": 12, "sign": [12, 15], "effort": 12, "revis": [12, 15], "hint": [12, 22], "_python_historical_impl": 12, "statu": 12, "dead": 12, "face": [12, 22], "goe": [12, 22], "unbundl": 12, "obligatori": [12, 15], "baselin": 12, "ones": 12, "chosen": 12, "fewest": 12, "vendor": [12, 13], "februari": 13, "gross": 13, "serv": 13, "placehold": 13, "transit": [13, 15], "period": [13, 15], "ban": 13, "python_multi_usedep": 13, "instanc": [13, 16, 18], "know": [13, 16, 22], "given": 13, "repoman": 13, "pkgcheck": [13, 15], "tell": 13, "chose": 13, "reorder": 13, "desir": [13, 16, 20, 22], "scan": [13, 15], "unmatch": 13, "trial": 13, "stuff": 13, "thing": [13, 17, 19], "privat": 13, "python_export": 13, "python_wrapper_setup": 13, "python_gen_usedep": 13, "mydistutilsarg": 13, "renam": [13, 15, 16, 18, 20], "cleanup": 13, "python_gen": 13, "march": 13, "grab": [13, 20], "python_get": 13, "python_includedir": 13, "python_libpath": 13, "dpython3_include_dir": 13, "dpython3_librari": 13, "sundri": 13, "stop": [13, 16, 18], "realli": [13, 15, 19, 22], "ugli": 13, "sole": 13, "uppercas": [13, 15, 16, 18], "fourth": 13, "cruft": 13, "short": [13, 19], "evalu": 13, "januari": 13, "safe": 13, "streamlin": 13, "unfortun": [13, 15, 16, 19, 20, 22], "inde": 13, "foundat": 14, "fionet": 14, "psql": 14, "cach": 14, "sourceforg": [14, 21], "replic": 14, "tgz": 14, "libcangji": 14, "cangjian": 14, "i18n": 14, "eautoreconf": [14, 16], "econf_sourc": 14, "la": 14, "multibuild": 14, "unnecessari": [14, 15, 21, 22], "implicit": [14, 20, 22], "libtool": 14, "buggi": 14, "canva": 14, "widget": 14, "gtk": 14, "cairo": 14, "2d": 14, "draw": 14, "goocanva": 14, "subdir": 14, "am": 14, "gnome2_src_prepar": 14, "gnome2_src_configur": 14, "gnome2_src_instal": 14, "sub_instal": 14, "gi": 14, "_overridesdir": 14, "outsid": [14, 21], "3_6": [14, 22], "3_7": [14, 22], "qemu": 14, "kernel": 14, "machin": [14, 20], "userland": 14, "kvm": 14, "qemu_python_instal": 14, "vmxcap": 14, "qmp": 14, "ga": 14, "publish": 15, "503": 15, "dot": [15, 18], "hyphen": 15, "charact": [15, 18], "insensit": 15, "letter": [15, 18], "turn": [15, 22], "lowercas": [15, 18], "crucial": 15, "conform": [15, 18], "conflict": 15, "bugzilla": 15, "illustr": 15, "flask": [15, 18], "babel": 15, "github3": 15, "sphinx_pytest": 15, "tab": [15, 22], "titl": [15, 18], "idea": [15, 22], "423": 15, "redirect": 15, "canon": [15, 18], "id": 15, "bear": 15, "mind": 15, "doubt": 15, "reserv": 15, "reach": 15, "eol": [15, 16], "proactiv": 15, "anticip": 15, "soon": 15, "wide": [15, 22], "newli": 15, "risk": 15, "team": 15, "manpow": 15, "member": 15, "u": 15, "gemato": 15, "carri": 15, "histori": 15, "rss": 15, "comprehens": 15, "opml": 15, "followup": 15, "suscept": 15, "simpli": [15, 16, 17, 22], "confus": [15, 19], "sync": [15, 19], "m": [15, 19, 20, 22], "cx": 15, "freez": 15, "patchelf": 15, "openapi": 15, "spec": [15, 16], "60": 15, "59": 15, "62": 15, "pin": 15, "httpcore": 15, "15": 15, "httpx": 15, "23": [15, 22], "sphobjinv": 15, "28": 15, "date": [15, 17, 20, 22], "pend": 15, "pip3": 15, "dirti": 15, "equal": [15, 22], "filetyp": 15, "mercuri": 15, "node": 15, "semver": 15, "pyqt": 15, "builder": 15, "pyqt5": 15, "pyqtwebengin": 15, "rout": 15, "dev20220522": 15, "selenium": 15, "141": 15, "sphinxcontrib": 15, "websupport": 15, "dev20220515": 15, "uri": 15, "watchfil": 15, "watchgod": 15, "dev0": 15, "tag_build": 15, "compar": [15, 16], "tempest": 15, "oslo": 15, "stestr": 15, "versioningit": 15, "wstool": 15, "mistak": [15, 20], "think": 16, "ve": 16, "hit": 16, "me": 16, "18_p9": 16, "13_p3": 16, "10_p3": 16, "9_p2": 16, "4_p1": 16, "urllib": 16, "pars": 16, "exploit": 16, "verbatim": 16, "attempt": [16, 20, 22], "worm": 16, "danger": 16, "worst": [16, 22], "unpars": 16, "django": [16, 22], "pr": 16, "14349": 16, "impact": [16, 20], "urlpars": 16, "nurl": 16, "parseresult": 16, "scheme": 16, "netloc": 16, "param": [16, 19], "badurl": 16, "what": 16, "attributeerror": 16, "492": 16, "decor": [16, 22], "async": [16, 19], "def": [16, 19, 22], "yield": 16, "await": 16, "sleep": 16, "callabl": 16, "mostli": [16, 17], "getfullargspec": 16, "p1": 16, "p2": 16, "kp3": 16, "kp4": 16, "kp5": 16, "arg": 16, "kwarg": 16, "argspec": 16, "vararg": 16, "fullargspec": 16, "varkw": 16, "kwonlyarg": 16, "kwonlydefault": 16, "annot": 16, "tupl": 16, "int": 16, "str": 16, "float": 16, "k6": 16, "k7": 16, "k8": 16, "One": [16, 22], "prototyp": 16, "bar": 16, "pretti": 16, "stringif": 16, "automak": 16, "16": 16, "wrongli": [16, 20, 22], "exec_prefix": 16, "met": 16, "pkg_config_path": 16, "python_cflag": 16, "python_lib": 16, "man": 16, "autoreconf": 16, "intend": [16, 20, 22], "easi": [16, 20, 22], "get_python_inc": 16, "get_path": 16, "platinclud": 16, "get_python_lib": 16, "purelib": 16, "platlib": 16, "platstdlib": 16, "todai": 16, "encodebyt": 16, "decodebyt": 16, "ought": 16, "unicod": 16, "version_info": 16, "b64_encodebyt": 16, "b64encod": 16, "b64decod": 16, "insert": 16, "newlin": 16, "encod": [16, 22], "length": 16, "until": 16, "emb": 16, "lpython3": 16, "7m": 16, "novemb": 16, "tomlkit": 16, "edit": 16, "wherea": [16, 18], "input": 16, "tomldecodeerror": 16, "d1": 16, "in1": 16, "in2": 16, "d2": 16, "d3": 16, "rb": 16, "python_vers": 16, "insist": 16, "incompatibilit": 16, "consider": 16, "dump": [16, 22], "tomli_w": 16, "wb": 16, "beyond": 17, "reliabl": [17, 22], "deep": 17, "beginn": 17, "peopl": 17, "suboptim": 17, "improp": 17, "fill": 17, "gap": 17, "welcom": 17, "small": 18, "adapt": 18, "frequent": [18, 19, 22], "hash": 18, "2e": 18, "36e46173a288c1c40853ffdb712c67e0e022df0e1ce50b7b1b50066b74d4": 18, "inconveni": 18, "settl": 18, "pytag": 18, "625": 18, "440": 18, "transform": 18, "contigu": 18, "babelex": 18, "flask_babelex": 18, "predat": 18, "minu": 18, "abitag": 18, "platformtag": 18, "cp39": 18, "427": 18, "alphanumer": 18, "w": 18, "left": 18, "_alpha": 18, "_beta": 18, "_p": 18, "pypi_no_norm": 18, "overwritten": 18, "execnet": 18, "c0459b92bc4a42b08281e69b8802d24c5d3415d4": 18, "pypi_pn": 18, "pypi_sdist_url": 18, "markup": 18, "overriden": 18, "prebuilt": 18, "pypi_wheel_url": 18, "aid": 18, "ensurepip": 18, "pypi_wheel_filenam": 18, "synopsi": 18, "parametr": 19, "epytest_ignor": 19, "test_client": 19, "test_gener": 19, "test_filenam": 19, "test_transport": 19, "test_transport_work": 19, "eventlet": 19, "test_contextvar": 19, "test_leak": 19, "might": 19, "intent": 19, "Not": [19, 22], "instabl": 19, "unstabl": 19, "discret": 19, "decid": 19, "justifi": 19, "semi": 19, "random": 19, "multiprocess": 19, "worksteal": 19, "finish": 19, "reschedul": 19, "worker": 19, "fast": 19, "lengthi": 19, "bottleneck": 19, "flake8": [19, 22], "01": 19, "chanc": 19, "experienc": 19, "insuffici": 19, "nest": 19, "envvar": 19, "pytest_disable_plugin_autoload": 19, "pytest_plugin": 19, "comma": 19, "looponfail": 19, "pytest_fork": 19, "flaki": [19, 22], "rerunfailur": 19, "supposedli": 19, "twice": 19, "_pytest": [19, 22], "pathlib": [19, 22], "posixpath": 19, "discoveri": [19, 20, 22], "rel": [19, 20, 22], "signifi": 19, "event_loop": 19, "freezer": 19, "mocker": 19, "captur": [19, 22], "summari": 19, "asgiref": 19, "135": 19, "test_loc": 19, "test_sync": 19, "test_sync_contextvar": 19, "deprecationwarn": 19, "main_event_loop": 19, "get_event_loop": 19, "filterwarn": 19, "fatal": [19, 22], "_____________________": 19, "______________________": 19, "577": 19, "asgitest": 19, "testcas": 19, "583": 19, "test_wrapped_case_is_collect": 19, "interrupt": 19, "world": 19, "catch": [20, 22], "elog": 20, "portage_elog_class": 20, "optim": 20, "size": 20, "oo": 20, "docstr": 20, "store": 20, "disk": [20, 22], "permiss": 20, "uninstal": 20, "violat": 20, "auxiliari": 20, "readabl": [20, 22], "trimesh": 20, "__pycache__": 20, "blender_boolean": 20, "310": 20, "opt": 20, "notic": 20, "blueman": 20, "constant": 20, "deviceclass": 20, "sdp": 20, "tmpl": 20, "pair": 20, "docbook": 20, "35": 20, "36": 20, "changelog": 20, "qawarn": 20, "wait": 20, "find_packag": 20, "exclud": 20, "ident": 20, "artifact": 20, "reduc": 20, "footprint": 20, "isol": 20, "faster": 20, "poetry_cor": 20, "smaller": 20, "prolong": 20, "tend": 20, "plot": 21, "voacap": 21, "propag": 21, "qsl": 21, "hz1jw": 21, "pythonprop": 21, "basemap": 21, "gtk2": 21, "context": [21, 22], "doubl": 21, "energi": 21, "yoda": 21, "hepforg": 21, "use_en": 21, "pyext": 21, "extra_opt": 21, "give": 21, "sound": 21, "signal": [21, 22], "composit": 21, "csound": 21, "fordfrog": 21, "dbuild_python_interfac": 21, "dbuild_python_opcod": 21, "superset": 21, "arab": 21, "arabey": 21, "duali": 21, "pyduali": 21, "dict2db": 21, "trans2arab": 21, "arabic2tran": 21, "whitelist": 22, "mozilla": 22, "bleach": 22, "webencod": 22, "univers": 22, "detector": 22, "hypothesi": 22, "bottom": 22, "pre": 22, "cmd": 22, "cmd2": 22, "colorama": 22, "pyperclip": 22, "wcwidth": 22, "column": 22, "80": 22, "fact": 22, "3_8": 22, "argpars": 22, "argcomplet": 22, "fish": 22, "tcsh": 22, "displai": 22, "appeas": 22, "usng": 22, "xvfb": 22, "server": 22, "virtx": 22, "nonfat": 22, "termin": 22, "domain": 22, "firstli": 22, "nosetest": 22, "secondli": 22, "strict": 22, "thirdli": 22, "wholli": 22, "spew": 22, "irrelev": 22, "seem": 22, "ceas": 22, "downstream": 22, "how": 22, "statist": 22, "pep8": 22, "pycodestyl": 22, "close": 22, "preced": 22, "area": 22, "____________________": 22, "systemd": 22, "test_login": 22, "234": 22, "578": 22, "_importtestmodul": 22, "mod": 22, "import_path": 22, "fspath": 22, "importmod": 22, "524": 22, "import_modul": 22, "module_nam": 22, "127": 22, "_bootstrap": 22, "_gcd_import": 22, "frozen": 22, "1014": 22, "991": 22, "_find_and_load": 22, "975": 22, "_find_and_load_unlock": 22, "671": 22, "_load_unlock": 22, "rewrit": 22, "170": 22, "exec_modul": 22, "__dict__": 22, "login": 22, "r2": 22, "discov": [], "pyarg": 22, "guess": 22, "quick": 22, "mayb": 22, "eunittest": 22, "aris": 22, "confirm": 22, "whom": 22, "myself": 22, "subtl": 22, "lead": 22, "But": 22, "bewar": 22, "unexpectedli": 22, "test_start_params_bug": 22, "xfail": 22, "statsmodel": 22, "tsa": 22, "test_arima": 22, "horrend": 22, "space": 22, "mayhem": 22, "5a": 22, "test_null_byt": 22, "skipif": 22, "0x03000000": 22, "unconditioanlli": 22, "test_babel_with_language_": 22, "test_build_latex": 22, "test_polyglossia_with_language_": 22, "altogeth": 22, "replai": 22, "devmanu": 22, "explan": 22, "connect": 22, "pygit2": 22, "no_network": 22, "properti": 22, "test_network": 22, "allow_test": 22, "unclear": 22, "backtrac": 22, "pluggi": 22, "cachedir": 22, "pytest_cach": 22, "rootdir": 22, "var": 22, "sabyenc": 22, "configfil": 22, "item": 22, "test_decod": 22, "test_crc_pickl": 22, "54": 22, "test_empty_size_pickl": 22, "0x00007f748bc47740": 22, "testsupport": 22, "74": 22, "sabyenc3_wrapp": 22, "119": 22, "180": 22, "pytest_pyfunc_cal": 22, "caller": 22, "187": 22, "_multical": 22, "temp": 22, "2934": 22, "66": 22, "vv": 22, "34": 22, "timeout": 22, "25": 22, "sabyenc3": 22, "596": 22, "decode_usenet_chunk": 22, "pybytearray_check": 22, "pylist_getitem": 22, "py_input_list": 22, "lp": 22, "0x00007fb5db746740": 22, "73": 22, "117": 22, "87": 22, "lambda": 22, "runpi": 22, "85": 22, "_run_cod": 22, "193": 22, "_run_module_as_main": 22, "reproduc": 22, "ubuntu": 22, "dndebug": 22, "leak": 22, "o0": 22, "isort": 22, "distutils_pep517_instal": 22, "destin": 22, "cp": 22, "pushd": 22, "null": 22, "popd": 22, "caution": 22, "advis": 22, "frozendict": 22, "lookup": 22, "ppp": [], "mislead": 22}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"python": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22], "ani": [0, 8], "r1": [0, 2, 5, 6, 7, 8, 13, 14, 21], "build": [0, 1, 2, 5, 6, 7, 8, 12, 13, 14, 21], "time": [0, 2, 7, 8, 14, 21], "depend": [0, 1, 2, 4, 5, 8, 14, 19, 21, 22], "basic": [0, 1, 5, 21, 22], "us": [0, 2, 3, 4, 5, 6, 7, 8, 14, 19, 21, 22], "uncondit": [0, 21], "condit": [0, 2, 4, 5, 14, 21], "addit": [0, 5, 14], "multipl": [0, 11, 21], "set": [0, 8], "common": [1, 9], "python_compat": 1, "python_dep": 1, "python_required_us": 1, "environ": [1, 22], "packag": [1, 2, 3, 4, 5, 6, 7, 12, 14, 15, 16, 18, 20, 21, 22], "The": [1, 5], "most": 1, "type": 1, "find": 1, "list": [1, 15, 16], "from": [1, 13], "system": [1, 2, 5, 6, 12], "integr": [2, 5], "written": 2, "meson": 2, "scon": 2, "extra": [2, 22], "singl": [2, 5, 7, 13, 21], "impl": [2, 7, 14, 21], "instal": [2, 5, 6, 9, 14, 15, 20, 21, 22], "pure": [2, 14], "multi": [2, 7, 14], "hybrid": [2, 21], "waf": 2, "advanc": [3, 4], "concept": [3, 6], "namespac": 3, "hierarch": 3, "structur": 3, "determin": 3, "whether": 3, "ar": [3, 20], "ad": [3, 12, 15, 22], "new": [3, 12, 15], "gentoo": [3, 10], "legaci": [3, 5, 6, 18], "request": 4, "flag": 4, "interpret": [4, 8, 11, 12], "version": [4, 11, 15, 18], "cffi": 4, "greenlet": 4, "option": [4, 5], "test": [4, 5, 6, 15, 19, 20, 22], "suit": 4, "rust": [4, 5], "distutil": [5, 6, 7, 8, 16], "standard": 5, "pep": [5, 13, 20, 22], "517": [5, 13, 20, 22], "mode": [5, 22], "sourc": [5, 6, 18], "archiv": [5, 18], "variant": 5, "setuptools_scm": 5, "flit_scm": 5, "hatch": 5, "vc": 5, "pdm": 5, "backend": [5, 20], "snapshot": 5, "extens": [5, 22], "c": [5, 22], "cython": 5, "parallel": [5, 19], "race": 5, "sub": 5, "phase": [5, 22], "function": [5, 9], "python_prepar": 5, "python_configur": 5, "python_compil": 5, "python_test": 5, "python_instal": 5, "pass": 5, "argument": [5, 19], "setup": 5, "py": 5, "call": 5, "custom": [5, 18, 22], "command": 5, "enabl": 5, "document": [5, 20], "via": [5, 15], "sphinx": 5, "autodoc": 5, "without": [5, 16], "usag": [5, 8], "cargo": 5, "manual": [5, 14, 21], "build_dir": 5, "d": 5, "non": 5, "differ": [6, 8, 18], "variat": 6, "distutils_use_setuptool": 6, "setuptool": [6, 20], "entri": 6, "point": 6, "other": [6, 19], "runtim": [6, 7, 21], "pyproject": 6, "toml": [6, 16], "base": [6, 16, 19], "project": [6, 15], "In": 6, "v": [6, 7], "out": 6, "befor": [6, 22], "choos": [7, 22], "between": 7, "eclass": [7, 12, 18], "overview": 7, "first": 7, "expert": [8, 19], "partial": 8, "restrict": 8, "implement": [8, 9, 11, 12, 15], "python_setup": 8, "disjoint": 8, "api": [8, 20], "regular": 8, "combin": 8, "helper": [9, 18], "fix": 9, "shebang": 9, "script": 9, "byte": [9, 20], "compil": [9, 20], "modul": [9, 20], "queri": 9, "inform": 9, "guid": [10, 13], "content": 10, "indic": 10, "tabl": 10, "life": 11, "cycl": 11, "stabil": 11, "guarante": 11, "altern": 11, "support": [11, 15], "backport": 11, "mainten": [12, 15], "note": 12, "specif": 12, "cpython": 12, "patchset": 12, "pypi": [12, 15, 18, 22], "profil": 12, "chang": [12, 16], "port": [12, 15, 16], "initi": 12, "remov": [12, 16], "prepar": 12, "bootstrap": 12, "migrat": 13, "old": 13, "python_usedep": 13, "syntax": 13, "eapi": [13, 15], "7": 13, "8": [13, 16], "autotool": 14, "name": [15, 18, 19], "polici": 15, "2": 15, "which": 15, "exist": 15, "can": 15, "co": 15, "maintain": 15, "monitor": 15, "releas": 15, "feed": 15, "check": [15, 20], "pip": 15, "repologi": 15, "routin": 15, "outdat": 15, "gpy": 15, "verifi": 15, "dep": 15, "tip": 16, "retroact": 16, "bpo43882": 16, "urlsplit": 16, "now": 16, "strip": 16, "lf": 16, "cr": 16, "ht": 16, "charact": 16, "3": 16, "11": 16, "gener": [16, 18], "coroutin": 16, "asyncio": 16, "inspect": 16, "getargspec": 16, "formatargspec": 16, "10": 16, "configur": 16, "No": 16, "1": 16, "found": [16, 19], "sysconfig": 16, "deprec": [16, 20], "9": 16, "base64": 16, "encodestr": 16, "decodestr": 16, "config": 16, "pkg": 16, "longer": 16, "librari": 16, "default": 16, "replac": 16, "tomllib": 16, "tomli": 16, "fallback": 16, "w": 16, "prefac": 17, "url": 18, "modern": 18, "distribut": 18, "filenam": 18, "binari": 18, "match": 18, "fetch": 18, "wheel": 18, "pytest": [19, 22], "recip": 19, "skip": [19, 22], "marker": 19, "path": 19, "avoid": 19, "runner": [19, 22], "xdist": 19, "run": [19, 22], "plugin": 19, "explicitli": 19, "disabl": 19, "automat": 19, "autoload": 19, "entir": 19, "typeerror": 19, "_make_test_flaki": 19, "got": 19, "an": 19, "unexpect": 19, "keyword": 19, "rerun": 19, "importpathmismatcherror": 19, "fixtur": 19, "warn": [19, 20], "qa": 20, "improv": 20, "report": 20, "portag": 20, "bytecod": 20, "relat": 20, "strai": 20, "top": 20, "level": 20, "file": [20, 22], "site": 20, "exampl": 20, "poetri": 20, "flit": 20, "buildapi": 20, "masonri": 20, "build_meta": 20, "__legacy__": 20, "A": 21, "why": 22, "i": 22, "import": 22, "distutils_enable_test": 22, "case": 22, "more": 22, "virtualx": 22, "correct": 22, "undesir": 22, "miss": 22, "importerror": 22, "checklist": 22, "deal": 22, "failur": 22, "problemat": 22, "requir": 22, "internet": 22, "access": 22, "abort": 22, "due": 22, "assert": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"python-any-r1 \u2014 build-time dependency": [[0, "python-any-r1-build-time-dependency"]], "Basic use for unconditional Python": [[0, "basic-use-for-unconditional-python"], [21, "basic-use-for-unconditional-python"]], "Dependencies": [[0, "dependencies"], [5, "dependencies"], [14, "dependencies"], [21, "dependencies"]], "Conditional Python use": [[0, "conditional-python-use"], [14, "conditional-python-use"], [21, "conditional-python-use"]], "Additional conditional dependencies": [[0, "additional-conditional-dependencies"]], "Multiple sets of conditional dependencies": [[0, "multiple-sets-of-conditional-dependencies"]], "Common basics": [[1, "common-basics"]], "PYTHON_COMPAT": [[1, "python-compat"]], "PYTHON_DEPS and PYTHON_REQUIRED_USE": [[1, "python-deps-and-python-required-use"]], "Python environment": [[1, "python-environment"]], "Dependencies in Python packages": [[1, "dependencies-in-python-packages"]], "The most common dependency types": [[1, "the-most-common-dependency-types"]], "Finding dependency lists from build systems": [[1, "finding-dependency-lists-from-build-systems"]], "Integration with build systems written in Python": [[2, "integration-with-build-systems-written-in-python"]], "Meson": [[2, "meson"]], "SCons": [[2, "scons"]], "Build-time use with no extra dependencies": [[2, "build-time-use-with-no-extra-dependencies"]], "Build-time use with extra dependencies": [[2, "build-time-use-with-extra-dependencies"]], "Single-impl package": [[2, "single-impl-package"], [2, "id1"]], "Single-impl package with conditional Python install": [[2, "single-impl-package-with-conditional-python-install"]], "Pure Python multi-impl package": [[2, "pure-python-multi-impl-package"]], "Hybrid python-r1 + SCons package": [[2, "hybrid-python-r1-scons-package"]], "waf": [[2, "waf"]], "Build-time use": [[2, "build-time-use"]], "Advanced concepts": [[3, "advanced-concepts"]], "Namespace packages": [[3, "namespace-packages"]], "Hierarchical package structure": [[3, "hierarchical-package-structure"]], "Namespace package structure": [[3, "namespace-package-structure"]], "Determining whether namespaces are used": [[3, "determining-whether-namespaces-are-used"]], "Adding new namespace packages to Gentoo": [[3, "adding-new-namespace-packages-to-gentoo"]], "Legacy namespace packages in Gentoo": [[3, "legacy-namespace-packages-in-gentoo"]], "Advanced dependencies": [[4, "advanced-dependencies"]], "Requesting USE flags on the Python interpreter": [[4, "requesting-use-flags-on-the-python-interpreter"]], "Dependencies conditional to Python version": [[4, "dependencies-conditional-to-python-version"]], "Dependencies on CFFI and greenlet": [[4, "dependencies-on-cffi-and-greenlet"]], "Optional test suite dependencies on Rust packages": [[4, "optional-test-suite-dependencies-on-rust-packages"]], "distutils-r1 \u2014 standard Python build systems": [[5, "distutils-r1-standard-python-build-systems"]], "The PEP 517 and legacy modes": [[5, "the-pep-517-and-legacy-modes"]], "Basic use (PEP 517 mode)": [[5, "basic-use-pep-517-mode"]], "Source archives": [[5, "source-archives"]], "python-single-r1 variant": [[5, "python-single-r1-variant"]], "PEP 517 build systems": [[5, "pep-517-build-systems"]], "setuptools_scm (flit_scm, hatch-vcs, pdm-backend) and snapshots": [[5, "setuptools-scm-flit-scm-hatch-vcs-pdm-backend-and-snapshots"]], "Packages installing extensions (C, Rust\u2026)": [[5, "packages-installing-extensions-c-rust"]], "Packages using Cython": [[5, "packages-using-cython"]], "Parallel build race conditions": [[5, "parallel-build-race-conditions"]], "Sub-phase functions": [[5, "sub-phase-functions"]], "python_prepare": [[5, "python-prepare"]], "python_configure": [[5, "python-configure"]], "python_compile": [[5, "python-compile"]], "python_test": [[5, "python-test"]], "python_install": [[5, "python-install"]], "Passing arguments to setup.py": [[5, "passing-arguments-to-setup-py"]], "Calling custom setup.py commands": [[5, "calling-custom-setup-py-commands"]], "Enabling tests": [[5, "enabling-tests"]], "Building documentation via Sphinx": [[5, "building-documentation-via-sphinx"]], "Basic documentation with autodoc": [[5, "basic-documentation-with-autodoc"]], "Additional Sphinx extensions": [[5, "additional-sphinx-extensions"]], "Sphinx without autodoc or extensions": [[5, "sphinx-without-autodoc-or-extensions"]], "Packages with optional Python build system usage": [[5, "packages-with-optional-python-build-system-usage"]], "Packages with Rust extensions (using Cargo)": [[5, "packages-with-rust-extensions-using-cargo"]], "Installing packages without a PEP 517 build backend": [[5, "installing-packages-without-a-pep-517-build-backend"]], "Installing packages manually into BUILD_DIR": [[5, "installing-packages-manually-into-build-dir"]], "Installing packages manually into D": [[5, "installing-packages-manually-into-d"]], "Integrating with a non-PEP 517 build system": [[5, "integrating-with-a-non-pep-517-build-system"]], "distutils-r1 legacy concepts": [[6, "distutils-r1-legacy-concepts"]], "Different build system variations": [[6, "different-build-system-variations"]], "DISTUTILS_USE_SETUPTOOLS": [[6, "distutils-use-setuptools"]], "distutils and setuptools build systems": [[6, "distutils-and-setuptools-build-systems"]], "Setuptools\u2019 entry points": [[6, "setuptools-entry-points"]], "Other runtime uses of setuptools": [[6, "other-runtime-uses-of-setuptools"]], "pyproject.toml-based projects": [[6, "pyproject-toml-based-projects"]], "In-source vs out-of-source builds": [[6, "in-source-vs-out-of-source-builds"]], "Installing the package before testing": [[6, "installing-the-package-before-testing"]], "Choosing between Python eclasses": [[7, "choosing-between-python-eclasses"]], "Overview": [[7, "overview"]], "Build time vs runtime use": [[7, "build-time-vs-runtime-use"]], "Single-impl vs multi-impl": [[7, "single-impl-vs-multi-impl"]], "Python-first packages (distutils-r1 eclass)": [[7, "python-first-packages-distutils-r1-eclass"]], "Expert python-r1 usage": [[8, "expert-python-r1-usage"]], "Partially restricting Python implementation": [[8, "partially-restricting-python-implementation"]], "Restricting interpreters for python_setup": [[8, "restricting-interpreters-for-python-setup"]], "Disjoint build dependencies (any-r1 API)": [[8, "disjoint-build-dependencies-any-r1-api"]], "Using regular python-r1 API": [[8, "using-regular-python-r1-api"]], "Using any-r1 API with python-r1": [[8, "using-any-r1-api-with-python-r1"]], "Different sets of build-time dependencies": [[8, "different-sets-of-build-time-dependencies"]], "Using any-r1 API with distutils-r1": [[8, "using-any-r1-api-with-distutils-r1"]], "Combining any-r1 API with implementation restrictions": [[8, "combining-any-r1-api-with-implementation-restrictions"]], "Common helper functions": [[9, "common-helper-functions"]], "Install helpers": [[9, "install-helpers"]], "Fixing shebangs on installed scripts": [[9, "fixing-shebangs-on-installed-scripts"]], "Byte-compiling Python modules": [[9, "byte-compiling-python-modules"]], "Querying the implementation information": [[9, "querying-the-implementation-information"]], "Gentoo Python Guide": [[10, "gentoo-python-guide"]], "Contents:": [[10, null]], "Indices and tables": [[10, "indices-and-tables"]], "Python interpreters": [[11, "python-interpreters"]], "Versions of Python": [[11, "versions-of-python"]], "Life cycle of a Python implementation": [[11, "life-cycle-of-a-python-implementation"]], "Stability guarantees of Python implementations": [[11, "stability-guarantees-of-python-implementations"]], "Alternative Python implementations": [[11, "alternative-python-implementations"]], "Support for multiple implementations": [[11, "support-for-multiple-implementations"]], "Backports": [[11, "backports"]], "Maintenance of Python implementations": [[12, "maintenance-of-python-implementations"]], "Notes specific to Python interpreters": [[12, "notes-specific-to-python-interpreters"]], "CPython patchsets": [[12, "cpython-patchsets"]], "PyPy": [[12, "pypy"]], "Adding a new Python implementation": [[12, "adding-a-new-python-implementation"]], "Eclass and profile changes": [[12, "eclass-and-profile-changes"], [12, "id1"]], "Porting initial packages": [[12, "porting-initial-packages"]], "Removing a Python implementation": [[12, "removing-a-python-implementation"]], "Preparation": [[12, "preparation"]], "Python build system bootstrap": [[12, "python-build-system-bootstrap"]], "Migration guides": [[13, "migration-guides"]], "Migrating from old PYTHON_USEDEP syntax in python-single-r1": [[13, "migrating-from-old-python-usedep-syntax-in-python-single-r1"]], "Migrating from EAPI 7 to EAPI 8": [[13, "migrating-from-eapi-7-to-eapi-8"]], "Migrating to PEP 517 builds": [[13, "migrating-to-pep-517-builds"]], "python-r1 \u2014 multi-impl packages": [[14, "python-r1-multi-impl-packages"]], "Manual install": [[14, "manual-install"], [21, "manual-install"]], "Pure Python autotools package": [[14, "pure-python-autotools-package"]], "Additional build-time Python use": [[14, "additional-build-time-python-use"]], "Python package maintenance": [[15, "python-package-maintenance"]], "Package name policy": [[15, "package-name-policy"]], "Support for Python 2": [[15, "support-for-python-2"]], "Which implementations to test new packages for?": [[15, "which-implementations-to-test-new-packages-for"]], "Adding new Python implementations to existing packages": [[15, "adding-new-python-implementations-to-existing-packages"]], "Which packages can be (co-)maintained by the Python project?": [[15, "which-packages-can-be-co-maintained-by-the-python-project"]], "Porting packages to a new EAPI": [[15, "porting-packages-to-a-new-eapi"]], "Monitoring new package versions": [[15, "monitoring-new-package-versions"]], "PyPI release feeds": [[15, "pypi-release-feeds"]], "Checking via pip": [[15, "checking-via-pip"]], "Repology": [[15, "repology"]], "Routine checks on installed Python packages": [[15, "routine-checks-on-installed-python-packages"]], "pip check": [[15, "pip-check"]], "pip list --outdated": [[15, "pip-list-outdated"]], "gpy-verify-deps": [[15, "gpy-verify-deps"]], "Porting tips": [[16, "porting-tips"]], "Retroactive changes": [[16, "retroactive-changes"]], "bpo43882: urlsplit now strips LF, CR and HT characters": [[16, "bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters"]], "Python 3.11": [[16, "python-3-11"]], "Generator-based coroutine removal (asyncio.coroutine)": [[16, "generator-based-coroutine-removal-asyncio-coroutine"]], "inspect.getargspec() and inspect.formatargspec() removal": [[16, "inspect-getargspec-and-inspect-formatargspec-removal"]], "Python 3.10": [[16, "python-3-10"]], "configure: No package \u2018python-3.1\u2019 found": [[16, "configure-no-package-python-3-1-found"]], "distutils.sysconfig deprecation": [[16, "distutils-sysconfig-deprecation"]], "Python 3.9": [[16, "python-3-9"]], "base64.encodestring / base64.decodestring removal": [[16, "base64-encodestring-base64-decodestring-removal"]], "Python 3.8": [[16, "python-3-8"]], "python-config and pkg-config no longer list Python library by default": [[16, "python-config-and-pkg-config-no-longer-list-python-library-by-default"]], "Replacing the toml package": [[16, "replacing-the-toml-package"]], "Porting to tomllib/tomli without toml fallback": [[16, "porting-to-tomllib-tomli-without-toml-fallback"]], "Porting to tomllib/tomli with toml fallback": [[16, "porting-to-tomllib-tomli-with-toml-fallback"]], "Porting to tomli-w": [[16, "porting-to-tomli-w"]], "Preface": [[17, "preface"]], "pypi \u2014 helper eclass for PyPI archives": [[18, "pypi-helper-eclass-for-pypi-archives"]], "PyPI URLs": [[18, "pypi-urls"]], "Modern and legacy URLs": [[18, "modern-and-legacy-urls"]], "Source distribution filenames": [[18, "source-distribution-filenames"]], "Binary distribution filenames": [[18, "binary-distribution-filenames"]], "Packages with matching name and version": [[18, "packages-with-matching-name-and-version"]], "Package with a different name": [[18, "package-with-a-different-name"]], "Customizing the generated URL": [[18, "customizing-the-generated-url"]], "Fetching wheels": [[18, "fetching-wheels"]], "QA checks and warnings": [[20, "qa-checks-and-warnings"]], "Improved QA warning reporting in Portage": [[20, "improved-qa-warning-reporting-in-portage"]], "Compiled bytecode-related warnings": [[20, "compiled-bytecode-related-warnings"]], "Modules are not byte-compiled": [[20, "modules-are-not-byte-compiled"]], "Stray compiled bytecode": [[20, "stray-compiled-bytecode"]], "Stray top-level files in site-packages": [[20, "stray-top-level-files-in-site-packages"]], "Example for test packages installed by setuptools": [[20, "example-for-test-packages-installed-by-setuptools"]], "Documentation files installed by Poetry": [[20, "documentation-files-installed-by-poetry"]], "Deprecated PEP 517 backends": [[20, "deprecated-pep-517-backends"]], "flit.buildapi": [[20, "flit-buildapi"]], "poetry.masonry.api": [[20, "poetry-masonry-api"]], "setuptools.build_meta:__legacy__": [[20, "setuptools-build-meta-legacy"]], "python-single-r1 \u2014 single-impl packages": [[21, "python-single-r1-single-impl-packages"]], "A hybrid: build-time + conditional runtime": [[21, "a-hybrid-build-time-conditional-runtime"]], "Multiple USE conditions": [[21, "multiple-use-conditions"]], "pytest recipes": [[19, "pytest-recipes"]], "Skipping tests based on markers": [[19, "skipping-tests-based-on-markers"]], "Skipping tests based on paths/names": [[19, "skipping-tests-based-on-paths-names"]], "Avoiding the dependency on pytest-runner": [[19, "avoiding-the-dependency-on-pytest-runner"]], "Using pytest-xdist to run tests in parallel": [[19, "using-pytest-xdist-to-run-tests-in-parallel"]], "Avoiding dependencies on other pytest plugins": [[19, "avoiding-dependencies-on-other-pytest-plugins"]], "Explicitly disabling automatic pytest plugins": [[19, "explicitly-disabling-automatic-pytest-plugins"]], "Expert: disabling plugin autoloading entirely": [[19, "expert-disabling-plugin-autoloading-entirely"]], "TypeError: _make_test_flaky() got an unexpected keyword argument \u2018reruns\u2019": [[19, "typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns"]], "ImportPathMismatchError": [[19, "importpathmismatcherror"]], "fixture \u2018\u2026\u2019 not found": [[19, "fixture-not-found"]], "Warnings": [[19, "warnings"]], "Tests in Python packages": [[22, "tests-in-python-packages"]], "Why is running tests important?": [[22, "why-is-running-tests-important"]], "Using distutils_enable_tests": [[22, "using-distutils-enable-tests"]], "Basic use case": [[22, "basic-use-case"]], "Adding more test dependencies": [[22, "adding-more-test-dependencies"]], "Installing the package before running tests": [[22, "installing-the-package-before-running-tests"]], "Customizing the test phase": [[22, "customizing-the-test-phase"]], "Customizing the test phase for pytest": [[22, "customizing-the-test-phase-for-pytest"]], "Running tests with virtualx": [[22, "running-tests-with-virtualx"]], "Choosing the correct test runner": [[22, "choosing-the-correct-test-runner"]], "Undesirable test dependencies": [[22, "undesirable-test-dependencies"]], "Missing test files in PyPI packages": [[22, "missing-test-files-in-pypi-packages"]], "ImportErrors for C extensions": [[22, "importerrors-for-c-extensions"]], "Checklist for dealing with test failures": [[22, "checklist-for-dealing-with-test-failures"]], "Skipping problematic tests": [[22, "skipping-problematic-tests"]], "Tests requiring Internet access": [[22, "tests-requiring-internet-access"]], "Tests aborting (due to assertions)": [[22, "tests-aborting-due-to-assertions"]], "Installing extra dependencies in test environment (PEP 517 mode)": [[22, "installing-extra-dependencies-in-test-environment-pep-517-mode"]]}, "indexentries": {"distutils_enable_tests": [[22, "index-0"]], "epytest": [[22, "index-1"]], "virtx": [[22, "index-2"]]}})
\ No newline at end of file +Search.setIndex({"docnames": ["any", "basic", "buildsys", "concept", "depend", "distutils", "distutils-legacy", "eclass", "expert-multi", "helper", "index", "interpreter", "interpreter-maintenance", "migration", "multi", "package-maintenance", "porting", "preface", "pypi", "pytest", "qawarn", "single", "test"], "filenames": ["any.rst", "basic.rst", "buildsys.rst", "concept.rst", "depend.rst", "distutils.rst", "distutils-legacy.rst", "eclass.rst", "expert-multi.rst", "helper.rst", "index.rst", "interpreter.rst", "interpreter-maintenance.rst", "migration.rst", "multi.rst", "package-maintenance.rst", "porting.rst", "preface.rst", "pypi.rst", "pytest.rst", "qawarn.rst", "single.rst", "test.rst"], "titles": ["python-any-r1 \u2014 build-time dependency", "Common basics", "Integration with build systems written in Python", "Advanced concepts", "Advanced dependencies", "distutils-r1 \u2014 standard Python build systems", "distutils-r1 legacy concepts", "Choosing between Python eclasses", "Expert python-r1 usage", "Common helper functions", "Gentoo Python Guide", "Python interpreters", "Maintenance of Python implementations", "Migration guides", "python-r1 \u2014 multi-impl packages", "Python package maintenance", "Porting tips", "Preface", "pypi \u2014 helper eclass for PyPI archives", "pytest recipes", "QA checks and warnings", "python-single-r1 \u2014 single-impl packages", "Tests in Python packages"], "terms": {"The": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "eclass": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 13, 14, 17, 19, 21, 22], "i": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21], "enabl": [0, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 19, 20, 22], "support": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 13, 14, 16, 17, 18, 19, 20, 21, 22], "packag": [0, 8, 9, 10, 11, 13, 17, 19], "need": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "pure": [0, 5, 6, 7, 8, 10, 11, 15, 18, 22], "refer": [0, 1, 5, 9, 11, 13, 14, 17, 18, 20, 21], "5": [0, 2, 5, 7, 8, 9, 11, 14, 15, 16, 18, 19, 21, 22], "defin": [0, 1, 5, 6, 11, 21, 22], "featur": [0, 4, 5, 6, 7, 8, 11, 12, 13, 20, 21, 22], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "pkg_setup": [0, 1, 2, 8, 21], "phase": [0, 1, 3, 6, 7, 8, 9, 10, 13, 14, 15, 20, 21], "It": [0, 1, 3, 4, 5, 6, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "normal": [0, 3, 5, 8, 9, 14, 15, 16, 18, 20, 21, 22], "call": [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 16, 18, 19, 20, 21, 22], "python_setup": [0, 1, 2, 10, 13, 14, 21], "function": [0, 1, 4, 6, 7, 8, 10, 11, 13, 14, 16, 18, 20, 21, 22], "order": [0, 1, 2, 4, 5, 7, 9, 12, 13, 14, 15, 21, 22], "find": [0, 2, 3, 4, 6, 14, 15, 19, 20, 22], "suitabl": [0, 7, 9, 14, 17, 18], "interpret": [0, 1, 2, 5, 6, 7, 9, 10, 13, 14, 15, 16, 19, 20, 21], "global": [0, 1, 5, 8, 13, 14, 19, 21, 22], "environ": [0, 5, 6, 10, 11, 13, 14, 16, 19, 21], "appropri": [0, 2, 4, 5, 6, 7, 9, 11, 12, 15, 18, 21, 22], "mean": [0, 1, 2, 5, 7, 8, 11, 15, 16, 18, 19, 21, 22], "most": [0, 3, 5, 6, 9, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22], "trivial": [0, 5, 12, 16, 21], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 21, 22], "autotool": [0, 5, 6, 10, 16, 21], "compat": [0, 1, 2, 4, 5, 6, 7, 9, 11, 13, 16, 18, 21], "system": [0, 3, 7, 8, 9, 10, 13, 14, 15, 17, 18, 20, 21, 22], "could": [0, 2, 3, 5, 6, 8, 9, 15, 16, 18, 20, 21, 22], "look": [0, 1, 6, 8, 16, 19, 20, 21, 22], "like": [0, 2, 4, 5, 6, 8, 11, 15, 16, 20, 21, 22], "follow": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22], "copyright": [0, 2, 4, 5, 6, 8, 14, 21, 22], "1999": [0, 2, 4, 5, 6, 8, 14, 21, 22], "2020": [0, 2, 4, 5, 6, 8, 13, 14, 16, 21, 22], "gentoo": [0, 1, 2, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22], "author": [0, 2, 4, 5, 6, 8, 9, 10, 12, 14, 20, 21, 22], "distribut": [0, 2, 4, 5, 6, 8, 14, 15, 16, 17, 20, 21, 22], "under": [0, 1, 2, 3, 4, 5, 6, 8, 14, 21, 22], "term": [0, 2, 4, 5, 6, 8, 14, 21, 22], "gnu": [0, 2, 4, 5, 6, 8, 14, 21, 22], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 21, 22], "public": [0, 2, 4, 5, 6, 8, 11, 14, 21, 22], "licens": [0, 2, 4, 5, 6, 8, 10, 14, 20, 21, 22], "v2": [0, 2, 4, 5, 6, 8, 14, 21, 22], "eapi": [0, 2, 4, 5, 6, 8, 10, 14, 21, 22], "7": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "python_compat": [0, 2, 4, 5, 6, 8, 10, 11, 12, 14, 15, 21, 22], "python3_": [0, 1, 2, 4, 5, 6, 8, 12, 21, 22], "6": [0, 1, 2, 4, 5, 6, 8, 11, 12, 14, 15, 16, 19, 21, 22], "8": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15, 20, 21, 22], "inherit": [0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 21, 22], "descript": [0, 2, 4, 5, 6, 8, 14, 21, 22], "A": [0, 1, 2, 4, 6, 7, 8, 10, 11, 15, 19, 20], "repositori": [0, 5, 6, 12, 15, 20], "data": [0, 2, 5, 6, 9, 16, 21, 22], "file": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 21], "describ": [0, 5, 6, 8, 9, 15, 18, 20], "media": [0, 2, 8], "player": [0, 4], "capabl": 0, "homepag": [0, 2, 4, 5, 6, 8, 14, 15, 21, 22], "http": [0, 2, 4, 5, 6, 8, 9, 12, 14, 16, 18, 20, 21, 22], "cgit": 0, "freedesktop": 0, "org": [0, 2, 4, 5, 6, 8, 9, 12, 14, 18, 20, 21, 22], "info": [0, 5, 6, 19], "src_uri": [0, 2, 4, 5, 6, 8, 14, 15, 18, 21, 22], "www": [0, 2, 8, 14, 21], "softwar": [0, 1, 4, 8, 14, 15, 16, 22], "pn": [0, 2, 4, 5, 6, 8, 9, 14, 18, 21, 22], "p": [0, 2, 4, 5, 6, 8, 14, 18, 19, 21, 22], "tar": [0, 2, 4, 5, 6, 8, 12, 14, 18, 21, 22], "gz": [0, 2, 4, 5, 6, 8, 14, 18, 21, 22], "bsd": [0, 2, 5, 6, 8, 14, 21], "slot": [0, 2, 4, 5, 6, 8, 11, 14, 21, 22], "0": [0, 2, 4, 5, 6, 8, 10, 11, 12, 14, 15, 16, 19, 20, 21, 22], "keyword": [0, 2, 4, 5, 6, 8, 10, 14, 16, 21, 22], "alpha": [0, 2, 4, 5, 6, 8, 11, 12, 14, 21, 22], "amd64": [0, 2, 4, 5, 6, 8, 12, 14, 21, 22], "arm": [0, 2, 4, 5, 6, 8, 21, 22], "arm64": [0, 2, 4, 5, 6, 8, 14, 21, 22], "hppa": [0, 2, 4, 5, 6, 8, 14, 21, 22], "ia64": [0, 2, 4, 5, 6, 8, 14, 21, 22], "mip": [0, 2, 4, 5, 6, 8, 21, 22], "ppc": [0, 2, 4, 5, 6, 8, 14, 21, 22], "ppc64": [0, 2, 4, 5, 6, 8, 14, 21, 22], "sh": [0, 2, 4, 5, 6, 8, 12, 21, 22], "sparc": [0, 2, 4, 5, 6, 8, 14, 21, 22], "x86": [0, 2, 4, 5, 6, 8, 12, 14, 21, 22], "ius": [0, 2, 4, 5, 8, 14, 21, 22], "rdepend": [0, 1, 2, 4, 5, 6, 8, 13, 14, 21, 22], "virtual": [0, 2, 8, 14], "udev": 0, "208": 0, "bdepend": [0, 1, 2, 4, 5, 6, 8, 12, 14, 19, 21, 22], "python_dep": [0, 2, 4, 5, 8, 10, 14, 21], "pkgconfig": [0, 2, 8, 14], "ebuild": [0, 1, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22], "demonstr": [0, 5, 21], "absolut": [0, 1, 9, 15, 21, 22], "minimum": [0, 15, 21], "work": [0, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 21, 22], "code": [0, 1, 3, 5, 6, 7, 8, 9, 11, 13, 14, 16, 19, 20, 21, 22], "onli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "three": [0, 1, 3, 9, 13, 16, 20], "highlight": [0, 16, 21], "line": [0, 3, 5, 13, 15, 16, 21, 22], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22], "specif": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22], "plu": [0, 21], "implicitli": [0, 3, 5, 8, 12, 20, 21, 22], "export": [0, 1, 2, 5, 21], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22], "other": [0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22], "declar": [0, 1, 2, 5, 6, 8, 9, 11, 14, 19, 21, 22], "ensur": [0, 1, 4, 5, 6, 9, 12, 14, 20, 21], "would": [0, 2, 4, 5, 7, 11, 12, 14, 15, 16, 18, 21, 22], "built": [0, 1, 3, 5, 6, 7, 8, 11, 12, 14, 16, 17, 18, 21, 22], "against": [0, 4, 7, 9, 11, 12, 14, 15, 21, 22], "implement": [0, 1, 3, 4, 5, 6, 7, 10, 14, 16, 17, 19, 20, 21, 22], "specifi": [0, 1, 2, 5, 6, 7, 8, 14, 15, 18, 19, 20, 21, 22], "get": [0, 5, 6, 12, 13, 18, 19, 22], "replac": [0, 5, 6, 10, 11, 13, 15, 18], "python_gen_any_dep": [0, 2, 8], "match": [0, 2, 4, 5, 6, 8, 9, 10, 11, 12, 15, 20, 21], "python_check_dep": [0, 2, 8], "accept": [0, 1, 4, 5, 6, 9, 12, 15, 16, 18, 19, 20], "templat": [0, 2, 4, 5, 15, 20, 21], "where": [0, 3, 5, 6, 9, 11, 12, 14, 16, 18, 21, 22], "liter": [0, 4, 21], "python_usedep": [0, 2, 4, 5, 8, 10, 12, 14, 15, 19, 21, 22], "substitut": [0, 4, 21], "requir": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 19, 20, 21], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "same": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22], "least": [0, 5, 8, 15, 20, 22], "one": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 16, 17, 19, 20, 21, 22], "test": [0, 1, 2, 3, 7, 8, 10, 11, 12, 13, 16, 17, 18, 21], "whether": [0, 1, 4, 5, 6, 7, 15, 19, 21, 22], "question": [0, 1, 5, 7, 14, 18, 19, 22], "In": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "particular": [0, 1, 4, 5, 6, 11, 15, 18, 22], "verifi": [0, 1, 5, 6, 8, 13, 20, 22], "branch": [0, 11, 16, 22], "wa": [0, 4, 5, 11, 12, 13, 16, 18, 19, 20, 22], "satisfi": [0, 1, 8, 12], "were": [0, 2, 3, 8, 11, 12, 13, 16, 18, 20], "instal": [0, 1, 3, 4, 7, 8, 10, 11, 12, 13, 16, 19], "current": [0, 5, 6, 11, 12, 13, 15, 19, 22], "For": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22], "purpos": [0, 5, 6, 9, 12, 14, 16, 18, 21, 22], "variabl": [0, 1, 5, 6, 8, 13, 14, 16, 18, 19, 21, 22], "string": [0, 1, 4, 5, 8, 14, 16, 21], "best": [0, 7, 12, 16, 17, 18, 19], "explain": [0, 1, 6, 20], "exampl": [0, 4, 5, 6, 7, 8, 9, 11, 12, 15, 16, 17, 18, 19, 21, 22], "meson": [0, 4, 5, 7, 10, 15], "manag": [0, 4, 6, 8, 9, 18, 20, 22], "cinnamon": 0, "fork": [0, 11, 12, 15, 22], "from": [0, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "nautilu": 0, "develop": [0, 1, 7, 11, 15, 17, 19, 22], "linuxmint": 0, "com": [0, 2, 4, 5, 6, 8, 12, 14, 16, 18, 22], "project": [0, 1, 5, 8, 9, 10, 14, 17, 18, 19, 20, 22], "html": [0, 5, 8, 20, 22], "github": [0, 2, 4, 5, 6, 8, 12, 14, 17, 18, 21, 22], "nemo": 0, "archiv": [0, 2, 4, 10, 21, 22], "pv": [0, 2, 4, 5, 8, 14, 18, 21, 22], "gpl": [0, 2, 4, 8, 14, 21], "2": [0, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 20, 21, 22], "lgpl": [0, 2, 14, 21, 22], "fdl": [0, 21], "1": [0, 2, 3, 4, 5, 6, 8, 9, 15, 18, 19, 20, 21, 22], "dev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22], "polib": 0, "pygobject": [0, 14], "3": [0, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22], "python_has_vers": [0, 2, 8], "provid": [0, 1, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 22], "its": [0, 1, 2, 5, 6, 7, 8, 11, 12, 15, 16, 18, 19, 22], "both": [0, 1, 3, 4, 5, 6, 7, 8, 12, 13, 16, 17, 18, 19, 20, 21, 22], "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "dep": [0, 5, 13, 19], "true": [0, 1, 2, 5, 6, 8, 12, 13, 16, 22], "them": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 15, 16, 18, 19, 20, 21, 22], "while": [0, 2, 3, 4, 5, 6, 7, 8, 11, 12, 14, 15, 16, 17, 19, 20, 21, 22], "which": [0, 6, 9, 10, 11, 14, 22], "wrapper": [0, 1, 6, 9, 13, 14, 22], "help": [0, 15, 17, 22], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 15, 16, 19, 22], "singl": [0, 1, 4, 6, 9, 10, 14, 15, 16, 18, 19, 20, 22], "option": [0, 1, 3, 6, 8, 10, 13, 15, 18, 19, 20, 21, 22], "class": [0, 1, 5, 16, 19], "flag": [0, 1, 5, 7, 8, 9, 10, 11, 12, 14, 15, 21, 22], "more": [0, 1, 3, 4, 5, 7, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21], "similarli": [0, 1, 5, 15, 18], "has_vers": [0, 4, 12], "root": [0, 5, 6, 13, 21, 22], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20, 21, 22], "b": [0, 18], "d": [0, 2, 3, 8, 9, 14, 18, 19], "r": [0, 2, 5, 9, 16, 22], "idepend": 0, "pdepend": [0, 2, 8, 12], "pass": [0, 6, 8, 9, 10, 12, 13, 16, 18, 19, 22], "assum": [0, 1, 4, 5, 6, 9, 13, 15, 21, 22], "verbos": [0, 15, 20, 22], "print": [0, 5, 8, 14, 19, 22], "check": [0, 5, 6, 9, 10, 12, 13, 16, 17, 22], "perform": [0, 2, 5, 6, 11, 12, 14, 18, 20, 21, 22], "result": [0, 5, 6, 8, 9, 12, 15, 16, 17, 18, 19, 20, 22], "return": [0, 2, 8, 16, 20, 22], "success": 0, "found": [0, 1, 3, 5, 6, 9, 10, 11, 12, 15, 18, 20, 22], "fals": [0, 2, 5, 8, 12, 15, 16], "otherwis": [0, 6, 7, 8, 9, 19], "note": [0, 1, 3, 4, 5, 6, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20, 21, 22], "invoc": [0, 5, 19, 20], "chain": 0, "abov": [0, 1, 6, 8, 12, 13, 15, 20, 21, 22], "also": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22], "written": [0, 1, 5, 7, 10, 11, 16, 19], "import": [0, 1, 3, 4, 5, 6, 7, 10, 11, 12, 13, 14, 15, 16, 18, 19], "understand": 0, "correctli": [0, 1, 5, 6, 7, 9, 11, 12, 13, 15, 16, 22], "exactli": [0, 7, 18], "furthermor": [0, 2, 5], "combin": [0, 2, 3, 5, 10, 11, 12, 13, 16, 17, 18, 19, 21, 22], "must": [0, 1, 2, 3, 5, 6, 7, 8, 11, 15, 16, 19, 21, 22], "onc": [0, 5, 8, 11, 12, 20], "invalid": [0, 16], "split": [0, 5, 13, 16], "some": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "necessari": [0, 2, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22], "particularli": [0, 5, 6, 7, 11, 13, 15, 19, 22], "common": [0, 3, 5, 6, 7, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22], "suit": [0, 1, 2, 5, 6, 7, 8, 9, 10, 12, 19, 22], "case": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21], "wrap": [0, 5, 6, 9, 13, 22], "programm": [0, 15], "complet": [0, 5, 16, 17, 20, 22], "bash": [0, 5, 7, 8, 9, 21, 22], "scop": 0, "releas": [0, 2, 8, 11, 12, 14, 16, 20], "download": [0, 2, 5, 8, 14], "xz": [0, 4, 12, 14, 21], "s390": [0, 2, 4, 5, 6, 8, 21, 22], "linux": [0, 2, 4, 5, 6, 8, 9, 14, 16, 21, 22], "maco": [0, 4, 6, 8, 21, 22], "x64": [0, 4, 6, 8, 21, 22], "m68k": [0, 4, 5, 6, 8, 21, 22], "mint": 0, "solari": [0, 6, 21, 22], "sparc64": [0, 6], "restrict": [0, 2, 4, 5, 10, 19, 20, 21, 22], "app": [0, 2, 4, 5, 8, 12, 14, 15, 18, 20, 22], "shell": [0, 8, 14, 22], "4": [0, 3, 5, 8, 9, 10, 11, 12, 14, 15, 22], "3_p30": 0, "pexpect": [0, 22], "pytest": [0, 4, 5, 8, 10, 12, 15, 18], "r1_pkg_setup": [0, 2, 21], "anoth": [0, 8, 9, 14, 15, 16, 18, 19, 20, 22], "possibl": [0, 2, 4, 5, 8, 9, 12, 14, 16, 17, 19, 22], "uncondition": [0, 1, 2, 4, 5, 6, 8, 11, 20, 21, 22], "condition": [0, 1, 2, 4, 5, 11, 12, 14, 15, 19, 21], "simplest": [0, 2, 5, 7, 14, 19, 22], "wai": [0, 5, 6, 9, 12, 13, 15, 19, 22], "achiev": [0, 8, 11, 16], "block": [0, 8, 13, 22], "express": [0, 8, 13, 21], "similar": [0, 2, 5, 14, 15, 20, 21, 22], "cmake": [0, 5, 6, 21], "qt": 0, "bind": [0, 2, 5, 8, 14, 21], "telepathi": 0, "bu": 0, "protocol": [0, 2, 21], "dbu": [0, 2], "hardest": 0, "differ": [0, 1, 3, 5, 9, 10, 11, 15, 16, 19, 22], "do": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22], "error": [0, 2, 5, 9, 12, 13, 16, 19, 20, 22], "prone": 0, "move": [0, 4, 5, 12], "insid": [0, 1, 3, 5, 6, 9, 14, 18, 19, 21, 22], "python3_6": [0, 2, 4, 8, 14], "gnome2": [0, 4, 14], "gobject": 0, "librari": [0, 1, 2, 3, 4, 8, 9, 11, 14, 21, 22], "access": [0, 10, 11, 19], "secret": 0, "servic": [0, 15, 22], "api": [0, 2, 5, 9, 10, 11, 13, 14, 16], "wiki": [0, 4, 8, 9, 12, 14, 17], "gnome": [0, 4, 14], "libsecret": 0, "apach": [0, 2, 4, 5, 8, 22], "introspect": 0, "fail": [0, 1, 2, 5, 8, 9, 11, 12, 16, 19, 22], "bug": [0, 5, 6, 12, 20, 22], "655482": 0, "required_us": [0, 1, 2, 4, 5, 7, 8, 13, 14, 21], "mock": [0, 4, 8, 11, 12, 19, 22], "fi": [0, 2, 4, 5, 8, 12, 14, 21], "host": 0, "variou": [1, 5, 6, 9, 13, 16], "r1": [1, 4, 9, 10, 12, 15, 18, 20, 22], "try": [1, 6, 8, 9, 11, 16, 22], "design": [1, 21], "you": [1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22], "probabl": [1, 6, 8, 13, 21], "us": [1, 9, 10, 11, 12, 13, 15, 16, 18, 20], "than": [1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 20, 22], "so": [1, 4, 5, 6, 11, 12, 15, 18, 19, 21, 22], "worthwhil": [1, 22], "shortli": 1, "bit": [1, 12, 17], "well": [1, 5, 7, 8, 11, 13, 15, 18, 20], "non": [1, 6, 7, 9, 12, 14, 16, 18, 19, 22], "obviou": [1, 22], "between": [1, 3, 5, 8, 10, 11, 13, 16, 18], "befor": [1, 4, 5, 8, 9, 10, 12, 14, 16], "thei": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22], "valid": [1, 5, 8, 15, 16, 20, 22], "valu": [1, 5, 6, 9, 13, 18, 19, 22], "pythonx_i": 1, "cpython": [1, 4, 5, 9, 11, 13, 18, 20], "x": [1, 5, 11, 16, 19, 22], "y": [1, 2, 11, 16], "pypy3": [1, 4, 5, 6, 8, 11, 12, 13, 15, 19, 20, 22], "typic": [1, 14], "ani": [1, 2, 3, 5, 6, 7, 10, 14, 16, 18, 19, 20, 22], "respons": [1, 5], "explicitli": [1, 5, 7, 8, 10, 13, 18, 20, 22], "put": [1, 8], "correct": [1, 5, 6, 7, 9, 10, 15, 18, 19, 20, 21], "meant": [1, 13, 20], "consist": [1, 6, 9, 12, 13, 14, 15], "cover": [1, 5, 6, 13, 22], "time": [1, 3, 4, 5, 6, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 22], "runtim": [1, 2, 3, 5, 8, 10, 13, 14, 15], "form": [1, 4, 12, 17, 18], "doe": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20, 22], "appli": [1, 4, 5, 6, 7, 12, 15, 19, 20, 21, 22], "distutil": [1, 3, 4, 9, 10, 13, 14, 18, 19, 20, 21, 22], "assign": 1, "default": [1, 2, 5, 6, 7, 8, 9, 11, 13, 14, 15, 18, 19, 20, 21, 22], "commonli": [1, 2, 3, 5, 6, 9, 11, 18], "concept": [1, 5, 10], "state": 1, "enforc": [1, 4, 5, 7, 8, 11, 19, 22], "whenev": [1, 4, 9, 11, 14, 15, 19, 21, 22], "run": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 20], "two": [1, 5, 6, 8, 9, 11, 13, 16, 19, 20, 21], "being": [1, 3, 5, 6, 8, 9, 11, 12, 15, 16, 18, 19, 22], "epython": [1, 2, 5, 8, 9, 12, 13, 19, 22], "contain": [1, 3, 4, 5, 6, 7, 12, 13, 15, 20], "": [1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 15, 16, 18, 19, 20, 21, 22], "basenam": 1, "identifi": 1, "e": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "g": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "python3": [1, 3, 5, 9, 11, 13, 15, 16, 19, 20, 22], "10": [1, 4, 5, 8, 10, 11, 12, 15, 20], "final": [1, 2, 4, 5, 9, 11, 13, 16, 21, 22], "path": [1, 3, 5, 6, 9, 10, 12, 13, 16, 18, 20, 22], "usr": [1, 2, 3, 5, 7, 8, 9, 19, 20, 22], "bin": [1, 2, 5, 7, 8, 9, 12, 21, 22], "full": [1, 2, 4, 5, 13, 22], "should": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "embed": [1, 2, 9, 11], "program": [1, 2, 5, 6, 11, 16, 19, 22], "shebang": [1, 10, 11, 22], "spawn": 1, "dure": [1, 5, 6, 7, 12, 13, 19, 20], "prefer": [1, 4, 5, 7, 8, 11, 12, 14, 15, 19, 22], "rather": [1, 5, 6, 8, 12, 15, 16, 17, 19, 20, 22], "bypass": 1, "virtualenv": [1, 6, 12, 22], "creat": [1, 3, 4, 5, 6, 12, 13, 15, 16, 20, 22], "pep": [1, 3, 6, 7, 10, 12, 15, 16, 18], "517": [1, 3, 6, 7, 10, 12], "mode": [1, 6, 7, 10, 13, 16, 20], "mai": [1, 3, 4, 5, 6, 8, 11, 12, 13, 15, 16, 18, 19, 22], "caus": [1, 4, 5, 8, 9, 13, 15, 18, 19, 20, 22], "failur": [1, 5, 10, 11, 12, 19], "modul": [1, 3, 4, 5, 6, 7, 8, 10, 11, 14, 15, 16, 19, 22], "previou": [1, 5, 12, 13, 16], "version": [1, 2, 3, 5, 6, 7, 8, 10, 12, 13, 16, 17, 19, 22], "just": [1, 6, 11, 13, 22], "resolv": [1, 5, 6, 16, 19, 22], "problem": [1, 3, 4, 5, 6, 8, 12, 15, 16, 17, 19, 20, 22], "pythonn": 1, "tool": [1, 2, 5, 8, 14, 15, 16, 20, 22], "etc": 1, "via": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 21, 22], "exec": [1, 8, 9, 11, 12, 22], "hardcod": [1, 12, 19], "either": [1, 2, 5, 8, 9, 11, 13, 19, 20, 22], "establish": [1, 13, 22], "local": [1, 2, 3, 4, 5, 8, 9, 12, 13, 14, 19, 20, 21, 22], "scope": [1, 4, 5, 8, 13, 19, 22], "multi": [1, 5, 10, 13, 21], "impl": [1, 5, 10, 13], "python_foreach_impl": [1, 2, 8, 14], "sub": [1, 3, 7, 8, 10, 22], "setup": [1, 3, 6, 7, 10, 13, 15, 19, 20, 22], "done": [1, 3, 5, 6, 8, 9, 14, 15, 19, 22], "directli": [1, 5, 6, 7, 9, 11, 13, 16, 19, 22], "section": [1, 5, 6, 7, 12, 15, 16, 18, 20, 22], "focu": [1, 7, 12, 14], "often": [1, 5, 12, 22], "extern": [1, 2, 5, 6, 7, 11, 12, 22], "languag": [1, 2, 5, 11, 15], "usual": [1, 3, 4, 5, 7, 11, 13, 15, 16, 19, 20, 22], "rule": [1, 2, 6, 7, 8, 13, 14, 15, 18], "classifi": [1, 6], "categori": [1, 15], "present": [1, 5, 6, 15, 20], "script": [1, 2, 5, 6, 7, 8, 10, 11, 12, 14, 16, 21], "usabl": [1, 11], "whose": [1, 5, 18], "therefor": [1, 2, 5, 6, 7, 8, 11, 12, 15, 19, 20, 22], "howev": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22], "modern": [1, 4, 5, 6, 11, 12, 19, 22], "base": [1, 4, 5, 7, 8, 10, 12, 14, 15, 21, 22], "entri": [1, 5, 12, 19, 20], "point": [1, 5, 11, 13, 15, 19, 22], "refus": [1, 4, 11], "place": [1, 6, 11, 12, 18, 20], "special": [1, 3, 4, 5, 6, 16, 22], "subclass": 1, "extra": [1, 5, 6, 10], "still": [1, 5, 6, 8, 11, 13, 16, 18, 20, 22], "meaningfulli": 1, "handl": [1, 4, 5, 6, 8, 13, 14, 15, 22], "gracefulli": [1, 4, 8], "subset": [1, 4, 5, 7, 8, 11, 12, 14, 15, 20, 22], "without": [1, 4, 10, 11, 13, 14, 15, 18, 19, 22], "There": [1, 3, 5, 8, 9, 15, 16, 19, 20, 22], "multipl": [1, 3, 4, 5, 7, 10, 14, 15, 17, 19, 20, 22], "approach": [1, 5, 7, 8, 12, 16, 22], "ad": [1, 5, 7, 10, 11, 13, 14, 19], "consid": [1, 2, 3, 5, 6, 7, 8, 11, 12, 14, 15, 16, 20], "light": 1, "enough": [1, 11, 22], "inform": [1, 3, 6, 10, 13, 16, 18, 20, 22], "messag": [1, 5, 22], "pkg_postinst": [1, 5], "util": [1, 2, 4, 5, 7, 8, 9, 12, 15, 19, 20, 21, 22], "optfeatur": 1, "cheap": 1, "rebuild": [1, 6, 11], "includ": [1, 2, 3, 4, 5, 6, 7, 9, 11, 12, 15, 16, 17, 18, 19, 20, 21, 22], "__init__": [1, 3, 5, 9, 19, 20, 22], "py": [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 19, 20, 22], "As": [1, 3, 5, 6, 7, 8, 11, 12, 13, 15, 16, 19, 21, 22], "thumb": [1, 6, 7, 13, 15], "belong": [1, 22], "care": [1, 2, 5, 7, 9, 15, 22], "addit": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 15, 18, 19, 22], "plugin": [1, 3, 5, 6, 8, 10, 22], "setuptools_scm": [1, 10, 22], "document": [1, 2, 7, 8, 10, 11, 14, 17, 22], "former": [1, 5, 7, 8, 13, 16, 22], "runner": [1, 5, 7, 10], "sinc": [1, 2, 3, 5, 6, 7, 11, 12, 13, 15, 16, 19, 22], "sometim": [1, 4, 5, 6, 7, 9, 11, 19, 22], "These": [1, 5, 6, 7, 11, 12, 13, 15, 19, 22], "go": [1, 2, 8, 17, 18, 19], "doc": [1, 2, 5, 8, 21], "respect": [1, 4, 5, 12, 14, 15, 19, 20], "maximum": [1, 5], "coverag": [1, 5, 15, 19, 22], "further": [1, 19], "guid": [1, 3, 5, 16, 17, 20], "linter": 1, "report": [1, 6, 9, 10, 12, 15, 22], "actual": [1, 5, 6, 8, 9, 11, 12, 15, 18, 19, 22], "undesir": [1, 5, 10, 19], "again": [1, 2, 15, 22], "conveni": [1, 4, 5, 6, 7, 19, 20, 22], "add": [1, 2, 5, 6, 8, 12, 15, 18, 20, 21, 22], "sphinx": [1, 3, 6, 7, 8, 10, 12, 15], "copi": [1, 3, 5, 6, 9, 11, 15, 20, 21, 22], "c": [1, 2, 6, 8, 9, 10, 11, 14], "extens": [1, 6, 7, 8, 9, 10, 11, 14, 15, 16], "header": [1, 9], "numpi": [1, 2, 22], "If": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22], "metadata": [1, 5, 6, 14, 15, 21], "pyproject": [1, 5, 7, 12, 20, 22], "toml": [1, 5, 7, 10, 12, 20, 22], "setuptool": [1, 3, 4, 5, 7, 8, 12, 13, 15, 18, 19, 22], "cfg": [1, 3, 5, 6, 15, 19, 20, 22], "custom": [1, 2, 3, 6, 10, 13, 15, 16, 19, 20], "read": [1, 5, 16, 18, 22], "name": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 16, 22], "uncondit": [1, 2, 5, 10, 13, 14, 15], "upstream": [1, 3, 4, 5, 6, 7, 9, 11, 12, 14, 15, 16, 18, 19, 20, 22], "spuriou": 1, "strip": [1, 3, 5, 11, 15, 19, 22], "ommit": 1, "kei": [1, 5, 16, 19, 20, 21], "kind": [1, 3, 7, 9, 11, 22], "621": 1, "older": [1, 11, 15, 18], "flit": [1, 5, 6, 12, 13], "poetri": [1, 5, 6, 13], "indic": [1, 5, 6, 11, 12, 13, 15, 18, 19, 20, 22], "install_requir": [1, 3, 5, 6], "group": [1, 2, 6, 13, 15, 19], "extras_requir": [1, 5], "setup_requir": [1, 5, 19], "deprec": [1, 3, 5, 10, 11, 13, 22], "tests_requir": [1, 5], "tox": [1, 5, 22], "ini": [1, 5, 19, 22], "noxfil": 1, "python_requir": 1, "besid": [2, 6, 11, 14, 19, 20], "few": [2, 4, 6, 12, 19, 22], "make": [2, 3, 4, 5, 6, 7, 11, 12, 13, 15, 16, 18, 19, 20, 21, 22], "proper": [2, 8], "fairli": [2, 15, 21], "recent": [2, 3, 5, 15, 22], "agnost": 2, "henc": [2, 5, 14], "treat": [2, 19], "arbitrari": [2, 13, 18, 22], "ha": [2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22], "gain": [2, 19], "quit": [2, 4, 6, 11, 12], "At": [2, 5, 11, 15, 17, 20], "mani": [2, 5, 8, 12, 14, 15, 16, 20, 22], "old": [2, 4, 5, 6, 8, 10, 11, 12, 16, 22], "reason": [2, 4, 5, 6, 11, 18, 19, 22], "suffici": [2, 5, 6, 7, 11, 14, 18], "prior": [2, 3, 5, 6, 8, 11, 12, 13, 16, 20, 22], "happen": [2, 3, 4, 6, 7, 8, 11, 21, 22], "natur": [2, 3, 5, 8, 15], "sort": 2, "latter": [2, 5, 7, 8, 13, 15, 16, 19, 22], "set": [2, 4, 5, 6, 7, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22], "much": [2, 5, 20, 22], "compon": [2, 3, 8, 11, 14, 16], "account": [2, 8, 11, 15, 22], "detail": [2, 7, 9, 11, 13, 16, 20, 22], "choic": [2, 6, 7, 13, 18, 22], "chapter": [2, 5, 8, 9], "along": [2, 5, 6, 7, 11, 12, 13, 20, 21, 22], "toolchain": [2, 4, 8], "func": [2, 8], "commit": [2, 12, 18, 22], "6e5e8a57628095d8d0c8bbb38187afb0f3a42112": 2, "userspac": 2, "xbox": 2, "360": 2, "control": [2, 4, 5, 19], "driver": 2, "xboxdrv": 2, "gitlab": [2, 8], "io": [2, 4, 5, 8, 14, 21], "chewi": 2, "workdir": [2, 5, 18], "lib": [2, 3, 5, 7, 9, 16, 19, 20, 22], "boost": [2, 7], "glib": 2, "sy": [2, 5, 8, 11, 14, 15, 16, 22], "libudev": 2, "libusb": 2, "x11": 2, "libx11": 2, "src_compil": [2, 5, 6, 8, 14, 22], "escon": 2, "cxx": 2, "tc": [2, 9], "getcxx": 2, "getar": 2, "ranlib": 2, "getranlib": 2, "cxxflag": 2, "wall": 2, "linkflag": 2, "ldflag": [2, 5], "src_instal": [2, 5, 8, 9, 14, 21], "dobin": [2, 9], "doman": 2, "dodoc": [2, 5], "new": [2, 5, 6, 9, 10, 11, 13, 16, 19, 22], "readm": [2, 12, 20], "md": [2, 20], "todo": [2, 9, 12], "yourself": [2, 4, 22], "becaus": [2, 6, 11, 12, 15, 19, 20, 22], "cannot": [2, 3, 4, 5, 9, 11, 22], "my_p": 2, "src": [2, 5, 9, 22], "_rc": [2, 18], "rc": [2, 11, 18], "high": [2, 4, 11, 12, 15, 21], "open": [2, 16], "sourc": [2, 3, 10, 12, 14, 17, 20, 22], "schema": [2, 15], "free": [2, 15, 22], "orient": [2, 16], "databas": [2, 4], "mongodb": [2, 4], "fastdl": 2, "sspl": 2, "acct": 2, "user": [2, 3, 5, 6, 7, 8, 11, 12, 15, 19, 21, 22], "arch": [2, 5, 8, 11, 12, 18], "snappi": 2, "cpp": 2, "yaml": [2, 3], "70": 2, "thread": [2, 8, 19, 21, 22], "libpcr": 2, "42": 2, "zstd": 2, "snowbal": 2, "stemmer": 2, "net": [2, 8, 11, 14, 15, 21], "libpcap": 2, "zlib": 2, "11": [2, 5, 10, 12, 15, 22], "pymongo": 2, "cheetah3": 2, "psutil": 2, "pyyaml": 2, "type": [2, 3, 6, 13, 15, 16], "ncurs": [2, 14], "readlin": [2, 5, 8, 14], "admin": [2, 8], "mongo": 2, "src_configur": [2, 5, 8, 9, 13, 14, 21], "scons_opt": 2, "cc": [2, 9], "getcc": [2, 9], "disabl": [2, 5, 8, 10, 11, 12, 14, 18, 21, 22], "warn": [2, 5, 10, 16, 22], "pcre": 2, "core": [2, 5, 20, 22], "src_test": [2, 5, 6, 14, 22], "buildscript": 2, "resmok": 2, "dbpathprefix": 2, "job": [2, 5, 19], "makeopts_job": [2, 19], "die": [2, 3, 5, 8, 9, 14, 19, 22], "nostrip": [2, 8], "prefix": [2, 8, 9, 15, 16, 22], "ed": [2, 9, 15], "everyth": [2, 13, 20], "your": [2, 4, 5, 6, 7, 8, 11, 12, 15, 16, 18, 19, 20, 22], "python2_7": [2, 5, 6, 8, 13, 14, 21, 22], "eutil": 2, "molecular": 2, "dynam": 2, "nmr": 2, "analysi": [2, 21], "relax": [2, 19], "gna": 2, "bz2": [2, 8, 21], "python_required_us": [2, 4, 5, 8, 10, 14, 21], "python_gen_cond_dep": [2, 4, 5, 8, 12, 13, 21, 22], "numdifftool": 2, "matplotlib": [2, 5, 21], "python2": [2, 8, 9, 13, 21], "wxpython": [2, 21], "wx_gtk_ver": [2, 21], "sci": [2, 5, 21], "chemistri": 2, "pymol": 2, "bmrblib": 2, "minfx": 2, "scipi": 2, "molmol": 2, "vmd": 2, "visual": 2, "grace": 2, "opendx": 2, "gfx": 2, "pngcrush": 2, "python_moduleinto": [2, 5, 9, 14], "python_domodul": [2, 5, 9, 12, 14, 21], "make_wrapp": [2, 9], "python_get_sitedir": [2, 3, 8, 9, 22], "part": [2, 3, 4, 5, 8, 9, 12, 13, 14, 15, 18, 19, 22], "That": [2, 16, 22], "fortran_need": 2, "fortran": 2, "fortran_standard": 2, "90": [2, 14], "object": [2, 11, 16, 21], "chemic": 2, "kinet": 2, "thermodynam": 2, "transport": 2, "cantera": 2, "v": [2, 4, 5, 10, 13, 14, 22], "pch": 2, "sundial": 2, "eigen": 2, "libfmt": 2, "cython": [2, 10, 14, 21], "2_pkg_setup": 2, "scons_var": 2, "cc_flag": 2, "cxx_flag": 2, "std": [2, 3], "debug": [2, 5], "getfc": 2, "fortranflag": 2, "optimize_flag": 2, "wno": 2, "inlin": [2, 7, 14, 18], "renamed_shared_librari": 2, "use_pch": 2, "usex": [2, 5, 21], "system_fmt": 2, "system_sundi": 2, "system_eigen": 2, "env_var": 2, "extra_inc_dir": 2, "eigen3": 2, "scons_target": 2, "f90_interfac": 2, "n": [2, 16, 19], "python2_packag": 2, "none": [2, 5, 6, 16, 18], "python3_packag": 2, "python3_cmd": 2, "els": [2, 8, 11, 16], "stage_dir": 2, "libdirnam": 2, "get_libdir": [2, 8], "python_optim": [2, 8, 9, 20], "deal": [2, 7, 8, 10, 15], "sens": 2, "plain": [2, 5, 6, 13], "loop": [2, 5, 19], "autom": 2, "pipelin": [2, 22], "poisson": 2, "boltzmann": 2, "electrostat": 2, "calcul": 2, "poissonboltzmann": 2, "apb": 2, "opal": 2, "openbabel": 2, "zsi": 2, "lang": [2, 8, 11, 12, 21], "swig": [2, 21], "src_prepar": [2, 3, 5, 8, 9, 14, 16, 19, 20], "f": [2, 9, 16], "pyc": [2, 9, 20], "o": [2, 5, 20], "pyo": [2, 9, 20], "delet": [2, 14], "eappli": 2, "patch": [2, 4, 5, 6, 8, 11, 12, 18, 20, 22], "eapply_us": 2, "rm": [2, 3, 5, 9, 22], "rf": [2, 22], "python_copy_sourc": [2, 14], "python_configur": 2, "cat": [2, 5], "build_dir": [2, 3, 9, 14, 22], "build_config": 2, "eof": [2, 5], "eprefix": [2, 5, 8, 9], "max_atom": 2, "10000": 2, "build_pdb2pka": 2, "rebuild_swig": 2, "run_in_build_dir": [2, 8, 14], "python_instal": [2, 14], "cd": [2, 5, 9, 12, 22], "let": [2, 4, 8, 16, 21], "independ": [2, 4, 5, 6, 7, 14, 21], "separ": [2, 5, 6, 7, 8, 11, 14, 15, 16, 19, 22], "presum": 2, "manual": [2, 3, 6, 10, 11, 12, 18, 20], "wider": 2, "target": [2, 8, 9, 11, 12, 15, 21, 22], "rang": [2, 5, 12], "recommend": [2, 5, 7, 12, 13, 14, 15, 16, 18, 19, 21, 22], "gp": [2, 8], "daemon": [2, 8], "usb": [2, 8], "serial": [2, 5, 8, 15], "devic": [2, 8], "map": [2, 5, 6, 8, 15, 19], "client": [2, 8, 9, 11, 14], "gpsd": [2, 8], "mirror": [2, 4, 5, 6, 8, 14, 21, 22], "nongnu": [2, 8], "24": [2, 8, 19, 22], "misc": [2, 8], "pp": [2, 8], "20120407": [2, 8], "myesconsarg": [2, 8], "libdir": [2, 8, 9], "udevdir": [2, 8], "get_udevdir": [2, 8], "chrpath": [2, 8], "gpsd_user": [2, 8], "gpsd_group": [2, 8], "uucp": [2, 8], "manbuild": [2, 8], "use_scon": [2, 8], "sconstruct": [2, 8], "py2": [2, 8, 18, 22], "construct": [2, 4, 8, 21], "pkg_config": 2, "shlinkflag": 2, "destdir": [2, 8, 9, 20], "bundl": [2, 5, 12], "simpl": [2, 5, 7, 13, 14, 17], "impli": [2, 9, 11], "python_req_us": [2, 4, 5, 6, 8, 14, 21], "individu": [2, 5, 11, 19], "applic": [2, 9, 11], "had": 2, "instead": [2, 3, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 20, 21, 22], "no_waf_libdir": 2, "ye": 2, "unit": 2, "framework": [2, 3, 5, 11, 17], "mrzechonek": 2, "tut": 2, "roughli": [2, 9, 11, 13, 18], "ldap": 2, "ldb": 2, "samba": [2, 21], "ftp": [2, 21], "pub": 2, "elibc_freebsd": 2, "libbsd": 2, "popt": 2, "talloc": [2, 21], "tevent": 2, "9": [2, 5, 10, 12, 15, 18, 20, 22], "31": [2, 15], "tdb": 2, "12": [2, 8, 15, 16, 19, 20], "nd": 2, "openldap": 2, "libxslt": 2, "waf_binari": [2, 21], "buildtool": [2, 21], "filesdir": 2, "27": [2, 8], "optional_packag": 2, "myconf": [2, 8], "rpath": 2, "modulesdir": 2, "builtin": 2, "utils_src_configur": [2, 21], "tradition": 3, "python": [3, 6, 17, 18, 19, 20], "organ": 3, "subpackag": [3, 20], "locat": [3, 5, 20], "parent": [3, 9], "directori": [3, 5, 6, 9, 11, 12, 13, 14, 16, 18, 19, 20, 22], "submodul": 3, "repres": [3, 5, 22], "attribut": [3, 10, 16], "session": [3, 22], "addnod": 3, "site": [3, 5, 6, 9, 10, 11, 16, 19, 22], "fine": [3, 12, 16], "start": [3, 4, 5, 6, 11, 12, 15, 16, 18, 22], "problemat": [3, 6, 10, 19], "top": [3, 5, 9, 10, 18, 19, 22], "level": [3, 9, 10, 11, 22], "layout": [3, 6, 13, 22], "wish": [3, 6, 22], "zope": [3, 15], "share": [3, 5], "interfac": [3, 6, 11, 15, 16], "event": [3, 11, 19], "depend": [3, 6, 7, 9, 10, 11, 12, 13, 15, 16, 17, 18, 20], "far": [3, 12, 21], "concern": 3, "entir": [3, 5, 9, 10, 12, 13, 14, 18, 22], "doabl": 3, "real": [3, 19, 20, 22], "we": [3, 4, 6, 8, 11, 12, 14, 15, 17, 20], "freshli": 3, "build": [3, 9, 10, 11, 15, 16, 18, 20, 22], "abl": [3, 15], "tmp": [3, 5, 9, 19, 20, 22], "portag": [3, 5, 8, 10, 12, 14, 15, 19, 22], "python3_8": 3, "traceback": [3, 5, 22], "last": [3, 5, 16], "stdin": 3, "modulenotfounderror": 3, "No": [3, 22], "now": [3, 5, 6, 8, 13, 14, 22], "around": [3, 5, 6, 11, 12, 22], "back": [3, 6, 16, 22], "better": [3, 6, 11, 12, 13, 14, 20], "solut": [3, 15, 16, 20, 22], "unlik": [3, 5, 6, 11, 15], "tradit": 3, "act": 3, "proxi": [3, 14], "strictli": [3, 5, 6, 15, 22], "bound": [3, 11, 16], "permit": [3, 4, 5, 6, 11, 15, 22], "load": [3, 7, 9, 16, 19, 20, 22], "search": [3, 10, 15], "method": [3, 5, 11, 13, 16, 19, 20, 22], "420": 3, "newer": [3, 4, 5, 6, 11, 12, 15, 16, 20], "pkgutil": 3, "standard": [3, 4, 6, 7, 9, 10, 11, 14, 16, 22], "discourag": [3, 6], "earlier": [3, 13], "ignor": [3, 4, 5, 8, 15, 19, 22], "did": [3, 13, 16, 22], "within": [3, 5, 6, 12, 15, 17, 22], "content": [3, 5, 7], "__path__": 3, "__import__": 3, "extend_path": 3, "__name__": 3, "pkg_resourc": [3, 6], "declare_namespac": 3, "altern": [3, 5, 6, 8, 10, 16, 17, 18, 22], "pth": 3, "automat": [3, 4, 5, 6, 10, 12, 15, 18, 20, 22], "inject": [3, 21, 22], "portabl": 3, "topic": [3, 17], "exact": [3, 5, 11, 21], "detect": [3, 5, 9, 15, 22], "recogn": [3, 5, 15, 16], "lack": [3, 9, 22], "action": [3, 15, 22], "distinguish": [3, 5, 13], "veri": [3, 4, 5, 6, 9, 11, 15, 17, 18, 19, 20, 22], "through": [3, 4, 5, 6, 8, 11, 16, 19], "suspici": 3, "less": [3, 15, 22], "ruamel": 3, "miss": [3, 4, 5, 6, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20], "learn": 3, "about": [3, 5, 6, 13, 15, 22], "collid": [3, 19, 22], "namespace_packag": 3, "per": [3, 20], "regular": [3, 7, 20, 22], "python3_11": [3, 12], "r1_run_phas": 3, "r1_python_instal": [3, 5], "style": [3, 4, 5, 13, 16, 17, 19, 22], "remov": [3, 4, 5, 6, 10, 11, 13, 14, 15, 19, 20, 22], "after": [3, 6, 9, 11, 12, 13, 15, 16, 18, 20, 22], "python_compil": 3, "r1_python_compil": [3, 5], "jaraco": [3, 5, 12, 19], "extrem": [3, 5, 6], "good": [3, 11, 15, 17, 19, 22], "been": [3, 5, 6, 8, 11, 12, 13, 14, 16, 19, 20], "yet": [3, 5, 8, 11, 21], "explicit": [3, 4, 5, 6, 18, 21, 22], "rdep": 3, "sed": [3, 5, 8, 14, 15, 19, 22], "r1_src_prepar": [3, 5, 19], "histor": [3, 6, 11, 13, 16, 18, 20, 22], "process": [3, 5, 7, 12, 16, 20, 21], "retir": 3, "major": [4, 5, 6, 11, 15, 22], "avail": [4, 5, 6, 8, 11, 13, 15, 16, 17], "sqlite3": 4, "sqlite": [4, 8], "xdg": 4, "music": 4, "lollypop": 4, "adishatz": 4, "syntax": [4, 10, 11, 15, 20], "lightweight": [4, 20], "password": 4, "backend": [4, 10, 12, 13], "pwman3": 4, "mysql": [4, 14], "postgr": 4, "fulli": [4, 5, 7, 11], "solv": [4, 17], "python_gen_impl_dep": 4, "helper": [4, 5, 7, 10, 14, 21, 22], "2_7": [4, 22], "3_": 4, "travel": 4, "spulec": 4, "freezegun": [4, 19, 22], "pypi": [4, 5, 6, 8, 10, 11, 13], "dateutil": 4, "six": [4, 8, 22], "nose": [4, 22], "distutils_enable_test": [4, 5, 10, 13, 19], "ll": [4, 14], "backport": [4, 6, 10, 12], "zero": [4, 15], "argument": [4, 6, 10, 13, 16, 22], "output": [4, 5, 6, 9, 16, 20, 22], "everi": [4, 5, 6, 8, 11, 14, 15, 16, 18, 20, 22], "escap": [4, 13, 21], "quot": [4, 21], "partial": [4, 5, 9, 10, 13], "python_single_usedep": [4, 5, 13, 21], "cli": [4, 5], "black": 4, "click": 4, "fnmatch": 4, "wildcard": 4, "stdlib": [4, 13, 16], "rememb": [4, 12, 18], "pattern": [4, 12, 13, 21], "prevent": [4, 5, 11, 21, 22], "filenam": [4, 5], "expans": 4, "expand": 4, "zoneinfo": 4, "advantag": [4, 5, 7, 19, 22], "adjust": [4, 9, 11, 16], "switch": [4, 7, 9, 11, 12, 13, 15, 22], "list": [4, 5, 8, 12, 13, 19, 20, 22], "longer": [4, 6, 11, 13, 18, 22], "silent": [4, 22], "updat": [4, 6, 9, 11, 12, 16, 18], "immedi": [4, 5, 12, 21], "becam": [4, 11], "empti": [4, 5, 15, 18], "importlib_metadata": [4, 6, 15, 22], "python3_7": [4, 8], "profil": [4, 6, 15], "feasibl": [4, 11, 15], "mask": [4, 11, 12, 15], "architectur": [4, 11], "skip": [4, 8, 10, 12, 16, 20], "merg": [4, 5], "deselect": [4, 12, 19, 22], "python_test": [4, 6, 8, 9, 12, 19, 22], "epytest_deselect": [4, 12, 19], "trustm": 4, "test_request": 4, "testrequest": 4, "test_https_warn": 4, "epytest": [4, 5, 6, 8, 12, 19, 22], "outer": 4, "whole": [4, 19, 22], "convinc": [4, 22], "signific": [4, 12, 19], "tl": 4, "pull": 4, "forc": [4, 5, 6, 8, 9, 12, 13, 19, 22], "remain": [4, 11, 12, 13], "facilit": [5, 9, 18], "deriv": [5, 6], "notabl": [5, 15, 16, 18], "effici": [5, 15], "oper": [5, 11, 17, 18], "backward": [5, 11, 16], "incompat": [5, 6, 11, 16, 19, 22], "greater": [5, 7], "number": [5, 7, 12, 15, 18, 19, 20, 22], "cost": [5, 11], "flexibl": [5, 7], "wheel": [5, 10, 11, 12, 15, 19, 20], "zip": [5, 6, 18], "stage": [5, 11, 20, 22], "compil": [5, 6, 10, 11, 22], "mere": [5, 7], "imag": [5, 9, 20], "compliant": [5, 7, 18], "invok": [5, 19, 22], "popul": [5, 15], "addition": [5, 9, 11, 14], "pyproject2setuppi": [5, 6, 13], "hack": [5, 6, 7, 13], "reli": [5, 6, 11, 22], "distutils_use_pep517": [5, 13], "legal": 5, "unset": [5, 6], "By": [5, 6, 11], "2022": [5, 13, 19], "xml": [5, 6], "feel": [5, 15], "json": 5, "martinblech": 5, "xmltodict": 5, "mit": [5, 6, 22], "vast": 5, "index": [5, 10], "sdist": [5, 15, 18, 20, 22], "binari": [5, 9, 12, 16], "mechan": [5, 7, 11], "especi": [5, 7, 18, 19, 20, 22], "pregener": 5, "nodej": 5, "fetch": [5, 10, 12], "own": [5, 22], "append": [5, 14, 15, 18, 22], "uniqu": [5, 14], "suffix": [5, 15, 18, 20], "gh": [5, 22], "request": [5, 8, 10, 12, 15], "distfil": [5, 16, 18, 21], "clearli": [5, 20, 22], "tarbal": [5, 12, 22], "textual": 5, "rich": 5, "implic": 5, "cf": [5, 12], "regener": [5, 12], "anywai": [5, 16], "underli": [5, 6, 7], "txt": [5, 6, 12, 19], "ci": [5, 22], "travi": 5, "yml": 5, "grep": 5, "statement": [5, 20], "indirect": 5, "relev": [5, 6, 13, 17, 19, 22], "unnecessarili": 5, "logic": [5, 6, 12, 22], "long": [5, 11, 12], "quickli": 5, "widest": 5, "avoid": [5, 6, 8, 10, 15, 16, 17, 22], "unpredict": 5, "who": [5, 17, 22], "distutils_single_impl": [5, 7], "aim": [5, 11, 15, 17, 20], "exist": [5, 10, 11, 12, 16, 20], "rewritten": [5, 21, 22], "layer": [5, 14], "pyroot": 5, "rootpi": 5, "physic": [5, 21], "root_numpi": 5, "pytabl": 5, "termcolor": 5, "determin": [5, 6, 7, 11, 21, 22], "flit_cor": [5, 12, 20], "buildapi": 5, "maintain": [5, 10, 11, 12, 16, 19], "suggest": [5, 8, 13, 15, 17, 19, 20, 22], "tabl": [5, 12, 13, 15, 16, 19], "summar": [5, 16], "use_pep517": 5, "hatchl": 5, "jupyt": 5, "jupyter_packag": 5, "build_api": 5, "maturin": 5, "mesonpi": 5, "see": [5, 9, 16, 19, 20, 22], "below": [5, 8], "pbr": [5, 6], "pep517": [5, 20], "masonri": 5, "scikit": 5, "scikit_build_cor": 5, "build_meta": 5, "__legacy__": 5, "sip": [5, 8, 15], "sipbuild": 5, "standalon": [5, 12], "itself": [5, 6, 8, 9, 12, 15, 19], "checkout": [5, 12, 22], "abil": [5, 6], "tag": [5, 12, 18, 22], "execut": [5, 6, 7, 9, 11, 12, 13, 14, 19, 22], "143": 5, "_install_setup_requir": 5, "attr": [5, 12, 22], "131": 5, "dist": [5, 19], "dict": [5, 21], "425": 5, "_distribut": 5, "self": [5, 16, 19, 22], "292": 5, "finalize_opt": 5, "717": 5, "ep": 5, "48": 5, "infer_vers": 5, "_get_vers": 5, "config": [5, 9, 12], "148": 5, "parsed_vers": 5, "_do_pars": 5, "110": 5, "rais": [5, 16], "lookuperror": 5, "scm": 5, "unabl": [5, 15, 22], "sure": [5, 15, 19, 22], "re": [5, 8, 15, 22], "intact": 5, "git": [5, 12, 22], "folder": 5, "don": [5, 13], "t": [5, 7, 8, 11, 13], "pip": [5, 12, 22], "proj": 5, "master": [5, 22], "egg": [5, 6, 19], "setuptools_scm_pretend_vers": 5, "incomplet": 5, "pleas": [5, 6, 8, 9, 12, 15, 16, 18, 19, 20, 21, 22], "reinvent": 5, "throw": [5, 16], "overrid": [5, 9, 14, 18, 22], "pdm_build_scm_vers": 5, "loadabl": 5, "presenc": [5, 8, 19], "distutils_ext": 5, "relat": [5, 10, 12, 13, 15, 22], "cross": 5, "unless": [5, 6, 8, 15, 18], "distutils_opt": 5, "assert": [5, 10, 20], "among": [5, 17], "esetup": [5, 8], "build_ext": [5, 6, 22], "2023": 5, "even": [5, 8, 9, 11, 19, 22], "isn": 5, "worth": 5, "complex": [5, 7, 16, 18, 21], "worri": 5, "qa": [5, 6, 9, 10, 12, 17], "static": [5, 8], "write": [5, 6, 7, 12, 16, 17, 20], "hybrid": [5, 10], "expos": [5, 6, 22], "alwai": [5, 6, 8, 11, 13, 16, 17, 18, 20], "guarante": [5, 6, 10, 18], "fix": [5, 6, 10, 11, 12, 15, 16, 19, 20, 22], "taken": [5, 16, 22], "ship": [5, 20], "issu": [5, 6, 13, 15, 16, 19, 22], "frobnic": 5, "makefil": [5, 14], "jq": 5, "pyx": 5, "unresolv": 5, "regard": 5, "simultan": [5, 11, 17, 22], "link": [5, 7, 9, 16], "editor": 5, "broken": [5, 6, 19, 22], "cryptic": 5, "revers": [5, 7, 12, 15], "miscompil": 5, "panda": 5, "breakag": [5, 22], "dask": [5, 19], "29": 5, "_lib": 5, "hashtabl": 5, "_hashtabl": 5, "tslib": 5, "_tslib": 5, "13": [5, 15, 18, 19, 22], "interv": 5, "init": 5, "30": [5, 11], "convers": [5, 6], "outofboundstimedelta": 5, "localize_pydatetim": 5, "importerror": [5, 6, 10, 11, 16], "38": [5, 20], "x86_64": 5, "undefin": 5, "symbol": 5, "pandas_datetime_to_datetimestruct": 5, "easiest": [5, 15, 21], "workaround": [5, 20], "j1": 5, "origin": [5, 9, 11, 12, 16, 22], "extend": [5, 11], "introduc": [5, 11], "src_": 5, "python_": [5, 8], "_all": [5, 8], "compris": 5, "behav": [5, 8], "r1_": 5, "correspond": [5, 11, 12, 15], "python_prepare_al": [5, 19], "each": [5, 6, 7, 11, 14], "python_configure_al": 5, "python_compile_al": [5, 8], "python_test_al": 5, "python_install_al": 5, "dedic": [5, 6, 12, 14], "chang": [5, 6, 8, 9, 10, 11, 13, 14, 15, 18, 20, 22], "task": [5, 8, 12], "default_src_prepar": 5, "ez_setup": 5, "bootstrap": [5, 6, 10], "end": [5, 6, 7, 9, 11, 14, 19, 22], "dir": [5, 14], "extran": 5, "fixm": 5, "test_pytest_plugin": 5, "test_testcase_no_app": 5, "_": [5, 12, 15, 18, 22], "test_test_util": 5, "pointless": 5, "cov": [5, 19, 22], "addopt": 5, "aiohttp": [5, 19], "r1_python_prepare_al": [5, 19], "duplic": [5, 14, 22], "moment": [5, 11, 13, 15], "modif": 5, "keep": [5, 15, 17], "why": [5, 6, 10], "console_script": [5, 6], "configur": [5, 6, 8, 13, 14, 20, 22], "step": [5, 6, 7, 8, 14], "mpi": 5, "distutils_arg": [5, 13], "resourcepath": 5, "compress": 5, "manpag": 5, "distutils_enable_sphinx": [5, 8], "emak": [5, 8, 9], "strongli": [5, 6, 15], "encourag": [5, 15], "testbitvector": 5, "redefin": [5, 19], "too": [5, 11, 22], "collada": 5, "einstalldoc": [5, 8, 14], "docinto": 5, "sample_cod": 5, "docompress": 5, "pf": 5, "r1_python_install_al": 5, "main": [5, 9], "manipul": [5, 22], "arrai": 5, "futur": [5, 15, 18], "pillow": 5, "tiff": 5, "webp": 5, "dash": 5, "underscor": [5, 15, 18, 22], "boolean": 5, "disable_tiff": 5, "enable_tiff": 5, "disable_webp": 5, "enable_webp": 5, "modifi": [5, 6, 11, 15, 20, 22], "beforehand": 5, "econf": [5, 21], "paremet": 5, "come": [5, 13, 19], "theme": [5, 6, 8], "larg": [5, 12, 15, 19, 20], "text": [5, 8, 16, 22], "hard": [5, 8, 12], "across": [5, 11, 22], "To": [5, 6, 8, 9, 12, 15, 16, 19, 20, 21], "those": [5, 6, 8, 9, 19, 22], "easili": [5, 14, 19, 22], "conf": [5, 6, 20], "ext": 5, "distutils_use_setuptool": [5, 13], "color": 5, "stream": 5, "handler": 5, "log": [5, 20], "coloredlog": 5, "xolox": 5, "readthedoc": 5, "en": 5, "latest": [5, 15], "humanfriendli": 5, "expert": [5, 10, 14, 22], "uncommon": [5, 15], "third": [5, 7, 13, 20], "parti": 5, "inflect": 5, "word": 5, "jazzband": 5, "rst": 5, "linker": [5, 9], "alabast": [5, 6], "python_target": [5, 7, 8, 11, 12], "inspect": 5, "omit": [5, 15, 16], "port": [5, 8, 10], "pyseri": 5, "psf": 5, "tri": 5, "incorrect": [5, 6, 20], "assumpt": 5, "consum": [5, 6, 22], "alter": [5, 19], "distutils_dep": 5, "dependneci": 5, "r1_src_compil": 5, "r1_src_instal": 5, "collis": [5, 15, 22], "r1_src_test": [5, 22], "primari": [5, 19, 22], "alongsid": [5, 6], "libfoo": 5, "setuptools_rust": 5, "ecosystem": [5, 15, 17], "over": [5, 7, 11, 12, 19, 21, 22], "internet": [5, 10, 19], "bump": [5, 12, 15, 18], "lock": 5, "pycargoebuild": 5, "cargo_opt": 5, "crate": 5, "url": [5, 10, 11, 15, 16], "cargo_crate_uri": 5, "qa_flags_ignor": 5, "posit": [5, 15], "cflag": [5, 9, 22], "cargo_src_unpack": 5, "inflector": 5, "alias": [5, 16], "asn1": 5, "asn1_der": 5, "_rust": 5, "src_unpack": 5, "benefit": [5, 7], "cyclic": 5, "suppos": [5, 16], "overlap": 5, "machineri": 5, "op": 5, "temporari": [5, 6, 22], "venv": [5, 6, 13, 22], "toward": 5, "tree": [5, 12, 13, 20, 22], "effect": [5, 8, 11, 20], "pick": [5, 12], "up": [5, 6, 9, 11, 13, 14, 15, 17, 19, 20, 22], "hukkin": 5, "tomli": [5, 12, 15], "pythonhost": [5, 18], "py3": [5, 18, 19], "whl": [5, 18], "unzip": [5, 18], "unittest": [5, 11, 22], "deliber": 5, "unpack": [5, 18], "gpep517": [5, 18, 20], "python_newscript": [5, 9], "__main__": [5, 22], "exit": [5, 16, 20, 22], "fragment": [5, 16], "emesonarg": 5, "dlint": 5, "meson_src_configur": 5, "meson_src_compil": 5, "meson_src_test": 5, "meson_src_instal": 5, "here": [6, 8, 14, 21], "direct": [6, 14], "first": [6, 10, 11, 12, 15, 16, 19, 20, 22], "convert": [6, 8, 13], "facil": 6, "right": [6, 7], "fit": [6, 22], "pyproject2toml": 6, "misbehav": 6, "subsequ": [6, 18, 20], "post": [6, 13, 15, 18, 22], "expect": [6, 11, 16, 19, 20, 22], "sidebar": 6, "bitprophet": 6, "Their": [6, 9, 20], "possibli": [6, 22], "snippet": [6, 16, 20], "except": [6, 7, 9, 11, 12, 16], "pm": 6, "cleanli": [6, 12], "condit": [6, 10, 12, 19, 22], "leav": 6, "fallback": [6, 20], "never": [6, 11, 13, 16], "want": [6, 8, 22], "clean": [6, 11, 13], "requier": 6, "With": [6, 22], "themselv": [6, 19, 20, 22], "entry_point": [6, 19], "dictionari": [6, 21], "our": [6, 19, 22], "interest": [6, 8, 22], "gui_script": 6, "meaning": 6, "importlib": [6, 11, 22], "fall": [6, 16, 22], "remind": 6, "distutils_strict_entry_point": 6, "trigger": [6, 12, 19, 20, 22], "wrong": [6, 13, 15], "leftov": 6, "resourc": [6, 11, 12, 20], "submit": [6, 20], "suppli": 6, "heavi": 6, "thin": [6, 22], "speak": [6, 11], "known": [6, 16, 22], "limit": [6, 12, 15, 17], "address": [6, 11, 16], "definit": 6, "subdirectori": [6, 9], "interspers": [6, 20], "closest": 6, "equival": [6, 8, 9, 13, 18], "inplac": 6, "shift": [6, 11], "littl": [6, 19, 22], "throughout": 6, "2to3": 6, "distutils_in_source_build": 6, "collect": [6, 19, 22], "pypa": 6, "riscv": [6, 8, 21], "cygwin": [6, 22], "pythonpath": [6, 22], "properli": [6, 13], "distutils_install_for_test": [6, 13, 19, 22], "alik": [6, 7, 11, 13], "preserv": [6, 11, 15, 16], "home": [6, 12, 13], "went": 6, "awai": [6, 7, 18], "network": [6, 19, 22], "total": 7, "rare": [7, 9, 19, 22], "simpler": 7, "primarili": [7, 11], "involv": [7, 8, 13], "graph": [7, 11, 12], "meet": 7, "potenti": [7, 11, 15, 16, 19], "basi": 7, "occur": [7, 11, 19], "libpython": [7, 11, 16], "aforement": [7, 13, 16, 18], "foo": [7, 16], "wise": 7, "abstract": [7, 14, 18], "scon": [7, 8, 10, 20], "second": [7, 13, 20], "easier": [7, 18, 20, 22], "earli": [7, 8, 12, 19, 22], "select": [7, 8, 19, 21], "allow": [7, 22], "repeat": [7, 14, 15, 20], "model": 7, "libboost_python": 7, "python_single_target": [7, 11, 12], "Its": [7, 12, 18], "legaci": [7, 10, 13, 16, 20, 22], "power": 8, "harder": [8, 15], "ninja": [8, 15], "train": 8, "opposit": [8, 11, 13], "investig": 8, "paramet": [8, 16, 20, 22], "human": 8, "beings": 8, "socks5": 8, "ssl": 8, "certifi": [8, 15], "2017": 8, "17": 8, "chardet": [8, 22], "idna": 8, "urllib3": [8, 12], "26": 8, "pysock": 8, "cryptographi": [8, 15], "pyopenssl": 8, "14": [8, 22], "httpbin": [8, 19], "hang": 8, "continu": [8, 12, 22], "python_gen_useflag": 8, "out": [8, 9, 10, 11, 12, 13, 14, 15, 16], "toolkit": 8, "translat": [8, 18], "format": [8, 12, 15, 16, 18, 20], "subtitl": 8, "pydiff": 8, "iso": 8, "lxml": 8, "pycountri": 8, "18": 8, "levenshtein": 8, "devel": 8, "gettext": 8, "video": 8, "gaupol": 8, "riverbankcomput": 8, "intro": 8, "sip_api_major_nr": 8, "siplib": 8, "h": [8, 9, 21], "bison": 8, "flex": 8, "prepar": [8, 9, 20, 21], "bindir": 8, "incdir": 8, "python_get_includedir": [8, 9, 13], "echo": [8, 20], "distutils_all_subphase_impl": 8, "python3_5": 8, "bzip2": 8, "epydoc": 8, "eselect": 8, "elibc_glibc": 8, "sandbox": [8, 20, 22], "kernel_linux": 8, "pax": 8, "rsync": 8, "userland_gnu": 8, "coreutil": 8, "sphinx_rtd_them": 8, "practic": [8, 11, 12], "big": 8, "imagin": 8, "anymor": [8, 11], "downgrad": 8, "though": [8, 11], "resembl": [8, 19], "activ": [8, 17], "behavior": [8, 11, 16, 18], "goal": [8, 12, 22], "side": [8, 11], "someth": [8, 9, 22], "accord": [8, 18], "integr": [8, 9, 10, 11], "won": 8, "precis": [8, 9, 22], "reject": [8, 15, 16], "unsupport": [8, 11], "python_is_python3": [8, 13], "basic": [9, 10], "reus": [9, 15], "four": [9, 13, 21], "python_doex": 9, "python_newex": 9, "python_doscript": [9, 14, 21], "recurs": [9, 15, 19], "python_dohead": 9, "python_scriptinto": 9, "affect": [9, 11, 14, 18], "symlink": 9, "onto": 9, "improv": [9, 10, 11, 17], "cropgtk": 9, "sbin": 9, "pynslcd": 9, "anyth": 9, "land": 9, "my_pn": 9, "doin": 9, "libimag": 9, "env": [9, 12], "python_fix_shebang": 9, "sphinxtrain": 9, "openvpn": 9, "vulnkei": 9, "insinto": 9, "kitti": 9, "speed": 9, "nowadai": [9, 12, 13], "pypy2": [9, 11], "_feedparser_sgmllib": 9, "lib64": 9, "byte_compil": 9, "cmake_src_instal": 9, "entropi": 9, "ocassion": 9, "bad": [9, 16], "seri": 9, "getter": [9, 13, 16], "python_get_scriptdir": 9, "python_get_library_path": [9, 13], "python_get_cflag": 9, "preprocessor": 9, "pkg": 9, "python_get_lib": 9, "python_get_python_config": 9, "offset": 9, "alreadi": [9, 12, 14, 15, 16, 20, 22], "mycmakearg": [9, 13, 21], "dpython_dest": 9, "dpython_execut": 9, "dpython_include_dir": 9, "dpython_librari": 9, "cmake_src_configur": [9, 21], "pyinc": 9, "pylib": 9, "micha\u0142": 10, "g\u00f3rny": 10, "creativ": 10, "intern": 10, "prefac": 10, "life": 10, "cycl": [10, 12], "stabil": 10, "choos": [10, 11, 14], "overview": 10, "variant": [10, 11, 16, 19, 22], "flit_scm": 10, "hatch": 10, "vc": [10, 22], "pdm": [10, 13], "snapshot": [10, 22], "rust": 10, "parallel": 10, "race": 10, "command": [10, 14, 15, 19, 20, 22], "usag": [10, 18], "cargo": 10, "checklist": 10, "abort": 10, "due": [10, 12, 14, 18, 19, 20], "variat": 10, "byte": [10, 16], "queri": [10, 16], "advanc": 10, "cffi": 10, "greenlet": [10, 19], "recip": 10, "marker": [10, 22], "xdist": [10, 12, 22], "flaki": [19, 22], "autoload": 10, "typeerror": 10, "_make_test_flaki": 10, "got": [10, 13], "unexpect": [10, 20], "rerun": 10, "importpathmismatcherror": 10, "fixtur": [10, 12], "namespac": [10, 19], "disjoint": 10, "waf": [10, 21], "tip": [10, 22], "retroact": 10, "migrat": [10, 18], "bytecod": 10, "strai": 10, "mainten": 10, "polici": 10, "co": [10, 22], "monitor": [10, 20], "routin": [10, 14], "page": [10, 16, 17], "increment": 11, "minor": [11, 22], "plan": 11, "On": 11, "hand": [11, 13], "platform": [11, 16, 18, 22], "linux_distribut": 11, "window": 11, "understood": 11, "initi": [11, 22], "enter": 11, "stabl": [11, 12, 15], "prematur": [11, 15], "beta": [11, 12], "made": [11, 13, 14, 16, 21], "regress": 11, "readi": [11, 12, 15], "dai": 11, "inconsist": [11, 15, 22], "mark": [11, 15, 19, 22], "clear": [11, 15], "depenend": 11, "repeatedli": 11, "ask": [11, 15], "push": [11, 12, 15], "forward": 11, "eventu": [11, 12], "becom": [11, 16, 19], "slowli": [11, 15], "discontinu": 11, "next": [11, 12, 15, 19], "june": 11, "juli": 11, "year": 11, "predict": [11, 21], "nears": 11, "great": 11, "obsolet": [11, 13], "vulner": 11, "break": [11, 15, 16], "revert": 11, "enum": 11, "urlsplit": 11, "sanit": [11, 16, 22], "secur": [11, 12], "abi": [11, 18], "bugfix": 11, "occasion": 11, "contrari": [11, 16], "hold": [11, 16], "subslot": 11, "fortun": 11, "late": 11, "hous": 11, "rpython": 11, "lot": [11, 15], "gc": 11, "jython": 11, "java": 11, "stand": 11, "alon": 11, "bidirect": 11, "interact": 11, "slow": [11, 19], "pace": 11, "ironpython": 11, "brython": 11, "web": 11, "javascript": 11, "dom": 11, "micropython": 11, "microcontrol": 11, "down": 11, "hardwar": 11, "tauthon": 11, "accompani": 11, "nor": [11, 17, 20], "ideal": [11, 15, 22], "minim": [11, 15, 16, 22], "funcsig": 11, "signatur": [11, 16], "afterward": [11, 14, 15, 22], "later": 11, "lzma": 11, "compet": 11, "amount": [11, 12, 22], "ipaddress": 11, "drop": [11, 16], "box": [11, 13], "hexvers": [11, 22], "0x03030000": 11, "trolliu": 11, "asyncio": [11, 19, 22], "nativ": 11, "workflow": 12, "clone": 12, "remot": [12, 15, 22], "rebas": 12, "v3": 12, "cherri": 12, "upload": 12, "mkdir": 12, "scp": 12, "precompil": [12, 20], "unusu": 12, "structur": [12, 22], "ex": 12, "Then": 12, "technic": [12, 18], "docker": 12, "binpkg": 12, "produc": [12, 15, 20], "diff": 12, "mgorni": 12, "depgraph": 12, "desc": 12, "_python_all_impl": 12, "_python_verify_pattern": 12, "_python_set_impl": 12, "_python_impl_match": 12, "python_pkg_dep": 12, "gpyutil": [12, 15], "circular": 12, "eas": [12, 15], "temporarili": [12, 13], "20": [12, 18], "pwd": 12, "round": 12, "remaind": 12, "pydant": 12, "test_comparison": 12, "test_close_to_now_": 12, "lenient": 12, "unblock": 12, "100": 12, "40": [12, 20], "emerg": [12, 20], "previous": 12, "reinstal": 12, "batch": [12, 20], "focus": 12, "reenabl": [12, 19], "obsolesc": 12, "announc": 12, "mail": [12, 15], "proce": 12, "track": [12, 15], "progress": 12, "show": 12, "sign": [12, 15], "effort": 12, "revis": [12, 15], "hint": [12, 22], "_python_historical_impl": 12, "statu": 12, "dead": 12, "face": [12, 22], "goe": [12, 22], "unbundl": 12, "obligatori": [12, 15], "baselin": 12, "ones": 12, "chosen": 12, "fewest": 12, "vendor": [12, 13], "februari": 13, "gross": 13, "serv": 13, "placehold": 13, "transit": [13, 15], "period": [13, 15], "ban": 13, "python_multi_usedep": 13, "instanc": [13, 16, 18], "know": [13, 16, 22], "given": 13, "repoman": 13, "pkgcheck": [13, 15], "tell": 13, "chose": 13, "reorder": 13, "desir": [13, 16, 20, 22], "scan": [13, 15], "unmatch": 13, "trial": 13, "stuff": 13, "thing": [13, 17, 19], "privat": 13, "python_export": 13, "python_wrapper_setup": 13, "python_gen_usedep": 13, "mydistutilsarg": 13, "renam": [13, 15, 16, 18, 20], "cleanup": 13, "python_gen": 13, "march": 13, "grab": [13, 20], "python_get": 13, "python_includedir": 13, "python_libpath": 13, "dpython3_include_dir": 13, "dpython3_librari": 13, "sundri": 13, "stop": [13, 16, 18], "realli": [13, 15, 19, 22], "ugli": 13, "sole": 13, "uppercas": [13, 15, 16, 18], "fourth": 13, "cruft": 13, "short": [13, 19], "evalu": 13, "januari": 13, "safe": 13, "streamlin": 13, "unfortun": [13, 15, 16, 19, 20, 22], "inde": 13, "foundat": 14, "fionet": 14, "psql": 14, "cach": 14, "sourceforg": [14, 21], "replic": 14, "tgz": 14, "libcangji": 14, "cangjian": 14, "i18n": 14, "eautoreconf": [14, 16], "econf_sourc": 14, "la": 14, "multibuild": 14, "unnecessari": [14, 15, 21, 22], "implicit": [14, 20, 22], "libtool": 14, "buggi": 14, "canva": 14, "widget": 14, "gtk": 14, "cairo": 14, "2d": 14, "draw": 14, "goocanva": 14, "subdir": 14, "am": 14, "gnome2_src_prepar": 14, "gnome2_src_configur": 14, "gnome2_src_instal": 14, "sub_instal": 14, "gi": 14, "_overridesdir": 14, "outsid": [14, 21], "3_6": [14, 22], "3_7": [14, 22], "qemu": 14, "kernel": 14, "machin": [14, 20], "userland": 14, "kvm": 14, "qemu_python_instal": 14, "vmxcap": 14, "qmp": 14, "ga": 14, "publish": 15, "503": 15, "dot": [15, 18], "hyphen": 15, "charact": [15, 18], "insensit": 15, "letter": [15, 18], "turn": [15, 22], "lowercas": [15, 18], "crucial": 15, "conform": [15, 18], "conflict": 15, "bugzilla": 15, "illustr": 15, "flask": [15, 18], "babel": 15, "github3": 15, "sphinx_pytest": 15, "tab": [15, 22], "titl": [15, 18], "idea": [15, 22], "423": 15, "redirect": 15, "canon": [15, 18], "id": 15, "bear": 15, "mind": 15, "doubt": 15, "reserv": 15, "reach": 15, "eol": [15, 16], "proactiv": 15, "anticip": 15, "soon": 15, "wide": [15, 22], "newli": 15, "risk": 15, "team": 15, "manpow": 15, "member": 15, "u": 15, "gemato": 15, "carri": 15, "histori": 15, "rss": 15, "comprehens": 15, "opml": 15, "followup": 15, "suscept": 15, "simpli": [15, 16, 17, 22], "confus": [15, 19], "sync": [15, 19], "m": [15, 19, 20, 22], "cx": 15, "freez": 15, "patchelf": 15, "openapi": 15, "spec": [15, 16], "60": 15, "59": 15, "62": 15, "pin": 15, "httpcore": 15, "15": 15, "httpx": 15, "23": [15, 22], "sphobjinv": 15, "28": 15, "date": [15, 17, 20, 22], "pend": 15, "pip3": 15, "dirti": 15, "equal": [15, 22], "filetyp": 15, "mercuri": 15, "node": 15, "semver": 15, "pyqt": 15, "builder": 15, "pyqt5": 15, "pyqtwebengin": 15, "rout": 15, "dev20220522": 15, "selenium": 15, "141": 15, "sphinxcontrib": 15, "websupport": 15, "dev20220515": 15, "uri": 15, "watchfil": 15, "watchgod": 15, "dev0": 15, "tag_build": 15, "compar": [15, 16], "tempest": 15, "oslo": 15, "stestr": 15, "versioningit": 15, "wstool": 15, "mistak": [15, 20], "think": 16, "ve": 16, "hit": 16, "me": 16, "18_p9": 16, "13_p3": 16, "10_p3": 16, "9_p2": 16, "4_p1": 16, "urllib": 16, "pars": 16, "exploit": 16, "verbatim": 16, "attempt": [16, 20, 22], "worm": 16, "danger": 16, "worst": [16, 22], "unpars": 16, "django": [16, 22], "pr": 16, "14349": 16, "impact": [16, 20], "urlpars": 16, "nurl": 16, "parseresult": 16, "scheme": 16, "netloc": 16, "param": [16, 19], "badurl": 16, "what": 16, "attributeerror": 16, "492": 16, "decor": [16, 22], "async": [16, 19], "def": [16, 19, 22], "yield": 16, "await": 16, "sleep": 16, "callabl": 16, "mostli": [16, 17], "getfullargspec": 16, "p1": 16, "p2": 16, "kp3": 16, "kp4": 16, "kp5": 16, "arg": 16, "kwarg": 16, "argspec": 16, "vararg": 16, "fullargspec": 16, "varkw": 16, "kwonlyarg": 16, "kwonlydefault": 16, "annot": 16, "tupl": 16, "int": 16, "str": 16, "float": 16, "k6": 16, "k7": 16, "k8": 16, "One": [16, 22], "prototyp": 16, "bar": 16, "pretti": 16, "stringif": 16, "automak": 16, "16": 16, "wrongli": [16, 20, 22], "exec_prefix": 16, "met": 16, "pkg_config_path": 16, "python_cflag": 16, "python_lib": 16, "man": 16, "autoreconf": 16, "intend": [16, 20, 22], "easi": [16, 20, 22], "get_python_inc": 16, "get_path": 16, "platinclud": 16, "get_python_lib": 16, "purelib": 16, "platlib": 16, "platstdlib": 16, "todai": 16, "encodebyt": 16, "decodebyt": 16, "ought": 16, "unicod": 16, "version_info": 16, "b64_encodebyt": 16, "b64encod": 16, "b64decod": 16, "insert": 16, "newlin": 16, "encod": [16, 22], "length": 16, "until": 16, "emb": 16, "lpython3": 16, "7m": 16, "novemb": 16, "tomlkit": 16, "edit": 16, "wherea": [16, 18], "input": 16, "tomldecodeerror": 16, "d1": 16, "in1": 16, "in2": 16, "d2": 16, "d3": 16, "rb": 16, "python_vers": 16, "insist": 16, "incompatibilit": 16, "consider": 16, "dump": [16, 22], "tomli_w": 16, "wb": 16, "beyond": 17, "reliabl": [17, 22], "deep": 17, "beginn": 17, "peopl": 17, "suboptim": 17, "improp": 17, "fill": 17, "gap": 17, "welcom": 17, "small": 18, "adapt": 18, "frequent": [18, 19, 22], "hash": 18, "2e": 18, "36e46173a288c1c40853ffdb712c67e0e022df0e1ce50b7b1b50066b74d4": 18, "inconveni": 18, "settl": 18, "pytag": 18, "625": 18, "440": 18, "transform": 18, "contigu": 18, "babelex": 18, "flask_babelex": 18, "predat": 18, "minu": 18, "abitag": 18, "platformtag": 18, "cp39": 18, "427": 18, "alphanumer": 18, "w": 18, "left": 18, "_alpha": 18, "_beta": 18, "_p": 18, "pypi_no_norm": 18, "overwritten": 18, "execnet": 18, "c0459b92bc4a42b08281e69b8802d24c5d3415d4": 18, "pypi_pn": 18, "pypi_sdist_url": 18, "markup": 18, "overriden": 18, "prebuilt": 18, "pypi_wheel_url": 18, "aid": 18, "ensurepip": 18, "pypi_wheel_filenam": 18, "synopsi": 18, "parametr": 19, "epytest_ignor": 19, "test_client": 19, "test_gener": 19, "test_filenam": 19, "test_transport": 19, "test_transport_work": 19, "eventlet": 19, "test_contextvar": 19, "test_leak": 19, "might": 19, "intent": 19, "Not": [19, 22], "instabl": 19, "unstabl": 19, "discret": 19, "decid": 19, "justifi": 19, "semi": 19, "random": 19, "multiprocess": 19, "worksteal": 19, "finish": 19, "reschedul": 19, "worker": 19, "fast": 19, "lengthi": 19, "bottleneck": 19, "steep": [], "increas": [], "timeout": 22, "rerunfailur": 19, "minut": [], "slower": [], "fragil": [], "pytest_disable_plugin_autoload": 19, "delai": [], "reduc": 20, "randomli": [], "flake8": [19, 22], "01": 19, "chanc": 19, "experienc": 19, "insuffici": 19, "nest": 19, "envvar": 19, "pytest_plugin": 19, "comma": 19, "looponfail": 19, "pytest_fork": 19, "supposedli": 19, "twice": 19, "_pytest": [19, 22], "pathlib": [19, 22], "posixpath": 19, "discoveri": [19, 20, 22], "rel": [19, 20, 22], "signifi": 19, "event_loop": 19, "freezer": 19, "mocker": 19, "captur": [19, 22], "summari": 19, "asgiref": 19, "135": 19, "test_loc": 19, "test_sync": 19, "test_sync_contextvar": 19, "deprecationwarn": 19, "main_event_loop": 19, "get_event_loop": 19, "filterwarn": 19, "fatal": [19, 22], "_____________________": 19, "______________________": 19, "577": 19, "asgitest": 19, "testcas": 19, "583": 19, "test_wrapped_case_is_collect": 19, "interrupt": 19, "world": 19, "catch": [20, 22], "elog": 20, "portage_elog_class": 20, "optim": 20, "size": 20, "oo": 20, "docstr": 20, "store": 20, "disk": [20, 22], "permiss": 20, "uninstal": 20, "violat": 20, "auxiliari": 20, "readabl": [20, 22], "trimesh": 20, "__pycache__": 20, "blender_boolean": 20, "310": 20, "opt": 20, "notic": 20, "blueman": 20, "constant": 20, "deviceclass": 20, "sdp": 20, "tmpl": 20, "pair": 20, "docbook": 20, "35": 20, "36": 20, "changelog": 20, "qawarn": 20, "wait": 20, "find_packag": 20, "exclud": 20, "ident": 20, "artifact": 20, "footprint": 20, "isol": 20, "faster": 20, "poetry_cor": 20, "smaller": 20, "prolong": 20, "tend": 20, "plot": 21, "voacap": 21, "propag": 21, "qsl": 21, "hz1jw": 21, "pythonprop": 21, "basemap": 21, "gtk2": 21, "context": [21, 22], "doubl": 21, "energi": 21, "yoda": 21, "hepforg": 21, "use_en": 21, "pyext": 21, "extra_opt": 21, "give": 21, "sound": 21, "signal": [21, 22], "composit": 21, "csound": 21, "fordfrog": 21, "dbuild_python_interfac": 21, "dbuild_python_opcod": 21, "superset": 21, "arab": 21, "arabey": 21, "duali": 21, "pyduali": 21, "dict2db": 21, "trans2arab": 21, "arabic2tran": 21, "whitelist": 22, "mozilla": 22, "bleach": 22, "webencod": 22, "univers": 22, "detector": 22, "hypothesi": 22, "bottom": 22, "pre": 22, "cmd": 22, "cmd2": 22, "colorama": 22, "pyperclip": 22, "wcwidth": 22, "column": 22, "80": 22, "fact": 22, "3_8": 22, "argpars": 22, "argcomplet": 22, "fish": 22, "tcsh": 22, "displai": 22, "appeas": 22, "usng": 22, "xvfb": 22, "server": 22, "virtx": 22, "nonfat": 22, "termin": 22, "domain": 22, "firstli": 22, "nosetest": 22, "secondli": 22, "strict": 22, "thirdli": 22, "wholli": 22, "spew": 22, "irrelev": 22, "seem": 22, "ceas": 22, "downstream": 22, "how": 22, "statist": 22, "pep8": 22, "pycodestyl": 22, "close": 22, "preced": 22, "area": 22, "caution": 22, "advis": 22, "____________________": 22, "systemd": 22, "test_login": 22, "234": 22, "578": 22, "_importtestmodul": 22, "mod": 22, "import_path": 22, "fspath": 22, "importmod": 22, "524": 22, "import_modul": 22, "module_nam": 22, "127": 22, "_bootstrap": 22, "_gcd_import": 22, "frozen": 22, "1014": 22, "991": 22, "_find_and_load": 22, "975": 22, "_find_and_load_unlock": 22, "671": 22, "_load_unlock": 22, "rewrit": 22, "170": 22, "exec_modul": 22, "__dict__": 22, "login": 22, "r2": 22, "frozendict": 22, "pyarg": 22, "lookup": 22, "lead": 22, "mislead": 22, "guess": 22, "quick": 22, "mayb": 22, "eunittest": 22, "aris": 22, "confirm": 22, "whom": 22, "myself": 22, "subtl": 22, "But": 22, "bewar": 22, "unexpectedli": 22, "test_start_params_bug": 22, "xfail": 22, "statsmodel": 22, "tsa": 22, "test_arima": 22, "horrend": 22, "space": 22, "mayhem": 22, "5a": 22, "test_null_byt": 22, "skipif": 22, "0x03000000": 22, "unconditioanlli": 22, "test_babel_with_language_": 22, "test_build_latex": 22, "test_polyglossia_with_language_": 22, "altogeth": 22, "replai": 22, "devmanu": 22, "explan": 22, "connect": 22, "pygit2": 22, "no_network": 22, "properti": 22, "test_network": 22, "allow_test": 22, "unclear": 22, "backtrac": 22, "pluggi": 22, "cachedir": 22, "pytest_cach": 22, "rootdir": 22, "var": 22, "sabyenc": 22, "configfil": 22, "item": 22, "test_decod": 22, "test_crc_pickl": 22, "54": 22, "test_empty_size_pickl": 22, "0x00007f748bc47740": 22, "testsupport": 22, "74": 22, "sabyenc3_wrapp": 22, "119": 22, "180": 22, "pytest_pyfunc_cal": 22, "caller": 22, "187": 22, "_multical": 22, "temp": 22, "2934": 22, "66": 22, "vv": 22, "34": 22, "25": 22, "sabyenc3": 22, "596": 22, "decode_usenet_chunk": 22, "pybytearray_check": 22, "pylist_getitem": 22, "py_input_list": 22, "lp": 22, "0x00007fb5db746740": 22, "73": 22, "117": 22, "87": 22, "lambda": 22, "runpi": 22, "85": 22, "_run_cod": 22, "193": 22, "_run_module_as_main": 22, "reproduc": 22, "ubuntu": 22, "dndebug": 22, "leak": 22, "o0": 22, "isort": 22, "distutils_pep517_instal": 22, "destin": 22, "cp": 22, "pushd": 22, "null": 22, "popd": 22}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"python": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 21, 22], "ani": [0, 8], "r1": [0, 2, 5, 6, 7, 8, 13, 14, 21], "build": [0, 1, 2, 5, 6, 7, 8, 12, 13, 14, 21], "time": [0, 2, 7, 8, 14, 21], "depend": [0, 1, 2, 4, 5, 8, 14, 19, 21, 22], "basic": [0, 1, 5, 21, 22], "us": [0, 2, 3, 4, 5, 6, 7, 8, 14, 19, 21, 22], "uncondit": [0, 21], "condit": [0, 2, 4, 5, 14, 21], "addit": [0, 5, 14], "multipl": [0, 11, 21], "set": [0, 8], "common": [1, 9], "python_compat": 1, "python_dep": 1, "python_required_us": 1, "environ": [1, 22], "packag": [1, 2, 3, 4, 5, 6, 7, 12, 14, 15, 16, 18, 20, 21, 22], "The": [1, 5], "most": 1, "type": 1, "find": 1, "list": [1, 15, 16], "from": [1, 13], "system": [1, 2, 5, 6, 12], "integr": [2, 5], "written": 2, "meson": 2, "scon": 2, "extra": [2, 22], "singl": [2, 5, 7, 13, 21], "impl": [2, 7, 14, 21], "instal": [2, 5, 6, 9, 14, 15, 20, 21, 22], "pure": [2, 14], "multi": [2, 7, 14], "hybrid": [2, 21], "waf": 2, "advanc": [3, 4], "concept": [3, 6], "namespac": 3, "hierarch": 3, "structur": 3, "determin": 3, "whether": 3, "ar": [3, 20], "ad": [3, 12, 15, 22], "new": [3, 12, 15], "gentoo": [3, 10], "legaci": [3, 5, 6, 18], "request": 4, "flag": 4, "interpret": [4, 8, 11, 12], "version": [4, 11, 15, 18], "cffi": 4, "greenlet": 4, "option": [4, 5], "test": [4, 5, 6, 15, 19, 20, 22], "suit": 4, "rust": [4, 5], "distutil": [5, 6, 7, 8, 16], "standard": 5, "pep": [5, 13, 20, 22], "517": [5, 13, 20, 22], "mode": [5, 22], "sourc": [5, 6, 18], "archiv": [5, 18], "variant": 5, "setuptools_scm": 5, "flit_scm": 5, "hatch": 5, "vc": 5, "pdm": 5, "backend": [5, 20], "snapshot": 5, "extens": [5, 22], "c": [5, 22], "cython": 5, "parallel": [5, 19], "race": 5, "sub": 5, "phase": [5, 22], "function": [5, 9], "python_prepar": 5, "python_configur": 5, "python_compil": 5, "python_test": 5, "python_instal": 5, "pass": 5, "argument": [5, 19], "setup": 5, "py": 5, "call": 5, "custom": [5, 18, 22], "command": 5, "enabl": 5, "document": [5, 20], "via": [5, 15], "sphinx": 5, "autodoc": 5, "without": [5, 16], "usag": [5, 8], "cargo": 5, "manual": [5, 14, 21], "build_dir": 5, "d": 5, "non": 5, "differ": [6, 8, 18], "variat": 6, "distutils_use_setuptool": 6, "setuptool": [6, 20], "entri": 6, "point": 6, "other": [6, 19], "runtim": [6, 7, 21], "pyproject": 6, "toml": [6, 16], "base": [6, 16, 19], "project": [6, 15], "In": 6, "v": [6, 7], "out": 6, "befor": [6, 22], "choos": [7, 22], "between": 7, "eclass": [7, 12, 18], "overview": 7, "first": 7, "expert": [8, 19], "partial": 8, "restrict": 8, "implement": [8, 9, 11, 12, 15], "python_setup": 8, "disjoint": 8, "api": [8, 20], "regular": 8, "combin": 8, "helper": [9, 18], "fix": 9, "shebang": 9, "script": 9, "byte": [9, 20], "compil": [9, 20], "modul": [9, 20], "queri": 9, "inform": 9, "guid": [10, 13], "content": 10, "indic": 10, "tabl": 10, "life": 11, "cycl": 11, "stabil": 11, "guarante": 11, "altern": 11, "support": [11, 15], "backport": 11, "mainten": [12, 15], "note": 12, "specif": 12, "cpython": 12, "patchset": 12, "pypi": [12, 15, 18, 22], "profil": 12, "chang": [12, 16], "port": [12, 15, 16], "initi": 12, "remov": [12, 16], "prepar": 12, "bootstrap": 12, "migrat": 13, "old": 13, "python_usedep": 13, "syntax": 13, "eapi": [13, 15], "7": 13, "8": [13, 16], "autotool": 14, "name": [15, 18, 19], "polici": 15, "2": 15, "which": 15, "exist": 15, "can": 15, "co": 15, "maintain": 15, "monitor": 15, "releas": 15, "feed": 15, "check": [15, 20], "pip": 15, "repologi": 15, "routin": 15, "outdat": 15, "gpy": 15, "verifi": 15, "dep": 15, "tip": 16, "retroact": 16, "bpo43882": 16, "urlsplit": 16, "now": 16, "strip": 16, "lf": 16, "cr": 16, "ht": 16, "charact": 16, "3": 16, "11": 16, "gener": [16, 18], "coroutin": 16, "asyncio": 16, "inspect": 16, "getargspec": 16, "formatargspec": 16, "10": 16, "configur": 16, "No": 16, "1": 16, "found": [16, 19], "sysconfig": 16, "deprec": [16, 20], "9": 16, "base64": 16, "encodestr": 16, "decodestr": 16, "config": 16, "pkg": 16, "longer": 16, "librari": 16, "default": 16, "replac": 16, "tomllib": 16, "tomli": 16, "fallback": 16, "w": 16, "prefac": 17, "url": 18, "modern": 18, "distribut": 18, "filenam": 18, "binari": 18, "match": 18, "fetch": 18, "wheel": 18, "pytest": [19, 22], "recip": 19, "skip": [19, 22], "marker": 19, "path": 19, "avoid": 19, "runner": [19, 22], "xdist": 19, "run": [19, 22], "deal": 22, "flaki": [], "plugin": 19, "explicitli": 19, "disabl": 19, "automat": 19, "autoload": 19, "entir": 19, "typeerror": 19, "_make_test_flaki": 19, "got": 19, "an": 19, "unexpect": 19, "keyword": 19, "rerun": 19, "importpathmismatcherror": 19, "fixtur": 19, "warn": [19, 20], "qa": 20, "improv": 20, "report": 20, "portag": 20, "bytecod": 20, "relat": 20, "strai": 20, "top": 20, "level": 20, "file": [20, 22], "site": 20, "exampl": 20, "poetri": 20, "flit": 20, "buildapi": 20, "masonri": 20, "build_meta": 20, "__legacy__": 20, "A": 21, "why": 22, "i": 22, "import": 22, "distutils_enable_test": 22, "case": 22, "more": 22, "virtualx": 22, "correct": 22, "undesir": 22, "miss": 22, "importerror": 22, "checklist": 22, "failur": 22, "problemat": 22, "requir": 22, "internet": 22, "access": 22, "abort": 22, "due": 22, "assert": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"python-any-r1 \u2014 build-time dependency": [[0, "python-any-r1-build-time-dependency"]], "Basic use for unconditional Python": [[0, "basic-use-for-unconditional-python"], [21, "basic-use-for-unconditional-python"]], "Dependencies": [[0, "dependencies"], [5, "dependencies"], [14, "dependencies"], [21, "dependencies"]], "Conditional Python use": [[0, "conditional-python-use"], [14, "conditional-python-use"], [21, "conditional-python-use"]], "Additional conditional dependencies": [[0, "additional-conditional-dependencies"]], "Multiple sets of conditional dependencies": [[0, "multiple-sets-of-conditional-dependencies"]], "Common basics": [[1, "common-basics"]], "PYTHON_COMPAT": [[1, "python-compat"]], "PYTHON_DEPS and PYTHON_REQUIRED_USE": [[1, "python-deps-and-python-required-use"]], "Python environment": [[1, "python-environment"]], "Dependencies in Python packages": [[1, "dependencies-in-python-packages"]], "The most common dependency types": [[1, "the-most-common-dependency-types"]], "Finding dependency lists from build systems": [[1, "finding-dependency-lists-from-build-systems"]], "Integration with build systems written in Python": [[2, "integration-with-build-systems-written-in-python"]], "Meson": [[2, "meson"]], "SCons": [[2, "scons"]], "Build-time use with no extra dependencies": [[2, "build-time-use-with-no-extra-dependencies"]], "Build-time use with extra dependencies": [[2, "build-time-use-with-extra-dependencies"]], "Single-impl package": [[2, "single-impl-package"], [2, "id1"]], "Single-impl package with conditional Python install": [[2, "single-impl-package-with-conditional-python-install"]], "Pure Python multi-impl package": [[2, "pure-python-multi-impl-package"]], "Hybrid python-r1 + SCons package": [[2, "hybrid-python-r1-scons-package"]], "waf": [[2, "waf"]], "Build-time use": [[2, "build-time-use"]], "Advanced concepts": [[3, "advanced-concepts"]], "Namespace packages": [[3, "namespace-packages"]], "Hierarchical package structure": [[3, "hierarchical-package-structure"]], "Namespace package structure": [[3, "namespace-package-structure"]], "Determining whether namespaces are used": [[3, "determining-whether-namespaces-are-used"]], "Adding new namespace packages to Gentoo": [[3, "adding-new-namespace-packages-to-gentoo"]], "Legacy namespace packages in Gentoo": [[3, "legacy-namespace-packages-in-gentoo"]], "Advanced dependencies": [[4, "advanced-dependencies"]], "Requesting USE flags on the Python interpreter": [[4, "requesting-use-flags-on-the-python-interpreter"]], "Dependencies conditional to Python version": [[4, "dependencies-conditional-to-python-version"]], "Dependencies on CFFI and greenlet": [[4, "dependencies-on-cffi-and-greenlet"]], "Optional test suite dependencies on Rust packages": [[4, "optional-test-suite-dependencies-on-rust-packages"]], "distutils-r1 \u2014 standard Python build systems": [[5, "distutils-r1-standard-python-build-systems"]], "The PEP 517 and legacy modes": [[5, "the-pep-517-and-legacy-modes"]], "Basic use (PEP 517 mode)": [[5, "basic-use-pep-517-mode"]], "Source archives": [[5, "source-archives"]], "python-single-r1 variant": [[5, "python-single-r1-variant"]], "PEP 517 build systems": [[5, "pep-517-build-systems"]], "setuptools_scm (flit_scm, hatch-vcs, pdm-backend) and snapshots": [[5, "setuptools-scm-flit-scm-hatch-vcs-pdm-backend-and-snapshots"]], "Packages installing extensions (C, Rust\u2026)": [[5, "packages-installing-extensions-c-rust"]], "Packages using Cython": [[5, "packages-using-cython"]], "Parallel build race conditions": [[5, "parallel-build-race-conditions"]], "Sub-phase functions": [[5, "sub-phase-functions"]], "python_prepare": [[5, "python-prepare"]], "python_configure": [[5, "python-configure"]], "python_compile": [[5, "python-compile"]], "python_test": [[5, "python-test"]], "python_install": [[5, "python-install"]], "Passing arguments to setup.py": [[5, "passing-arguments-to-setup-py"]], "Calling custom setup.py commands": [[5, "calling-custom-setup-py-commands"]], "Enabling tests": [[5, "enabling-tests"]], "Building documentation via Sphinx": [[5, "building-documentation-via-sphinx"]], "Basic documentation with autodoc": [[5, "basic-documentation-with-autodoc"]], "Additional Sphinx extensions": [[5, "additional-sphinx-extensions"]], "Sphinx without autodoc or extensions": [[5, "sphinx-without-autodoc-or-extensions"]], "Packages with optional Python build system usage": [[5, "packages-with-optional-python-build-system-usage"]], "Packages with Rust extensions (using Cargo)": [[5, "packages-with-rust-extensions-using-cargo"]], "Installing packages without a PEP 517 build backend": [[5, "installing-packages-without-a-pep-517-build-backend"]], "Installing packages manually into BUILD_DIR": [[5, "installing-packages-manually-into-build-dir"]], "Installing packages manually into D": [[5, "installing-packages-manually-into-d"]], "Integrating with a non-PEP 517 build system": [[5, "integrating-with-a-non-pep-517-build-system"]], "distutils-r1 legacy concepts": [[6, "distutils-r1-legacy-concepts"]], "Different build system variations": [[6, "different-build-system-variations"]], "DISTUTILS_USE_SETUPTOOLS": [[6, "distutils-use-setuptools"]], "distutils and setuptools build systems": [[6, "distutils-and-setuptools-build-systems"]], "Setuptools\u2019 entry points": [[6, "setuptools-entry-points"]], "Other runtime uses of setuptools": [[6, "other-runtime-uses-of-setuptools"]], "pyproject.toml-based projects": [[6, "pyproject-toml-based-projects"]], "In-source vs out-of-source builds": [[6, "in-source-vs-out-of-source-builds"]], "Installing the package before testing": [[6, "installing-the-package-before-testing"]], "Choosing between Python eclasses": [[7, "choosing-between-python-eclasses"]], "Overview": [[7, "overview"]], "Build time vs runtime use": [[7, "build-time-vs-runtime-use"]], "Single-impl vs multi-impl": [[7, "single-impl-vs-multi-impl"]], "Python-first packages (distutils-r1 eclass)": [[7, "python-first-packages-distutils-r1-eclass"]], "Expert python-r1 usage": [[8, "expert-python-r1-usage"]], "Partially restricting Python implementation": [[8, "partially-restricting-python-implementation"]], "Restricting interpreters for python_setup": [[8, "restricting-interpreters-for-python-setup"]], "Disjoint build dependencies (any-r1 API)": [[8, "disjoint-build-dependencies-any-r1-api"]], "Using regular python-r1 API": [[8, "using-regular-python-r1-api"]], "Using any-r1 API with python-r1": [[8, "using-any-r1-api-with-python-r1"]], "Different sets of build-time dependencies": [[8, "different-sets-of-build-time-dependencies"]], "Using any-r1 API with distutils-r1": [[8, "using-any-r1-api-with-distutils-r1"]], "Combining any-r1 API with implementation restrictions": [[8, "combining-any-r1-api-with-implementation-restrictions"]], "Common helper functions": [[9, "common-helper-functions"]], "Install helpers": [[9, "install-helpers"]], "Fixing shebangs on installed scripts": [[9, "fixing-shebangs-on-installed-scripts"]], "Byte-compiling Python modules": [[9, "byte-compiling-python-modules"]], "Querying the implementation information": [[9, "querying-the-implementation-information"]], "Gentoo Python Guide": [[10, "gentoo-python-guide"]], "Contents:": [[10, null]], "Indices and tables": [[10, "indices-and-tables"]], "Python interpreters": [[11, "python-interpreters"]], "Versions of Python": [[11, "versions-of-python"]], "Life cycle of a Python implementation": [[11, "life-cycle-of-a-python-implementation"]], "Stability guarantees of Python implementations": [[11, "stability-guarantees-of-python-implementations"]], "Alternative Python implementations": [[11, "alternative-python-implementations"]], "Support for multiple implementations": [[11, "support-for-multiple-implementations"]], "Backports": [[11, "backports"]], "Maintenance of Python implementations": [[12, "maintenance-of-python-implementations"]], "Notes specific to Python interpreters": [[12, "notes-specific-to-python-interpreters"]], "CPython patchsets": [[12, "cpython-patchsets"]], "PyPy": [[12, "pypy"]], "Adding a new Python implementation": [[12, "adding-a-new-python-implementation"]], "Eclass and profile changes": [[12, "eclass-and-profile-changes"], [12, "id1"]], "Porting initial packages": [[12, "porting-initial-packages"]], "Removing a Python implementation": [[12, "removing-a-python-implementation"]], "Preparation": [[12, "preparation"]], "Python build system bootstrap": [[12, "python-build-system-bootstrap"]], "Migration guides": [[13, "migration-guides"]], "Migrating from old PYTHON_USEDEP syntax in python-single-r1": [[13, "migrating-from-old-python-usedep-syntax-in-python-single-r1"]], "Migrating from EAPI 7 to EAPI 8": [[13, "migrating-from-eapi-7-to-eapi-8"]], "Migrating to PEP 517 builds": [[13, "migrating-to-pep-517-builds"]], "python-r1 \u2014 multi-impl packages": [[14, "python-r1-multi-impl-packages"]], "Manual install": [[14, "manual-install"], [21, "manual-install"]], "Pure Python autotools package": [[14, "pure-python-autotools-package"]], "Additional build-time Python use": [[14, "additional-build-time-python-use"]], "Python package maintenance": [[15, "python-package-maintenance"]], "Package name policy": [[15, "package-name-policy"]], "Support for Python 2": [[15, "support-for-python-2"]], "Which implementations to test new packages for?": [[15, "which-implementations-to-test-new-packages-for"]], "Adding new Python implementations to existing packages": [[15, "adding-new-python-implementations-to-existing-packages"]], "Which packages can be (co-)maintained by the Python project?": [[15, "which-packages-can-be-co-maintained-by-the-python-project"]], "Porting packages to a new EAPI": [[15, "porting-packages-to-a-new-eapi"]], "Monitoring new package versions": [[15, "monitoring-new-package-versions"]], "PyPI release feeds": [[15, "pypi-release-feeds"]], "Checking via pip": [[15, "checking-via-pip"]], "Repology": [[15, "repology"]], "Routine checks on installed Python packages": [[15, "routine-checks-on-installed-python-packages"]], "pip check": [[15, "pip-check"]], "pip list --outdated": [[15, "pip-list-outdated"]], "gpy-verify-deps": [[15, "gpy-verify-deps"]], "Porting tips": [[16, "porting-tips"]], "Retroactive changes": [[16, "retroactive-changes"]], "bpo43882: urlsplit now strips LF, CR and HT characters": [[16, "bpo43882-urlsplit-now-strips-lf-cr-and-ht-characters"]], "Python 3.11": [[16, "python-3-11"]], "Generator-based coroutine removal (asyncio.coroutine)": [[16, "generator-based-coroutine-removal-asyncio-coroutine"]], "inspect.getargspec() and inspect.formatargspec() removal": [[16, "inspect-getargspec-and-inspect-formatargspec-removal"]], "Python 3.10": [[16, "python-3-10"]], "configure: No package \u2018python-3.1\u2019 found": [[16, "configure-no-package-python-3-1-found"]], "distutils.sysconfig deprecation": [[16, "distutils-sysconfig-deprecation"]], "Python 3.9": [[16, "python-3-9"]], "base64.encodestring / base64.decodestring removal": [[16, "base64-encodestring-base64-decodestring-removal"]], "Python 3.8": [[16, "python-3-8"]], "python-config and pkg-config no longer list Python library by default": [[16, "python-config-and-pkg-config-no-longer-list-python-library-by-default"]], "Replacing the toml package": [[16, "replacing-the-toml-package"]], "Porting to tomllib/tomli without toml fallback": [[16, "porting-to-tomllib-tomli-without-toml-fallback"]], "Porting to tomllib/tomli with toml fallback": [[16, "porting-to-tomllib-tomli-with-toml-fallback"]], "Porting to tomli-w": [[16, "porting-to-tomli-w"]], "Preface": [[17, "preface"]], "pypi \u2014 helper eclass for PyPI archives": [[18, "pypi-helper-eclass-for-pypi-archives"]], "PyPI URLs": [[18, "pypi-urls"]], "Modern and legacy URLs": [[18, "modern-and-legacy-urls"]], "Source distribution filenames": [[18, "source-distribution-filenames"]], "Binary distribution filenames": [[18, "binary-distribution-filenames"]], "Packages with matching name and version": [[18, "packages-with-matching-name-and-version"]], "Package with a different name": [[18, "package-with-a-different-name"]], "Customizing the generated URL": [[18, "customizing-the-generated-url"]], "Fetching wheels": [[18, "fetching-wheels"]], "QA checks and warnings": [[20, "qa-checks-and-warnings"]], "Improved QA warning reporting in Portage": [[20, "improved-qa-warning-reporting-in-portage"]], "Compiled bytecode-related warnings": [[20, "compiled-bytecode-related-warnings"]], "Modules are not byte-compiled": [[20, "modules-are-not-byte-compiled"]], "Stray compiled bytecode": [[20, "stray-compiled-bytecode"]], "Stray top-level files in site-packages": [[20, "stray-top-level-files-in-site-packages"]], "Example for test packages installed by setuptools": [[20, "example-for-test-packages-installed-by-setuptools"]], "Documentation files installed by Poetry": [[20, "documentation-files-installed-by-poetry"]], "Deprecated PEP 517 backends": [[20, "deprecated-pep-517-backends"]], "flit.buildapi": [[20, "flit-buildapi"]], "poetry.masonry.api": [[20, "poetry-masonry-api"]], "setuptools.build_meta:__legacy__": [[20, "setuptools-build-meta-legacy"]], "python-single-r1 \u2014 single-impl packages": [[21, "python-single-r1-single-impl-packages"]], "A hybrid: build-time + conditional runtime": [[21, "a-hybrid-build-time-conditional-runtime"]], "Multiple USE conditions": [[21, "multiple-use-conditions"]], "Tests in Python packages": [[22, "tests-in-python-packages"]], "Why is running tests important?": [[22, "why-is-running-tests-important"]], "Using distutils_enable_tests": [[22, "using-distutils-enable-tests"]], "Basic use case": [[22, "basic-use-case"]], "Adding more test dependencies": [[22, "adding-more-test-dependencies"]], "Installing the package before running tests": [[22, "installing-the-package-before-running-tests"]], "Customizing the test phase": [[22, "customizing-the-test-phase"]], "Customizing the test phase for pytest": [[22, "customizing-the-test-phase-for-pytest"]], "Running tests with virtualx": [[22, "running-tests-with-virtualx"]], "Choosing the correct test runner": [[22, "choosing-the-correct-test-runner"]], "Undesirable test dependencies": [[22, "undesirable-test-dependencies"]], "Missing test files in PyPI packages": [[22, "missing-test-files-in-pypi-packages"]], "ImportErrors for C extensions": [[22, "importerrors-for-c-extensions"]], "Checklist for dealing with test failures": [[22, "checklist-for-dealing-with-test-failures"]], "Skipping problematic tests": [[22, "skipping-problematic-tests"]], "Tests requiring Internet access": [[22, "tests-requiring-internet-access"]], "Tests aborting (due to assertions)": [[22, "tests-aborting-due-to-assertions"]], "Installing extra dependencies in test environment (PEP 517 mode)": [[22, "installing-extra-dependencies-in-test-environment-pep-517-mode"]], "pytest recipes": [[19, "pytest-recipes"]], "Skipping tests based on markers": [[19, "skipping-tests-based-on-markers"]], "Skipping tests based on paths/names": [[19, "skipping-tests-based-on-paths-names"]], "Avoiding the dependency on pytest-runner": [[19, "avoiding-the-dependency-on-pytest-runner"]], "Using pytest-xdist to run tests in parallel": [[19, "using-pytest-xdist-to-run-tests-in-parallel"]], "Avoiding dependencies on other pytest plugins": [[19, "avoiding-dependencies-on-other-pytest-plugins"]], "Explicitly disabling automatic pytest plugins": [[19, "explicitly-disabling-automatic-pytest-plugins"]], "Expert: disabling plugin autoloading entirely": [[19, "expert-disabling-plugin-autoloading-entirely"]], "TypeError: _make_test_flaky() got an unexpected keyword argument \u2018reruns\u2019": [[19, "typeerror-make-test-flaky-got-an-unexpected-keyword-argument-reruns"]], "ImportPathMismatchError": [[19, "importpathmismatcherror"]], "fixture \u2018\u2026\u2019 not found": [[19, "fixture-not-found"]], "Warnings": [[19, "warnings"]]}, "indexentries": {}})
\ No newline at end of file diff --git a/guide/single.html b/guide/single.html index ae36a98..0f88384 100644 --- a/guide/single.html +++ b/guide/single.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>python-single-r1 — single-impl packages — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="python-r1 — multi-impl packages" href="multi.html" /> @@ -32,7 +32,7 @@ <div class="body" role="main"> <section id="python-single-r1-single-impl-packages"> -<h1>python-single-r1 — single-impl packages<a class="headerlink" href="#python-single-r1-single-impl-packages" title="Permalink to this heading">¶</a></h1> +<h1>python-single-r1 — single-impl packages<a class="headerlink" href="#python-single-r1-single-impl-packages" title="Link to this heading">¶</a></h1> <p>The <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> eclass is used to install single-impl packages. It is probably the easiest eclass to use, and it is recommended over <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> whenever multi-impl support would add unnecessary @@ -40,7 +40,7 @@ complexity. However, for packages using distutils or a similar Python build system, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass should be used instead.</p> <p>Eclass reference: <a class="reference external" href="https://devmanual.gentoo.org/eclass-reference/python-single-r1.eclass/index.html">python-single-r1.eclass(5)</a></p> <section id="basic-use-for-unconditional-python"> -<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Permalink to this heading">¶</a></h2> +<h2>Basic use for unconditional Python<a class="headerlink" href="#basic-use-for-unconditional-python" title="Link to this heading">¶</a></h2> <p>The defining feature of this eclass is that it defines a <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase. It normally calls <code class="docutils literal notranslate"><span class="pre">python_setup</span></code> function in order to determine the interpreter selected by user, and set the global @@ -76,9 +76,9 @@ like the following:</p> <p>This ebuild demonstrates the absolute minimum working code. Only the four highlighted lines are specific to Python eclasses, plus the implicitly exported <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> phase.</p> -<span class="target" id="index-0"></span><span class="target" id="index-1"></span></section> +</section> <section id="dependencies"> -<span id="index-2"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Permalink to this heading">¶</a></h2> +<span id="index-2"></span><span id="index-1"></span><span id="index-0"></span><h2>Dependencies<a class="headerlink" href="#dependencies" title="Link to this heading">¶</a></h2> <p>When depending on other Python packages, USE dependencies need to be declared in order to ensure that the dependencies would be built against the Python implementation used for the package. The exact dependency @@ -124,7 +124,7 @@ inside and outside <code class="docutils literal notranslate"><span class="pre"> inside it.</p> </section> <section id="conditional-python-use"> -<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Permalink to this heading">¶</a></h2> +<h2>Conditional Python use<a class="headerlink" href="#conditional-python-use" title="Link to this heading">¶</a></h2> <p>The examples so far assumed that Python is used unconditionally. If Python support is conditional to a USE flag, appropriate USE conditionals need to be used in metadata variables, and <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> @@ -170,7 +170,7 @@ needs to be rewritten to call the default implementation conditionally:</p> </div> </section> <section id="a-hybrid-build-time-conditional-runtime"> -<h2>A hybrid: build-time + conditional runtime<a class="headerlink" href="#a-hybrid-build-time-conditional-runtime" title="Permalink to this heading">¶</a></h2> +<h2>A hybrid: build-time + conditional runtime<a class="headerlink" href="#a-hybrid-build-time-conditional-runtime" title="Link to this heading">¶</a></h2> <p>A fairly common pattern is for Python to be required unconditionally at build time but only conditionally at runtime. This happens e.g. when the package is calling some helper scripts at build time, and optionally @@ -217,7 +217,7 @@ USE-conditional:</p> <p>Note that eclass-exported <code class="docutils literal notranslate"><span class="pre">pkg_setup</span></code> is used unconditionally here.</p> </section> <section id="multiple-use-conditions"> -<h2>Multiple USE conditions<a class="headerlink" href="#multiple-use-conditions" title="Permalink to this heading">¶</a></h2> +<h2>Multiple USE conditions<a class="headerlink" href="#multiple-use-conditions" title="Link to this heading">¶</a></h2> <p>Finally, let’s give an example of a package where Python is needed for two independent conditions. To make it more complex, one of them applies to build time (tests) while the other to runtime (bindings).</p> @@ -271,7 +271,7 @@ the one in <code class="docutils literal notranslate"><span class="pre">REQUIRED used in dependencies.</p> </section> <section id="manual-install"> -<h2>Manual install<a class="headerlink" href="#manual-install" title="Permalink to this heading">¶</a></h2> +<h2>Manual install<a class="headerlink" href="#manual-install" title="Link to this heading">¶</a></h2> <p>Some packages do not include Python files in their build systems, or do not install all of them. In this case, the necessary files can be installed via one of the installation helpers.</p> @@ -391,7 +391,7 @@ can be installed via one of the installation helpers.</p> ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | diff --git a/guide/test.html b/guide/test.html index 0090c43..8b3a162 100644 --- a/guide/test.html +++ b/guide/test.html @@ -1,16 +1,16 @@ <!DOCTYPE html> -<html lang="en"> +<html lang="en" data-content_root="./"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Tests in Python packages — Gentoo Python Guide documentation</title> - <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b3523f8e" /> + <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=4f649999" /> <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=039e1c02" /> - <script data-url_root="./" id="documentation_options" src="_static/documentation_options.js?v=b3ba4146"></script> + <script src="_static/documentation_options.js?v=5929fcd5"></script> <script src="_static/doctools.js?v=888ff710"></script> - <script src="_static/sphinx_highlight.js?v=4825356b"></script> + <script src="_static/sphinx_highlight.js?v=dc90522c"></script> <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="distutils-r1 legacy concepts" href="distutils-legacy.html" /> @@ -32,9 +32,9 @@ <div class="body" role="main"> <section id="tests-in-python-packages"> -<h1>Tests in Python packages<a class="headerlink" href="#tests-in-python-packages" title="Permalink to this heading">¶</a></h1> +<h1>Tests in Python packages<a class="headerlink" href="#tests-in-python-packages" title="Link to this heading">¶</a></h1> <section id="why-is-running-tests-important"> -<h2>Why is running tests important?<a class="headerlink" href="#why-is-running-tests-important" title="Permalink to this heading">¶</a></h2> +<h2>Why is running tests important?<a class="headerlink" href="#why-is-running-tests-important" title="Link to this heading">¶</a></h2> <p>Since Python performs only minimal build-time (or more precisely, import-time) checking of correctness, it is important to run tests of Python packages in order to catch any problems early. This is @@ -42,9 +42,9 @@ especially important for permitting others to verify support for new Python implementations.</p> </section> <section id="using-distutils-enable-tests"> -<span id="index-0"></span><h2>Using distutils_enable_tests<a class="headerlink" href="#using-distutils-enable-tests" title="Permalink to this heading">¶</a></h2> +<span id="index-0"></span><h2>Using distutils_enable_tests<a class="headerlink" href="#using-distutils-enable-tests" title="Link to this heading">¶</a></h2> <section id="basic-use-case"> -<h3>Basic use case<a class="headerlink" href="#basic-use-case" title="Permalink to this heading">¶</a></h3> +<h3>Basic use case<a class="headerlink" href="#basic-use-case" title="Link to this heading">¶</a></h3> <p>The simplest way of enabling tests is to call <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> in global scope, passing the test runner name as the first argument. This function takes care of declaring test phase, setting appropriate @@ -84,7 +84,7 @@ setting <code class="docutils literal notranslate"><span class="pre">RDEPEND</sp <p>See <a class="reference internal" href="#choosing-the-correct-test-runner">choosing the correct test runner</a> for more information.</p> </section> <section id="adding-more-test-dependencies"> -<h3>Adding more test dependencies<a class="headerlink" href="#adding-more-test-dependencies" title="Permalink to this heading">¶</a></h3> +<h3>Adding more test dependencies<a class="headerlink" href="#adding-more-test-dependencies" title="Link to this heading">¶</a></h3> <p>Additional test dependencies can be specified in <code class="docutils literal notranslate"><span class="pre">test?</span></code> conditional. The flag normally does not need to be explicitly declared, as <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> does that in the majority of cases.</p> @@ -125,7 +125,7 @@ can be rewritten as:</p> </div> </section> <section id="installing-the-package-before-running-tests"> -<h3>Installing the package before running tests<a class="headerlink" href="#installing-the-package-before-running-tests" title="Permalink to this heading">¶</a></h3> +<h3>Installing the package before running tests<a class="headerlink" href="#installing-the-package-before-running-tests" title="Link to this heading">¶</a></h3> <p>In PEP 517 mode, the eclass automatically exposes a venv-style install tree to the test phase. No explicit action in necessary.</p> <p>In the legacy mode, <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> has an optional @@ -134,7 +134,7 @@ to a temporary directory. More information can be found in the legacy section.</p> </section> <section id="customizing-the-test-phase"> -<h3>Customizing the test phase<a class="headerlink" href="#customizing-the-test-phase" title="Permalink to this heading">¶</a></h3> +<h3>Customizing the test phase<a class="headerlink" href="#customizing-the-test-phase" title="Link to this heading">¶</a></h3> <p>If additional pre-/post-test phase actions need to be performed, they can be easily injected via overriding <code class="docutils literal notranslate"><span class="pre">src_test()</span></code> and making it call <code class="docutils literal notranslate"><span class="pre">distutils-r1_src_test</span></code>:</p> @@ -222,7 +222,7 @@ of its logic.</p> so you must make sure to call it if you override <code class="docutils literal notranslate"><span class="pre">src_test</span></code>.</p> </section> <section id="customizing-the-test-phase-for-pytest"> -<span id="index-1"></span><h3>Customizing the test phase for pytest<a class="headerlink" href="#customizing-the-test-phase-for-pytest" title="Permalink to this heading">¶</a></h3> +<span id="index-1"></span><h3>Customizing the test phase for pytest<a class="headerlink" href="#customizing-the-test-phase-for-pytest" title="Link to this heading">¶</a></h3> <p>For the relatively frequent case of pytest-based packages needing additional customization, a <code class="docutils literal notranslate"><span class="pre">epytest</span></code> helper is provided. The helper runs <code class="docutils literal notranslate"><span class="pre">pytest</span></code> with a standard set of options and automatic handling @@ -239,7 +239,7 @@ python_test<span class="o">()</span><span class="w"> </span><span class="o">{</s </div> </section> <section id="running-tests-with-virtualx"> -<span id="index-2"></span><h3>Running tests with virtualx<a class="headerlink" href="#running-tests-with-virtualx" title="Permalink to this heading">¶</a></h3> +<span id="index-2"></span><h3>Running tests with virtualx<a class="headerlink" href="#running-tests-with-virtualx" title="Link to this heading">¶</a></h3> <p>Test suites requiring a display to work correctly can often be appeased usng Xvfb. If the package in question does not start Xvfb directly, <code class="docutils literal notranslate"><span class="pre">virtualx.eclass</span></code> can be used to do that. Whenever possible, it is @@ -275,7 +275,7 @@ this. In other contexts, <code class="docutils literal notranslate"><span class </section> </section> <section id="choosing-the-correct-test-runner"> -<h2>Choosing the correct test runner<a class="headerlink" href="#choosing-the-correct-test-runner" title="Permalink to this heading">¶</a></h2> +<h2>Choosing the correct test runner<a class="headerlink" href="#choosing-the-correct-test-runner" title="Link to this heading">¶</a></h2> <p>There are a few modules used to run tests in Python packages. The most common include the built-in <a class="reference external" href="https://docs.python.org/3/library/unittest.html">unittest</a> module, <a class="reference external" href="https://docs.pytest.org/en/latest/">pytest</a> and <a class="reference external" href="https://github.com/nose-devs/nose">nose</a>. There are also some rarely used test tools and domain-specific solutions, @@ -312,7 +312,7 @@ If you have some free time, convincing upstream to switch from nose to pytest is a worthwhile goal.</p> </section> <section id="undesirable-test-dependencies"> -<h2>Undesirable test dependencies<a class="headerlink" href="#undesirable-test-dependencies" title="Permalink to this heading">¶</a></h2> +<h2>Undesirable test dependencies<a class="headerlink" href="#undesirable-test-dependencies" title="Link to this heading">¶</a></h2> <p>There is a number of packages that are frequently listed as test dependencies upstream but have little to no value for Gentoo users. It is recommended to skip those test dependencies whenever possible. @@ -337,7 +337,7 @@ for the former, and an environment close enough to the latter. Do not use tox in ebuilds.</p> </section> <section id="missing-test-files-in-pypi-packages"> -<h2>Missing test files in PyPI packages<a class="headerlink" href="#missing-test-files-in-pypi-packages" title="Permalink to this heading">¶</a></h2> +<h2>Missing test files in PyPI packages<a class="headerlink" href="#missing-test-files-in-pypi-packages" title="Link to this heading">¶</a></h2> <p>One of the more common test-related problems is that PyPI packages (generated via <code class="docutils literal notranslate"><span class="pre">setup.py</span> <span class="pre">sdist</span></code>) often miss some or all test files. The latter results in no tests being run, the former in test failures @@ -351,7 +351,7 @@ tarball:</p> </div> </section> <section id="importerrors-for-c-extensions"> -<h2>ImportErrors for C extensions<a class="headerlink" href="#importerrors-for-c-extensions" title="Permalink to this heading">¶</a></h2> +<h2>ImportErrors for C extensions<a class="headerlink" href="#importerrors-for-c-extensions" title="Link to this heading">¶</a></h2> <p>Tests are often invoked in such a way that the Python packages and modules from the current directory take precedence over these found in the staging area or build directory. In fact, this is often @@ -440,7 +440,7 @@ missing its configuration (<code class="docutils literal notranslate"><span clas marks or misleading test suite problems.</p> </section> <section id="checklist-for-dealing-with-test-failures"> -<h2>Checklist for dealing with test failures<a class="headerlink" href="#checklist-for-dealing-with-test-failures" title="Permalink to this heading">¶</a></h2> +<h2>Checklist for dealing with test failures<a class="headerlink" href="#checklist-for-dealing-with-test-failures" title="Link to this heading">¶</a></h2> <p>If you see some test failures but do not have a guess as to why they would be happening, try the following for a start:</p> <ol class="arabic simple"> @@ -493,7 +493,7 @@ be skipped.</p></li> </ol> </section> <section id="skipping-problematic-tests"> -<h2>Skipping problematic tests<a class="headerlink" href="#skipping-problematic-tests" title="Permalink to this heading">¶</a></h2> +<h2>Skipping problematic tests<a class="headerlink" href="#skipping-problematic-tests" title="Link to this heading">¶</a></h2> <p>While generally it is preferable to fix tests, sometimes you will face failures that cannot be easily resolved. This especially applies to tests that are broken themselves rather than indicating real problems @@ -544,7 +544,7 @@ simply remove that file. If all tests belonging to the package are broken, you can use <code class="docutils literal notranslate"><span class="pre">RESTRICT=test</span></code> to disable testing altogether.</p> </section> <section id="tests-requiring-internet-access"> -<h2>Tests requiring Internet access<a class="headerlink" href="#tests-requiring-internet-access" title="Permalink to this heading">¶</a></h2> +<h2>Tests requiring Internet access<a class="headerlink" href="#tests-requiring-internet-access" title="Link to this heading">¶</a></h2> <p>One of more common causes of test failures are attempts to use Internet. With Portage blocking network access by default, packages performing tests against remote servers often fail.</p> @@ -584,7 +584,7 @@ distutils_enable_tests<span class="w"> </span>pytest </div> </section> <section id="tests-aborting-due-to-assertions"> -<h2>Tests aborting (due to assertions)<a class="headerlink" href="#tests-aborting-due-to-assertions" title="Permalink to this heading">¶</a></h2> +<h2>Tests aborting (due to assertions)<a class="headerlink" href="#tests-aborting-due-to-assertions" title="Link to this heading">¶</a></h2> <p>There are cases of package’s tests terminating with an unclear error message and backtrace similar to the following:</p> <div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="o">=============================</span><span class="w"> </span><span class="nb">test</span><span class="w"> </span>session<span class="w"> </span><span class="nv">starts</span><span class="w"> </span><span class="o">==============================</span> @@ -611,27 +611,27 @@ Current<span class="w"> </span>thread<span class="w"> </span>0x00007f748bc47740< an assertion. Since pytest does not print captured output when exiting due to a signal, you need to disable output capture (using <code class="docutils literal notranslate"><span class="pre">-s</span></code>) to get a more useful error, e.g.:</p> -<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ python3.7 -m pytest -s -=============================================================== test session starts =============================================================== -platform linux -- Python 3.7.8, pytest-6.0.1, py-1.9.0, pluggy-0.13.1 -rootdir: /tmp/sabyenc, configfile: pytest.ini -plugins: asyncio-0.14.0, forked-1.3.0, xdist-1.34.0, hypothesis-5.23.9, mock-3.2.0, flaky-3.7.0, timeout-1.4.2, freezegun-0.4.2 -collected 25 items - -tests/test_decoder.py .............python3.7: src/sabyenc3.c:596: decode_usenet_chunks: Assertion `PyByteArray_Check(PyList_GetItem(Py_input_list, lp))' failed. -Fatal Python error: Aborted - -Current thread 0x00007fb5db746740 (most recent call first): - File "/tmp/sabyenc/tests/testsupport.py", line 73 in sabyenc3_wrapper - File "/tmp/sabyenc/tests/test_decoder.py", line 117 in test_empty_size_pickles - File "/usr/lib/python3.7/site-packages/_pytest/python.py", line 180 in pytest_pyfunc_call - File "/usr/lib/python3.7/site-packages/pluggy/callers.py", line 187 in _multicall - File "/usr/lib/python3.7/site-packages/pluggy/manager.py", line 87 in <lambda> - [...] - File "/usr/lib/python3.7/site-packages/pytest/__main__.py", line 7 in <module> - File "/usr/lib/python3.7/runpy.py", line 85 in _run_code - File "/usr/lib/python3.7/runpy.py", line 193 in _run_module_as_main -Aborted (core dumped) +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>python3.7<span class="w"> </span>-m<span class="w"> </span>pytest<span class="w"> </span>-s +<span class="o">===============================================================</span><span class="w"> </span><span class="nb">test</span><span class="w"> </span>session<span class="w"> </span><span class="nv">starts</span><span class="w"> </span><span class="o">===============================================================</span> +platform<span class="w"> </span>linux<span class="w"> </span>--<span class="w"> </span>Python<span class="w"> </span><span class="m">3</span>.7.8,<span class="w"> </span>pytest-6.0.1,<span class="w"> </span>py-1.9.0,<span class="w"> </span>pluggy-0.13.1 +rootdir:<span class="w"> </span>/tmp/sabyenc,<span class="w"> </span>configfile:<span class="w"> </span>pytest.ini +plugins:<span class="w"> </span>asyncio-0.14.0,<span class="w"> </span>forked-1.3.0,<span class="w"> </span>xdist-1.34.0,<span class="w"> </span>hypothesis-5.23.9,<span class="w"> </span>mock-3.2.0,<span class="w"> </span>flaky-3.7.0,<span class="w"> </span>timeout-1.4.2,<span class="w"> </span>freezegun-0.4.2 +collected<span class="w"> </span><span class="m">25</span><span class="w"> </span>items + +tests/test_decoder.py<span class="w"> </span>.............python3.7:<span class="w"> </span>src/sabyenc3.c:596:<span class="w"> </span>decode_usenet_chunks:<span class="w"> </span>Assertion<span class="w"> </span><span class="sb">`</span>PyByteArray_Check<span class="o">(</span>PyList_GetItem<span class="o">(</span>Py_input_list,<span class="w"> </span>lp<span class="o">))</span><span class="err">'</span><span class="w"> </span>failed. +Fatal<span class="w"> </span>Python<span class="w"> </span>error:<span class="w"> </span>Aborted + +Current<span class="w"> </span>thread<span class="w"> </span>0x00007fb5db746740<span class="w"> </span><span class="o">(</span>most<span class="w"> </span>recent<span class="w"> </span>call<span class="w"> </span>first<span class="o">)</span>: +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/tmp/sabyenc/tests/testsupport.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">73</span><span class="w"> </span><span class="k">in</span><span class="w"> </span>sabyenc3_wrapper +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/tmp/sabyenc/tests/test_decoder.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">117</span><span class="w"> </span><span class="k">in</span><span class="w"> </span>test_empty_size_pickles +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/usr/lib/python3.7/site-packages/_pytest/python.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">180</span><span class="w"> </span><span class="k">in</span><span class="w"> </span>pytest_pyfunc_call +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/usr/lib/python3.7/site-packages/pluggy/callers.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">187</span><span class="w"> </span><span class="k">in</span><span class="w"> </span>_multicall +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/usr/lib/python3.7/site-packages/pluggy/manager.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">87</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><lambda> +<span class="w"> </span><span class="o">[</span>...<span class="o">]</span> +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/usr/lib/python3.7/site-packages/pytest/__main__.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">7</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><module> +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/usr/lib/python3.7/runpy.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">85</span><span class="w"> </span><span class="k">in</span><span class="w"> </span>_run_code +<span class="w"> </span>File<span class="w"> </span><span class="s2">"/usr/lib/python3.7/runpy.py"</span>,<span class="w"> </span>line<span class="w"> </span><span class="m">193</span><span class="w"> </span><span class="k">in</span><span class="w"> </span>_run_module_as_main +Aborted<span class="w"> </span><span class="o">(</span>core<span class="w"> </span>dumped<span class="o">)</span> </pre></div> </div> <p>Now the message clearly indicates the failed assertion.</p> @@ -647,7 +647,7 @@ $<span class="w"> </span>pytest<span class="w"> </span>-s </div> </section> <section id="installing-extra-dependencies-in-test-environment-pep-517-mode"> -<h2>Installing extra dependencies in test environment (PEP 517 mode)<a class="headerlink" href="#installing-extra-dependencies-in-test-environment-pep-517-mode" title="Permalink to this heading">¶</a></h2> +<h2>Installing extra dependencies in test environment (PEP 517 mode)<a class="headerlink" href="#installing-extra-dependencies-in-test-environment-pep-517-mode" title="Link to this heading">¶</a></h2> <p>Rarely, the test suite expects some package being installed that does not fit being packaged and installed system-wide. For example, isort’s tests use a few example plugins that are not useful to end @@ -774,7 +774,7 @@ into it for the purpose of testing. Note that <code class="docutils literal not ©2020, Michał Górny, license: CC BY 4.0. | - Powered by <a href="http://sphinx-doc.org/">Sphinx 7.1.2</a> + Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a> & <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a> | |