diff options
author | Michał Górny <mgorny@gentoo.org> | 2022-06-07 08:34:59 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2022-06-07 08:34:59 +0200 |
commit | 94640c50bae02d6569a8144c67f6eebfa33f260f (patch) | |
tree | 33b925c95e7f94a9323b63b6c15640c457dd794b /guide | |
parent | Update Guide to 4732367 (diff) | |
download | python-94640c50bae02d6569a8144c67f6eebfa33f260f.tar.gz python-94640c50bae02d6569a8144c67f6eebfa33f260f.tar.bz2 python-94640c50bae02d6569a8144c67f6eebfa33f260f.zip |
Update Guide to 73e6181
Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'guide')
-rw-r--r-- | guide/_images/eclass.svg | 72 | ||||
-rw-r--r-- | guide/_sources/distutils.rst.txt | 194 | ||||
-rw-r--r-- | guide/_sources/eclass.rst.txt | 110 | ||||
-rw-r--r-- | guide/_sources/helper.rst.txt | 8 | ||||
-rw-r--r-- | guide/_sources/test.rst.txt | 4 | ||||
-rw-r--r-- | guide/_static/_sphinx_javascript_frameworks_compat.js | 134 | ||||
-rw-r--r-- | guide/_static/jquery-3.6.0.js (renamed from guide/_static/jquery-3.5.1.js) | 227 | ||||
-rw-r--r-- | guide/distutils.html | 187 | ||||
-rw-r--r-- | guide/eclass.html | 118 | ||||
-rw-r--r-- | guide/helper.html | 7 | ||||
-rw-r--r-- | guide/index.html | 9 | ||||
-rw-r--r-- | guide/searchindex.js | 2 | ||||
-rw-r--r-- | guide/test.html | 6 |
13 files changed, 831 insertions, 247 deletions
diff --git a/guide/_images/eclass.svg b/guide/_images/eclass.svg new file mode 100644 index 0000000..6806f39 --- /dev/null +++ b/guide/_images/eclass.svg @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Generated by graphviz version 2.50.0 (20211204.2007) + --> +<!-- Pages: 1 --> +<svg width="380pt" height="188pt" + viewBox="0.00 0.00 380.00 188.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 184)"> +<polygon fill="white" stroke="transparent" points="-4,4 -4,-184 376,-184 376,4 -4,4"/> +<!-- python-utils-r1 --> +<g id="node1" class="node"> +<title>python-utils-r1</title> +<polygon fill="none" stroke="black" points="262,-180 140,-180 140,-144 262,-144 262,-180"/> +<text text-anchor="middle" x="201" y="-158.3" font-family="Times,serif" font-size="14.00" fill="grey">python-utils-r1</text> +</g> +<!-- python-any-r1 --> +<g id="node2" class="node"> +<title>python-any-r1</title> +<polygon fill="none" stroke="black" points="116,-108 0,-108 0,-72 116,-72 116,-108"/> +<text text-anchor="middle" x="58" y="-86.3" font-family="Times,serif" font-size="14.00">python-any-r1</text> +</g> +<!-- python-utils-r1->python-any-r1 --> +<g id="edge1" class="edge"> +<title>python-utils-r1->python-any-r1</title> +<path fill="none" stroke="black" d="M166.02,-143.88C146.8,-134.47 122.77,-122.71 102.26,-112.67"/> +<polygon fill="black" stroke="black" points="103.64,-109.44 93.12,-108.19 100.56,-115.73 103.64,-109.44"/> +</g> +<!-- python-single-r1 --> +<g id="node3" class="node"> +<title>python-single-r1</title> +<polygon fill="none" stroke="black" points="268,-108 134,-108 134,-72 268,-72 268,-108"/> +<text text-anchor="middle" x="201" y="-86.3" font-family="Times,serif" font-size="14.00">python-single-r1</text> +</g> +<!-- python-utils-r1->python-single-r1 --> +<g id="edge2" class="edge"> +<title>python-utils-r1->python-single-r1</title> +<path fill="none" stroke="black" d="M201,-143.7C201,-135.98 201,-126.71 201,-118.11"/> +<polygon fill="black" stroke="black" points="204.5,-118.1 201,-108.1 197.5,-118.1 204.5,-118.1"/> +</g> +<!-- python-r1 --> +<g id="node4" class="node"> +<title>python-r1</title> +<polygon fill="none" stroke="black" points="372,-108 286,-108 286,-72 372,-72 372,-108"/> +<text text-anchor="middle" x="329" y="-86.3" font-family="Times,serif" font-size="14.00">python-r1</text> +</g> +<!-- python-utils-r1->python-r1 --> +<g id="edge3" class="edge"> +<title>python-utils-r1->python-r1</title> +<path fill="none" stroke="black" d="M232.31,-143.88C249.2,-134.64 270.25,-123.13 288.38,-113.21"/> +<polygon fill="black" stroke="black" points="290.47,-116.06 297.57,-108.19 287.11,-109.92 290.47,-116.06"/> +</g> +<!-- distutils-r1 --> +<g id="node5" class="node"> +<title>distutils-r1</title> +<polygon fill="none" stroke="black" points="312.5,-36 217.5,-36 217.5,0 312.5,0 312.5,-36"/> +<text text-anchor="middle" x="265" y="-14.3" font-family="Times,serif" font-size="14.00">distutils-r1</text> +</g> +<!-- python-single-r1->distutils-r1 --> +<g id="edge4" class="edge"> +<title>python-single-r1->distutils-r1</title> +<path fill="none" stroke="black" d="M216.82,-71.7C224.57,-63.22 234.04,-52.86 242.52,-43.58"/> +<polygon fill="black" stroke="black" points="245.2,-45.85 249.36,-36.1 240.03,-41.12 245.2,-45.85"/> +</g> +<!-- python-r1->distutils-r1 --> +<g id="edge5" class="edge"> +<title>python-r1->distutils-r1</title> +<path fill="none" stroke="black" d="M313.18,-71.7C305.43,-63.22 295.96,-52.86 287.48,-43.58"/> +<polygon fill="black" stroke="black" points="289.97,-41.12 280.64,-36.1 284.8,-45.85 289.97,-41.12"/> +</g> +</g> +</svg> diff --git a/guide/_sources/distutils.rst.txt b/guide/_sources/distutils.rst.txt index 5e69bcb..51d8ca5 100644 --- a/guide/_sources/distutils.rst.txt +++ b/guide/_sources/distutils.rst.txt @@ -15,18 +15,10 @@ Eclass reference: `distutils-r1.eclass(5)`_ The PEP 517 and legacy modes ============================ -.. Warning:: - - The PEP 517 mode is still experimental and it is not guaranteed - to handle all packages correctly. When using it, please verify - that all necessary files are installed correctly. The hooks provided - by ``app-portage/iwdevtools`` can be helpful in checking for - regressions when migrating existing packages. - The ``distutils-r1`` 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 -compatibility and packages that are not PEP 517-ready. +compatibility and packages that are incompatible with the other mode. The PEP 517 mode uses backends as defined by `PEP 517`_ to build packages. It supports a greater number of Python build systems @@ -37,6 +29,9 @@ the wheel into a staging directory. The complete process is done in compile phase, and the install phase merely moves the files into the image directory. +The PEP 517 mode also features a 'no build system' mode for packages +that do not or cannot use a PEP 517-compliant build backend. + The legacy mode invokes the ``setup.py`` script directly. The build command is invoked to populate the build directory in the compile phase, then the install command is used in the install phase. Normally, this @@ -45,7 +40,8 @@ derivatives. Additionally, it supports flit and poetry through pyproject2setuppy hack. This mode relies on deprecated features. The PEP 517 mode is enabled via declaring the ``DISTUTILS_USE_PEP517`` -variable. Otherwise, the legacy mode is used. +variable. The legal values can be found in the `PEP 517 build +systems`_ section. If unset, the legacy mode is used. Basic use (PEP 517 mode) @@ -259,6 +255,7 @@ flit_scm dev-python/flit_scm flit_scm:buildapi hatchling dev-python/hatchling hatchling.build jupyter dev-python/jupyter_packaging jupyter_packaging.build_api maturin dev-util/maturin maturin +no (none) (none, see below) pbr dev-python/pbr pbr pdm dev-python/pdm-pep517 pdm.pep517.api poetry dev-python/poetry-core poetry.core.masonry.api @@ -266,11 +263,13 @@ setuptools dev-python/setuptools setuptools.build_meta setuptools.__legacy__.build_meta sip dev-python/sip sipbuild.api -standalone (none) (various) +standalone (none) (various, see below) ================== ============================ ================================ -The special value ``standalone`` is reserved for bootstrapping build -systems. It indicates that the package itself provides its own build +The eclass recognizes two special values: ``no`` and ``standalone``. +``no`` is used to enable 'no build system' mode as described +in `installing packages without a PEP 517 build backend`_. +``standalone`` indicates that the package itself provides its own build backend. Legacy packages that provide ``setup.py`` but no ``pyproject.toml`` @@ -701,7 +700,7 @@ via ``DISTUTILS_ARGS`` array:: } The options specified via ``DISTUTILS_ARGS`` are passed to all -``esetup.py`` invocations, as well as to the setuptools PEP517 backend +``esetup.py`` invocations, as well as to the setuptools PEP 517 backend (using the ``--global-option`` setting). For future compatibility, it is recommended to avoid adding command names to ``DISTUTILS_ARGS``. @@ -1415,6 +1414,173 @@ An example ebuild follows: } +Installing packages without a PEP 517 build backend +=================================================== +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 +generally means that either: + +- it uses a non-PEP 517 build system (autotools, CMake, plain Meson) + +- it does not feature a build system at all + +- its build system cannot be used as that would cause cyclic + dependencies during build backend bootstrap + +This mode is not supposed to be used for legacy use of distutils or +setuptools — these are handled via the setuptools backend. + +The use cases for this mode partially overlap with the use of other +Python eclasses, particularly python-single-r1. Using distutils-r1 +is recommended if one of the eclass features benefits the particular +ebuild, e.g. if Python modules are installed or one of the supported +test runners are used. For pure bundles of Python scripts, +python-single-r1 is preferable. + +The 'no build system' mode is enabled via setting the following value: + +.. code-block:: bash + + DISTUTILS_USE_PEP517=no + +When this mode is used, the following applies: + +- no dependencies on a build backend or PEP 517 machinery are declared + (``DISTUTILS_DEPS`` are empty) + +- the default implementations ``distutils-r1_python_compile`` + and ``distutils-r1_python_install`` are no-ops + +However, the following eclass features are still available: + +- Python interpreter dependencies, ``REQUIRED_USE`` and distutils-r1 + phase functions are used (unless disabled via ``DISTUTILS_OPTIONAL``) + +- the temporary venv is created in ``${BUILD_DIR}/install`` for test + phase to use (but the ebuild needs to install files there explicitly) + +- the contents of ``${BUILD_DIR}/install`` are merged into ``${D}`` + post ``src_install`` (if it is present, temporary venv files are + removed) + +- ``distutils_enable_sphinx`` and ``distutils_enable_tests`` + are functional + + +Installing packages manually into BUILD_DIR +------------------------------------------- +The simplest approach towards installing packages manually is to use +``python_domodule`` in ``python_compile`` sub-phase. This causes +the modules to be installed into ``${BUILD_DIR}/install`` tree, +effectively enabling them to be picked up for the test phase +and merging post ``src_install``. + +An example ebuild using a combination of GitHub archive (for tests) +and PyPI wheel (for generated .dist-info) follows: + +.. code-block:: bash + :emphasize-lines: 3,19,22 + + EAPI=7 + + DISTUTILS_USE_PEP517=no + PYTHON_COMPAT=( python3_{8..11} pypy3 ) + + inherit distutils-r1 + + SRC_URI=" + https://github.com/hukkin/tomli/archive/${PV}.tar.gz + -> ${P}.gh.tar.gz + https://files.pythonhosted.org/packages/py3/${PN::1}/${PN}/${P}-py3-none-any.whl + -> ${P}-py3-none-any.whl.zip + " + + BDEPEND=" + app-arch/unzip + " + + distutils_enable_tests unittest + + python_compile() { + python_domodule src/tomli "${WORKDIR}"/*.dist-info + } + +Note that the wheel suffix is deliberately changed in order to enable +automatic unpacking by the default ``src_unpack``. + + +Installing packages manually into D +----------------------------------- +The alternative approach is to install files in ``python_install`` +phase. This provides a greater number of helpers. However, +the installed modules will not be provided in the venv for the test +phase. + +An example ebuild follows: + +.. code-block:: bash + :emphasize-lines: 3,8,11-17 + + EAPI=7 + + DISTUTILS_USE_PEP517=no + PYTHON_COMPAT=( pypy3 python3_{8..11} ) + + inherit distutils-r1 + + distutils_enable_tests pytest + + python_install() { + python_domodule gpep517 + python_newscript - gpep517 <<-EOF + #!${EPREFIX}/usr/bin/python + import sys + from gpep517.__main__ import main + sys.exit(main()) + EOF + } + +It is also valid to combine both approaches, e.g. install Python modules +in ``python_compile``, and scripts in ``python_install``. + + +Integrating with a non-PEP 517 build system +------------------------------------------- +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: + +.. code-block:: bash + + EAPI=8 + + DISTUTILS_USE_PEP517=no + PYTHON_COMPAT=( python3_{8..10} ) + + inherit meson distutils-r1 + + python_configure() { + local emesonargs=( + -Dlint=false + ) + + meson_src_configure + } + + python_compile() { + meson_src_compile + } + + python_test() { + meson_src_test + } + + python_install() { + meson_src_install + } + + .. _distutils-r1.eclass(5): https://devmanual.gentoo.org/eclass-reference/distutils-r1.eclass/index.html .. _PEP 517: diff --git a/guide/_sources/eclass.rst.txt b/guide/_sources/eclass.rst.txt index 45dc186..5336ed9 100644 --- a/guide/_sources/eclass.rst.txt +++ b/guide/_sources/eclass.rst.txt @@ -2,10 +2,51 @@ Choosing between Python eclasses ================================ -Build-time vs runtime use +Overview +-------- +The python-r1 eclass suite features 5 eclasses in total: + +1. ``python-utils-r1.eclass`` that provides utility functions common + to all eclasses. This eclass is rarely inherited directly. + +2. ``python-any-r1.eclass`` that is suitable for packages using Python + purely at build time. + +3. ``python-single-r1.eclass`` that provides a base for simpler packages + installing Python scripts and alike. + +4. ``python-r1.eclass`` that provides a base for more complex packages, + particularly these installing Python modules. + +5. ``distutils-r1.eclass`` that provides convenient phase functions + and helpers for packages that primarily involve installing Python + files. + +.. figure:: diagrams/eclass.svg + + Inheritance graph of python-r1 suite eclasses. + +As a rule of thumb, the best eclass to use is the one that makes +the ebuild the simplest while meeting its requirements. A more detailed +process involves: + +1. Determining whether Python is used purely at build time, + or at runtime as well. In the former case, ``python-any-r1`` + is the right choice. + +2. Determining whether single-impl or multi-impl approach is more + appropriate. For the former, ``python-single-r1`` is the correct + base eclass. For the latter, ``python-r1``. + +3. Determining whether the ebuild benefits from using ``distutils-r1``. + If it does, this eclass should be use instead (potentially along + with ``DISTUTILS_SINGLE_IMPL`` to switch the underlying eclass). + + +Build time vs runtime use ========================= The first basis for choosing Python eclass is whether Python is used -merely at build-time or at runtime as well. +merely at build time or at runtime as well. A runtime use occurs if the package explicitly needs Python to be installed along with it, in order for it to function correctly. This @@ -14,13 +55,13 @@ scripts, or executables calling the Python interpreter or linking to libpython. This also applies to bash scripts or other executables that call python inline. -A build-time use occurs if the package calls the Python interpreter +A build time use occurs if the package calls the Python interpreter or any kind of aforementioned executables during package's build (or install) phases. -If the package uses Python purely at build-time, the ``python-any-r1`` +If the package uses Python purely at build time, the ``python-any-r1`` eclass is appropriate. Otherwise, ``python-single-r1``, ``python-r1`` -or their derivatives are to be used. +or ``distutils-r1`` are to be used. A specific exception to that rule is when the package is only calling external Python scripts directly (i.e. not via ``python /usr/bin/foo``). @@ -78,49 +119,36 @@ via ``PYTHON_SINGLE_TARGET``, while multi-impl uses ``PYTHON_TARGETS``. These USE flag sets can be set independently to provide greater flexibility for developers and end users. +Both single-impl and multi-impl installs are supported +by the ``distutils-r1`` eclass. -Distutils and related build systems -=================================== -The third basis for choosing an eclass is the build system used. -If the project uses one of Python-specific build systems, that is -distutils, setuptools, flit or poetry, the ``distutils-r1`` eclass -should be used instead of the other eclasses. As a rule of thumb, -this happens when either ``setup.py`` or ``pyproject.toml`` file exists -in the distribution. - -``distutils-r1`` builds on either ``python-r1`` or ``python-single-r1``, -therefore it can be used to create both multi-impl and single-impl -packages. It provides full set of default phase functions, making -writing ebuilds much easier. +Python-first packages (distutils-r1 eclass) +=========================================== +The third step in choosing the eclass for runtime use of Python +is determining whether the ebuild would benefit from ``distutils-r1``. +This eclass is especially useful for packages that primarily focus +on providing Python content. Its advantages include: -A rule of thumb -=============== -As a rule of thumb, the following checklist can be used to determine -the eclass to use: +- adding appropriate dependencies and ``REQUIRED_USE`` by default -1. If the package has ``setup.py`` or ``pyproject.toml`` file, - use ``distutils-r1``. +- a sub-phase function mechanism that makes installing Python modules + in multi-impl mode easier -2. If the package primarily installs Python modules or extensions - or has multi-impl reverse dependencies, use ``python-r1``. +- convenient support for building documentation using Sphinx + and running tests using common Python test runners -3. If the package (possibly conditionally) qualifies as using Python - at runtime, use ``python-single-r1``. +In general, ``distutils-r1`` should be preferred over the other eclasses +if: -4. If the package uses Python at build time only, use ``python-any-r1``. +- the package uses a PEP 517-compliant build system (i.e. has + a ``pyproject.toml`` file with a ``build-system`` section) +- the package uses a legacy distutils or setuptools build system + (i.e. has a ``setup.py`` file) -python-utils-r1 -=============== -Besides the aforementioned eclasses, the suite includes a common utility -eclass ``python-utils-r1``. This eclass is inherited by all other -eclasses, and it is considered to be a part of their API. Therefore, -it must not be inherited directly if any other of the eclasses -is inherited. +- the package primarily installs Python modules -The only case for direct inherit of ``python-utils-r1`` is when you -are only using some of its utility functions without inheriting -any of the remaining eclasses. However, note that the majority of those -utility functions actually rely on mechanics provided by these eclasses -and are not suitable for being used otherwise. +In general, for multi-impl packages ``distutils-r1`` is preferred +over ``python-r1`` as it usually makes the ebuilds simpler. +For single-impl packages, ``python-single-r1`` can sometimes be simpler. diff --git a/guide/_sources/helper.rst.txt b/guide/_sources/helper.rst.txt index bbd65a1..dccb27c 100644 --- a/guide/_sources/helper.rst.txt +++ b/guide/_sources/helper.rst.txt @@ -56,6 +56,12 @@ to ``python_moduleinto .``). The install path for headers (4.) cannot be adjusted. +All the helpers can be used in ``src_install`` phase, in which case +they install the files onto ``${D}``. Additionally, ``python_domodule`` +can be use in other ebuild phases, in which case it installs +into ``${BUILD_DIR}/install``. This provides improved integration +with distutils-r1 eclass. + ``python_doexe`` is generally used to install executables that reference Python but are not Python scripts. This could be e.g. a bash script that calls Python:: @@ -83,7 +89,7 @@ directory:: python_domodule images application ${MY_PN}.py \ AUTHORS CHANGES COPYING DEPENDS TODO __init__.py -It is roughly equivalent to ``dodir -r``, except that it byte-compiles +It is roughly equivalent to ``doins -r``, except that it byte-compiles all Python modules found inside it. ``python_doheader`` is used in the very rare cases when Python packages diff --git a/guide/_sources/test.rst.txt b/guide/_sources/test.rst.txt index b43c16e..f6733b9 100644 --- a/guide/_sources/test.rst.txt +++ b/guide/_sources/test.rst.txt @@ -344,8 +344,8 @@ e.g.:: $ pytest -s -Installing extra dependencies in test environment (PEP517 mode) -=============================================================== +Installing extra dependencies in test environment (PEP 517 mode) +================================================================ 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 diff --git a/guide/_static/_sphinx_javascript_frameworks_compat.js b/guide/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8549469 --- /dev/null +++ b/guide/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/guide/_static/jquery-3.5.1.js b/guide/_static/jquery-3.6.0.js index 5093733..fc6c299 100644 --- a/guide/_static/jquery-3.5.1.js +++ b/guide/_static/jquery-3.6.0.js @@ -1,15 +1,15 @@ /*! - * jQuery JavaScript Library v3.5.1 + * jQuery JavaScript Library v3.6.0 * https://jquery.com/ * * Includes Sizzle.js * https://sizzlejs.com/ * - * Copyright JS Foundation and other contributors + * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2020-05-04T22:49Z + * Date: 2021-03-02T17:08Z */ ( function( global, factory ) { @@ -76,12 +76,16 @@ var support = {}; var isFunction = function isFunction( obj ) { - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML <object> elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML <object> elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; var isWindow = function isWindow( obj ) { @@ -147,7 +151,7 @@ function toType( obj ) { var - version = "3.5.1", + version = "3.6.0", // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -401,7 +405,7 @@ jQuery.extend( { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? - [ arr ] : arr + [ arr ] : arr ); } else { push.call( ret, arr ); @@ -496,9 +500,9 @@ if ( typeof Symbol === "function" ) { // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); function isArrayLike( obj ) { @@ -518,14 +522,14 @@ function isArrayLike( obj ) { } var Sizzle = /*! - * Sizzle CSS Selector Engine v2.3.5 + * Sizzle CSS Selector Engine v2.3.6 * https://sizzlejs.com/ * * Copyright JS Foundation and other contributors * Released under the MIT license * https://js.foundation/ * - * Date: 2020-03-14 + * Date: 2021-02-16 */ ( function( window ) { var i, @@ -1108,8 +1112,8 @@ support = Sizzle.support = {}; * @returns {Boolean} True iff elem is a non-HTML XML node */ isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; // Support: IE <=8 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes @@ -3024,9 +3028,9 @@ var rneedsContext = jQuery.expr.match.needsContext; function nodeName( elem, name ) { - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); -}; +} var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -3997,8 +4001,8 @@ jQuery.extend( { resolveContexts = Array( i ), resolveValues = slice.call( arguments ), - // the master Deferred - master = jQuery.Deferred(), + // the primary Deferred + primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) { @@ -4006,30 +4010,30 @@ jQuery.extend( { resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); + primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || + if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - return master.then(); + return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } - return master.promise(); + return primary.promise(); } } ); @@ -4180,8 +4184,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } @@ -5089,10 +5093,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; @@ -5387,8 +5388,8 @@ jQuery.event = { event = jQuery.event.fix( nativeEvent ), handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event @@ -5512,12 +5513,12 @@ jQuery.event = { get: isFunction( hook ) ? function() { if ( this.originalEvent ) { - return hook( this.originalEvent ); + return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { - return this.originalEvent[ name ]; + return this.originalEvent[ name ]; } }, @@ -5656,7 +5657,13 @@ function leverageNative( el, type, expectSync ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); - return result.value; + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; } // If this is an inner synthetic event for an event with a bubbling surrogate @@ -5821,34 +5828,7 @@ jQuery.each( { targetTouches: true, toElement: true, touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } + which: true }, jQuery.event.addProp ); jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { @@ -5874,6 +5854,12 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp return true; }, + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + delegateType: delegateType }; } ); @@ -6541,6 +6527,10 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); // set in CSS while `offset*` properties report correct values. // Behavior in IE 9 is more subtle than in newer versions & it passes // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) reliableTrDimensions: function() { var table, tr, trChild, trStyle; if ( reliableTrDimensionsVal == null ) { @@ -6548,17 +6538,32 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); tr = document.createElement( "tr" ); trChild = document.createElement( "div" ); - table.style.cssText = "position:absolute;left:-11111px"; + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. tr.style.height = "1px"; trChild.style.height = "9px"; + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + documentElement .appendChild( table ) .appendChild( tr ) .appendChild( trChild ); trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; documentElement.removeChild( table ); } @@ -7022,10 +7027,10 @@ jQuery.each( [ "height", "width" ], function( _i, dimension ) { // Running getBoundingClientRect on a disconnected node // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); } }, @@ -7084,7 +7089,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) - ) + "px"; + ) + "px"; } } ); @@ -7223,7 +7228,7 @@ Tween.propHooks = { if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || + jQuery.cssHooks[ tween.prop ] || tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { @@ -7468,7 +7473,7 @@ function defaultPrefilter( elem, props, opts ) { anim.done( function() { - /* eslint-enable no-loop-func */ + /* eslint-enable no-loop-func */ // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { @@ -7588,7 +7593,7 @@ function Animation( elem, properties, options ) { tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, @@ -7761,7 +7766,8 @@ jQuery.fn.extend( { anim.stop( true ); } }; - doAnimation.finish = doAnimation; + + doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) : @@ -8401,8 +8407,8 @@ jQuery.fn.extend( { if ( this.setAttribute ) { this.setAttribute( "class", className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" + "" : + dataPriv.get( this, "__className__" ) || "" ); } } @@ -8417,7 +8423,7 @@ jQuery.fn.extend( { while ( ( elem = this[ i++ ] ) ) { if ( elem.nodeType === 1 && ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; + return true; } } @@ -8707,9 +8713,7 @@ jQuery.extend( jQuery.event, { special.bindType || type; // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); @@ -8856,7 +8860,7 @@ var rquery = ( /\?/ ); // Cross-browser xml parsing jQuery.parseXML = function( data ) { - var xml; + var xml, parserErrorElem; if ( !data || typeof data !== "string" ) { return null; } @@ -8865,12 +8869,17 @@ jQuery.parseXML = function( data ) { // IE throws on parseFromString with invalid input. try { xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } + } catch ( e ) {} - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); } return xml; }; @@ -8971,16 +8980,14 @@ jQuery.fn.extend( { // Can add propHook for "elements" to filter or add form elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { + } ).filter( function() { var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { + } ).map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { @@ -9033,7 +9040,8 @@ var // Anchor tag for parsing the document origin originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; + +originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { @@ -9414,8 +9422,8 @@ jQuery.extend( { // Context for global events is callbackContext if it is a DOM node or jQuery collection globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, + jQuery( callbackContext ) : + jQuery.event, // Deferreds deferred = jQuery.Deferred(), @@ -9727,8 +9735,10 @@ jQuery.extend( { response = ajaxHandleResponses( s, jqXHR, responses ); } - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { s.converters[ "text script" ] = function() {}; } @@ -10466,12 +10476,6 @@ jQuery.offset = { options.using.call( elem, props ); } else { - if ( typeof props.top === "number" ) { - props.top += "px"; - } - if ( typeof props.left === "number" ) { - props.left += "px"; - } curElem.css( props ); } } @@ -10640,8 +10644,11 @@ jQuery.each( [ "top", "left" ], function( _i, prop ) { // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, - function( defaultExtra, funcName ) { + jQuery.each( { + padding: "inner" + name, + content: type, + "": "outer" + name + }, function( defaultExtra, funcName ) { // Margin is only for outerHeight, outerWidth jQuery.fn[ funcName ] = function( margin, value ) { @@ -10726,7 +10733,8 @@ jQuery.fn.extend( { } } ); -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + +jQuery.each( + ( "blur focus focusin focusout resize scroll click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup contextmenu" ).split( " " ), function( _i, name ) { @@ -10737,7 +10745,8 @@ jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + this.on( name, null, data, fn ) : this.trigger( name ); }; - } ); + } +); diff --git a/guide/distutils.html b/guide/distutils.html index b951ab4..c2c7631 100644 --- a/guide/distutils.html +++ b/guide/distutils.html @@ -44,18 +44,10 @@ 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> -<div class="admonition warning"> -<p class="admonition-title">Warning</p> -<p>The PEP 517 mode is still experimental and it is not guaranteed -to handle all packages correctly. When using it, please verify -that all necessary files are installed correctly. The hooks provided -by <code class="docutils literal notranslate"><span class="pre">app-portage/iwdevtools</span></code> can be helpful in checking for -regressions when migrating existing packages.</p> -</div> <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 -compatibility and packages that are not PEP 517-ready.</p> +compatibility and packages that are incompatible with the other mode.</p> <p>The PEP 517 mode uses backends as defined by <a class="reference external" href="https://www.python.org/dev/peps/pep-0517/">PEP 517</a> to build packages. It supports a greater number of Python build systems at the cost of flexibility and performance. In the eclass @@ -64,6 +56,8 @@ archive) with the package and then an installer tool is used to install the wheel into a staging directory. The complete process is done in compile phase, and the install phase merely moves the files into the image directory.</p> +<p>The PEP 517 mode also features a ‘no build system’ mode for packages +that do not or cannot use a PEP 517-compliant build backend.</p> <p>The legacy mode invokes the <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> script directly. The build command is invoked to populate the build directory in the compile phase, then the install command is used in the install phase. Normally, this @@ -71,7 +65,8 @@ mode works only for packages using backwards-compatible distutils derivatives. Additionally, it supports flit and poetry through pyproject2setuppy hack. This mode relies on deprecated features.</p> <p>The PEP 517 mode is enabled via declaring the <code class="docutils literal notranslate"><span class="pre">DISTUTILS_USE_PEP517</span></code> -variable. Otherwise, the legacy mode is used.</p> +variable. The legal values can be found in the <a class="reference internal" href="#pep-517-build-systems">PEP 517 build +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> @@ -272,35 +267,41 @@ The eclass maintains a mapping of backend paths to the respective <td><p>dev-util/maturin</p></td> <td><p>maturin</p></td> </tr> -<tr class="row-odd"><td><p>pbr</p></td> +<tr class="row-odd"><td><p>no</p></td> +<td><p>(none)</p></td> +<td><p>(none, see below)</p></td> +</tr> +<tr class="row-even"><td><p>pbr</p></td> <td><p>dev-python/pbr</p></td> <td><p>pbr</p></td> </tr> -<tr class="row-even"><td><p>pdm</p></td> +<tr class="row-odd"><td><p>pdm</p></td> <td><p>dev-python/pdm-pep517</p></td> <td><p>pdm.pep517.api</p></td> </tr> -<tr class="row-odd"><td><p>poetry</p></td> +<tr class="row-even"><td><p>poetry</p></td> <td><p>dev-python/poetry-core</p></td> <td><p>poetry.core.masonry.api</p></td> </tr> -<tr class="row-even"><td><p>setuptools</p></td> +<tr class="row-odd"><td><p>setuptools</p></td> <td><p>dev-python/setuptools</p></td> <td><p>setuptools.build_meta setuptools.__legacy__.build_meta</p></td> </tr> -<tr class="row-odd"><td><p>sip</p></td> +<tr class="row-even"><td><p>sip</p></td> <td><p>dev-python/sip</p></td> <td><p>sipbuild.api</p></td> </tr> -<tr class="row-even"><td><p>standalone</p></td> +<tr class="row-odd"><td><p>standalone</p></td> <td><p>(none)</p></td> -<td><p>(various)</p></td> +<td><p>(various, see below)</p></td> </tr> </tbody> </table> -<p>The special value <code class="docutils literal notranslate"><span class="pre">standalone</span></code> is reserved for bootstrapping build -systems. It indicates that the package itself provides its own build +<p>The eclass recognizes two special values: <code class="docutils literal notranslate"><span class="pre">no</span></code> and <code class="docutils literal notranslate"><span class="pre">standalone</span></code>. +<code class="docutils literal notranslate"><span class="pre">no</span></code> is used to enable ‘no build system’ mode as described +in <a class="reference internal" href="#installing-packages-without-a-pep-517-build-backend">installing packages without a PEP 517 build backend</a>. +<code class="docutils literal notranslate"><span class="pre">standalone</span></code> indicates that the package itself provides its own build backend.</p> <p>Legacy packages that provide <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> but no <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> (or do not define a backend inside it) should be installed via @@ -654,7 +655,7 @@ via <code class="docutils literal notranslate"><span class="pre">DISTUTILS_ARGS< </pre></div> </div> <p>The options specified via <code class="docutils literal notranslate"><span class="pre">DISTUTILS_ARGS</span></code> are passed to all -<code class="docutils literal notranslate"><span class="pre">esetup.py</span></code> invocations, as well as to the setuptools PEP517 backend +<code class="docutils literal notranslate"><span class="pre">esetup.py</span></code> invocations, as well as to the setuptools PEP 517 backend (using the <code class="docutils literal notranslate"><span class="pre">--global-option</span></code> setting). For future compatibility, it is recommended to avoid adding command names to <code class="docutils literal notranslate"><span class="pre">DISTUTILS_ARGS</span></code>.</p> <p>The recommended way to pass command options is to use the <code class="docutils literal notranslate"><span class="pre">setup.cfg</span></code> @@ -1287,6 +1288,151 @@ warnings. Finally, the ebuild needs to call <code class="docutils literal notra </pre></div> </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> +<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 +generally means that either:</p> +<ul class="simple"> +<li><p>it uses a non-PEP 517 build system (autotools, CMake, plain Meson)</p></li> +<li><p>it does not feature a build system at all</p></li> +<li><p>its build system cannot be used as that would cause cyclic +dependencies during build backend bootstrap</p></li> +</ul> +<p>This mode is not supposed to be used for legacy use of distutils or +setuptools — these are handled via the setuptools backend.</p> +<p>The use cases for this mode partially overlap with the use of other +Python eclasses, particularly python-single-r1. Using distutils-r1 +is recommended if one of the eclass features benefits the particular +ebuild, e.g. if Python modules are installed or one of the supported +test runners are used. For pure bundles of Python scripts, +python-single-r1 is preferable.</p> +<p>The ‘no build system’ mode is enabled via setting the following value:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nv">DISTUTILS_USE_PEP517</span><span class="o">=</span>no +</pre></div> +</div> +<p>When this mode is used, the following applies:</p> +<ul class="simple"> +<li><p>no dependencies on a build backend or PEP 517 machinery are declared +(<code class="docutils literal notranslate"><span class="pre">DISTUTILS_DEPS</span></code> are empty)</p></li> +<li><p>the default implementations <code class="docutils literal notranslate"><span class="pre">distutils-r1_python_compile</span></code> +and <code class="docutils literal notranslate"><span class="pre">distutils-r1_python_install</span></code> are no-ops</p></li> +</ul> +<p>However, the following eclass features are still available:</p> +<ul class="simple"> +<li><p>Python interpreter dependencies, <code class="docutils literal notranslate"><span class="pre">REQUIRED_USE</span></code> and distutils-r1 +phase functions are used (unless disabled via <code class="docutils literal notranslate"><span class="pre">DISTUTILS_OPTIONAL</span></code>)</p></li> +<li><p>the temporary venv is created in <code class="docutils literal notranslate"><span class="pre">${BUILD_DIR}/install</span></code> for test +phase to use (but the ebuild needs to install files there explicitly)</p></li> +<li><p>the contents of <code class="docutils literal notranslate"><span class="pre">${BUILD_DIR}/install</span></code> are merged into <code class="docutils literal notranslate"><span class="pre">${D}</span></code> +post <code class="docutils literal notranslate"><span class="pre">src_install</span></code> (if it is present, temporary venv files are +removed)</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">distutils_enable_sphinx</span></code> and <code class="docutils literal notranslate"><span class="pre">distutils_enable_tests</span></code> +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> +<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, +effectively enabling them to be picked up for the test phase +and merging post <code class="docutils literal notranslate"><span class="pre">src_install</span></code>.</p> +<p>An example ebuild using a combination of GitHub archive (for tests) +and PyPI wheel (for generated .dist-info) follows:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span> <span class="nv">EAPI</span><span class="o">=</span><span class="m">7</span> + +<span class="hll"> <span class="nv">DISTUTILS_USE_PEP517</span><span class="o">=</span>no +</span> <span class="nv">PYTHON_COMPAT</span><span class="o">=(</span> python3_<span class="o">{</span><span class="m">8</span>..11<span class="o">}</span> pypy3 <span class="o">)</span> + + inherit distutils-r1 + + <span class="nv">SRC_URI</span><span class="o">=</span><span class="s2">"</span> +<span class="s2"> https://github.com/hukkin/tomli/archive/</span><span class="si">${</span><span class="nv">PV</span><span class="si">}</span><span class="s2">.tar.gz</span> +<span class="s2"> -> </span><span class="si">${</span><span class="nv">P</span><span class="si">}</span><span class="s2">.gh.tar.gz</span> +<span class="s2"> https://files.pythonhosted.org/packages/py3/</span><span class="si">${</span><span class="nv">PN</span><span class="p">::</span><span class="nv">1</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">PN</span><span class="si">}</span><span class="s2">/</span><span class="si">${</span><span class="nv">P</span><span class="si">}</span><span class="s2">-py3-none-any.whl</span> +<span class="s2"> -> </span><span class="si">${</span><span class="nv">P</span><span class="si">}</span><span class="s2">-py3-none-any.whl.zip</span> +<span class="s2"> "</span> + + <span class="nv">BDEPEND</span><span class="o">=</span><span class="s2">"</span> +<span class="s2"> app-arch/unzip</span> +<span class="s2"> "</span> + +<span class="hll"> distutils_enable_tests unittest +</span> + python_compile<span class="o">()</span> <span class="o">{</span> +<span class="hll"> python_domodule src/tomli <span class="s2">"</span><span class="si">${</span><span class="nv">WORKDIR</span><span class="si">}</span><span class="s2">"</span>/*.dist-info +</span> <span class="o">}</span> +</pre></div> +</div> +<p>Note that the wheel suffix is deliberately changed in order to enable +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> +<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 +phase.</p> +<p>An example ebuild follows:</p> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span> <span class="nv">EAPI</span><span class="o">=</span><span class="m">7</span> + +<span class="hll"> <span class="nv">DISTUTILS_USE_PEP517</span><span class="o">=</span>no +</span> <span class="nv">PYTHON_COMPAT</span><span class="o">=(</span> pypy3 python3_<span class="o">{</span><span class="m">8</span>..11<span class="o">}</span> <span class="o">)</span> + + inherit distutils-r1 + +<span class="hll"> distutils_enable_tests pytest +</span> + python_install<span class="o">()</span> <span class="o">{</span> +<span class="hll"> python_domodule gpep517 +</span><span class="hll"> python_newscript - gpep517 <span class="s"><<-EOF</span> +</span><span class="hll"><span class="s"> #!${EPREFIX}/usr/bin/python</span> +</span><span class="hll"><span class="s"> import sys</span> +</span><span class="hll"><span class="s"> from gpep517.__main__ import main</span> +</span><span class="hll"><span class="s"> sys.exit(main())</span> +</span><span class="hll"><span class="s"> EOF</span> +</span> <span class="o">}</span> +</pre></div> +</div> +<p>It is also valid to combine both approaches, e.g. install Python modules +in <code class="docutils literal notranslate"><span class="pre">python_compile</span></code>, and scripts in <code class="docutils literal notranslate"><span class="pre">python_install</span></code>.</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> +<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> +<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nv">EAPI</span><span class="o">=</span><span class="m">8</span> + +<span class="nv">DISTUTILS_USE_PEP517</span><span class="o">=</span>no +<span class="nv">PYTHON_COMPAT</span><span class="o">=(</span> python3_<span class="o">{</span><span class="m">8</span>..10<span class="o">}</span> <span class="o">)</span> + +inherit meson distutils-r1 + +python_configure<span class="o">()</span> <span class="o">{</span> + <span class="nb">local</span> <span class="nv">emesonargs</span><span class="o">=(</span> + -Dlint<span class="o">=</span><span class="nb">false</span> + <span class="o">)</span> + + meson_src_configure +<span class="o">}</span> + +python_compile<span class="o">()</span> <span class="o">{</span> + meson_src_compile +<span class="o">}</span> + +python_test<span class="o">()</span> <span class="o">{</span> + meson_src_test +<span class="o">}</span> + +python_install<span class="o">()</span> <span class="o">{</span> + meson_src_install +<span class="o">}</span> +</pre></div> +</div> +</section> +</section> </section> @@ -1334,6 +1480,7 @@ warnings. Finally, the ebuild needs to call <code class="docutils literal notra <li class="toctree-l2"><a class="reference internal" href="#building-documentation-via-sphinx">Building documentation via Sphinx</a></li> <li class="toctree-l2"><a class="reference internal" href="#packages-with-optional-python-build-system-usage">Packages with optional Python build system usage</a></li> <li class="toctree-l2"><a class="reference internal" href="#packages-with-rust-extensions-using-cargo">Packages with Rust extensions (using Cargo)</a></li> +<li class="toctree-l2"><a class="reference internal" href="#installing-packages-without-a-pep-517-build-backend">Installing packages without a PEP 517 build backend</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="distutils-legacy.html">distutils-r1 legacy concepts</a></li> diff --git a/guide/eclass.html b/guide/eclass.html index ceb6066..922c1c2 100644 --- a/guide/eclass.html +++ b/guide/eclass.html @@ -36,22 +36,57 @@ <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> +<section id="overview"> +<h2>Overview<a class="headerlink" href="#overview" title="Permalink 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 +to all eclasses. This eclass is rarely inherited directly.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">python-any-r1.eclass</span></code> that is suitable for packages using Python +purely at build time.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">python-single-r1.eclass</span></code> that provides a base for simpler packages +installing Python scripts and alike.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">python-r1.eclass</span></code> that provides a base for more complex packages, +particularly these installing Python modules.</p></li> +<li><p><code class="docutils literal notranslate"><span class="pre">distutils-r1.eclass</span></code> that provides convenient phase functions +and helpers for packages that primarily involve installing Python +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> +</figcaption> +</figure> +<p>As a rule of thumb, the best eclass to use is the one that makes +the ebuild the simplest while meeting its requirements. A more detailed +process involves:</p> +<ol class="arabic simple"> +<li><p>Determining whether Python is used purely at build time, +or at runtime as well. In the former case, <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> +is the right choice.</p></li> +<li><p>Determining whether single-impl or multi-impl approach is more +appropriate. For the former, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> is the correct +base eclass. For the latter, <code class="docutils literal notranslate"><span class="pre">python-r1</span></code>.</p></li> +<li><p>Determining whether the ebuild benefits from using <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code>. +If it does, this eclass should be use instead (potentially along +with <code class="docutils literal notranslate"><span class="pre">DISTUTILS_SINGLE_IMPL</span></code> to switch the underlying eclass).</p></li> +</ol> <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> +<h3>Build time vs runtime use<a class="headerlink" href="#build-time-vs-runtime-use" title="Permalink to this heading">¶</a></h3> <p>The first basis for choosing Python eclass is whether Python is used -merely at build-time or at runtime as well.</p> +merely at build time or at runtime as well.</p> <p>A runtime use occurs if the package explicitly needs Python to be installed along with it, in order for it to function correctly. This generally happens if the package installs Python modules, extensions, scripts, or executables calling the Python interpreter or linking to libpython. This also applies to bash scripts or other executables that call python inline.</p> -<p>A build-time use occurs if the package calls the Python interpreter +<p>A build time use occurs if the package calls the Python interpreter or any kind of aforementioned executables during package’s build (or install) phases.</p> -<p>If the package uses Python purely at build-time, the <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> +<p>If the package uses Python purely at build time, the <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code> eclass is appropriate. Otherwise, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code>, <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> -or their derivatives are to be used.</p> +or <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> are to be used.</p> <p>A specific exception to that rule is when the package is only calling external Python scripts directly (i.e. not via <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">/usr/bin/foo</span></code>). If the called executables can be considered fully contained @@ -64,7 +99,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> +<h3>Single-impl vs multi-impl<a class="headerlink" href="#single-impl-vs-multi-impl" title="Permalink to this heading">¶</a></h3> <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> @@ -100,46 +135,35 @@ versions.</p> via <code class="docutils literal notranslate"><span class="pre">PYTHON_SINGLE_TARGET</span></code>, while multi-impl uses <code class="docutils literal notranslate"><span class="pre">PYTHON_TARGETS</span></code>. These USE flag sets can be set independently to provide greater flexibility for developers and end users.</p> +<p>Both single-impl and multi-impl installs are supported +by the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass.</p> </section> -<section id="distutils-and-related-build-systems"> -<h2>Distutils and related build systems<a class="headerlink" href="#distutils-and-related-build-systems" title="Permalink to this heading">¶</a></h2> -<p>The third basis for choosing an eclass is the build system used. -If the project uses one of Python-specific build systems, that is -distutils, setuptools, flit or poetry, the <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> eclass -should be used instead of the other eclasses. As a rule of thumb, -this happens when either <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> or <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file exists -in the distribution.</p> -<p><code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> builds on either <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>, -therefore it can be used to create both multi-impl and single-impl -packages. It provides full set of default phase functions, making -writing ebuilds much easier.</p> -</section> -<section id="a-rule-of-thumb"> -<h2>A rule of thumb<a class="headerlink" href="#a-rule-of-thumb" title="Permalink to this heading">¶</a></h2> -<p>As a rule of thumb, the following checklist can be used to determine -the eclass to use:</p> -<ol class="arabic simple"> -<li><p>If the package has <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> or <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file, -use <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code>.</p></li> -<li><p>If the package primarily installs Python modules or extensions -or has multi-impl reverse dependencies, use <code class="docutils literal notranslate"><span class="pre">python-r1</span></code>.</p></li> -<li><p>If the package (possibly conditionally) qualifies as using Python -at runtime, use <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code>.</p></li> -<li><p>If the package uses Python at build time only, use <code class="docutils literal notranslate"><span class="pre">python-any-r1</span></code>.</p></li> -</ol> +<section id="python-first-packages-distutils-r1-eclass"> +<h3>Python-first packages (distutils-r1 eclass)<a class="headerlink" href="#python-first-packages-distutils-r1-eclass" title="Permalink to this heading">¶</a></h3> +<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 +on providing Python content. Its advantages include:</p> +<ul class="simple"> +<li><p>adding appropriate dependencies and <code class="docutils literal notranslate"><span class="pre">REQUIRED_USE</span></code> by default</p></li> +<li><p>a sub-phase function mechanism that makes installing Python modules +in multi-impl mode easier</p></li> +<li><p>convenient support for building documentation using Sphinx +and running tests using common Python test runners</p></li> +</ul> +<p>In general, <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> should be preferred over the other eclasses +if:</p> +<ul class="simple"> +<li><p>the package uses a PEP 517-compliant build system (i.e. has +a <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> file with a <code class="docutils literal notranslate"><span class="pre">build-system</span></code> section)</p></li> +<li><p>the package uses a legacy distutils or setuptools build system +(i.e. has a <code class="docutils literal notranslate"><span class="pre">setup.py</span></code> file)</p></li> +<li><p>the package primarily installs Python modules</p></li> +</ul> +<p>In general, for multi-impl packages <code class="docutils literal notranslate"><span class="pre">distutils-r1</span></code> is preferred +over <code class="docutils literal notranslate"><span class="pre">python-r1</span></code> as it usually makes the ebuilds simpler. +For single-impl packages, <code class="docutils literal notranslate"><span class="pre">python-single-r1</span></code> can sometimes be simpler.</p> </section> -<section id="python-utils-r1"> -<h2>python-utils-r1<a class="headerlink" href="#python-utils-r1" title="Permalink to this heading">¶</a></h2> -<p>Besides the aforementioned eclasses, the suite includes a common utility -eclass <code class="docutils literal notranslate"><span class="pre">python-utils-r1</span></code>. This eclass is inherited by all other -eclasses, and it is considered to be a part of their API. Therefore, -it must not be inherited directly if any other of the eclasses -is inherited.</p> -<p>The only case for direct inherit of <code class="docutils literal notranslate"><span class="pre">python-utils-r1</span></code> is when you -are only using some of its utility functions without inheriting -any of the remaining eclasses. However, note that the majority of those -utility functions actually rely on mechanics provided by these eclasses -and are not suitable for being used otherwise.</p> </section> </section> @@ -165,11 +189,7 @@ and are not suitable for being used otherwise.</p> <li class="toctree-l1"><a class="reference internal" href="preface.html">Preface</a></li> <li class="toctree-l1"><a class="reference internal" href="interpreter.html">Python interpreters</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Choosing between Python eclasses</a><ul> -<li class="toctree-l2"><a class="reference internal" href="#build-time-vs-runtime-use">Build-time vs runtime use</a></li> -<li class="toctree-l2"><a class="reference internal" href="#single-impl-vs-multi-impl">Single-impl vs multi-impl</a></li> -<li class="toctree-l2"><a class="reference internal" href="#distutils-and-related-build-systems">Distutils and related build systems</a></li> -<li class="toctree-l2"><a class="reference internal" href="#a-rule-of-thumb">A rule of thumb</a></li> -<li class="toctree-l2"><a class="reference internal" href="#python-utils-r1">python-utils-r1</a></li> +<li class="toctree-l2"><a class="reference internal" href="#overview">Overview</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="basic.html">Common basics</a></li> diff --git a/guide/helper.html b/guide/helper.html index d411753..806f915 100644 --- a/guide/helper.html +++ b/guide/helper.html @@ -74,6 +74,11 @@ in an appropriate subdirectory of the site-packages directory. The default install path is top-level site-packages (equivalent to <code class="docutils literal notranslate"><span class="pre">python_moduleinto</span> <span class="pre">.</span></code>).</p> <p>The install path for headers (4.) cannot be adjusted.</p> +<p>All the helpers can be used in <code class="docutils literal notranslate"><span class="pre">src_install</span></code> phase, in which case +they install the files onto <code class="docutils literal notranslate"><span class="pre">${D}</span></code>. Additionally, <code class="docutils literal notranslate"><span class="pre">python_domodule</span></code> +can be use in other ebuild phases, in which case it installs +into <code class="docutils literal notranslate"><span class="pre">${BUILD_DIR}/install</span></code>. This provides improved integration +with distutils-r1 eclass.</p> <p><code class="docutils literal notranslate"><span class="pre">python_doexe</span></code> is generally used to install executables that reference Python but are not Python scripts. This could be e.g. a bash script that calls Python:</p> @@ -99,7 +104,7 @@ python_domodule images application ${MY_PN}.py \ AUTHORS CHANGES COPYING DEPENDS TODO __init__.py </pre></div> </div> -<p>It is roughly equivalent to <code class="docutils literal notranslate"><span class="pre">dodir</span> <span class="pre">-r</span></code>, except that it byte-compiles +<p>It is roughly equivalent to <code class="docutils literal notranslate"><span class="pre">doins</span> <span class="pre">-r</span></code>, except that it byte-compiles all Python modules found inside it.</p> <p><code class="docutils literal notranslate"><span class="pre">python_doheader</span></code> is used in the very rare cases when Python packages install additional header files that are used to compile other diff --git a/guide/index.html b/guide/index.html index 8ff8454..8ebdf5c 100644 --- a/guide/index.html +++ b/guide/index.html @@ -55,11 +55,7 @@ </ul> </li> <li class="toctree-l1"><a class="reference internal" href="eclass.html">Choosing between Python eclasses</a><ul> -<li class="toctree-l2"><a class="reference internal" href="eclass.html#build-time-vs-runtime-use">Build-time vs runtime use</a></li> -<li class="toctree-l2"><a class="reference internal" href="eclass.html#single-impl-vs-multi-impl">Single-impl vs multi-impl</a></li> -<li class="toctree-l2"><a class="reference internal" href="eclass.html#distutils-and-related-build-systems">Distutils and related build systems</a></li> -<li class="toctree-l2"><a class="reference internal" href="eclass.html#a-rule-of-thumb">A rule of thumb</a></li> -<li class="toctree-l2"><a class="reference internal" href="eclass.html#python-utils-r1">python-utils-r1</a></li> +<li class="toctree-l2"><a class="reference internal" href="eclass.html#overview">Overview</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="basic.html">Common basics</a><ul> @@ -113,6 +109,7 @@ <li class="toctree-l2"><a class="reference internal" href="distutils.html#building-documentation-via-sphinx">Building documentation via Sphinx</a></li> <li class="toctree-l2"><a class="reference internal" href="distutils.html#packages-with-optional-python-build-system-usage">Packages with optional Python build system usage</a></li> <li class="toctree-l2"><a class="reference internal" href="distutils.html#packages-with-rust-extensions-using-cargo">Packages with Rust extensions (using Cargo)</a></li> +<li class="toctree-l2"><a class="reference internal" href="distutils.html#installing-packages-without-a-pep-517-build-backend">Installing packages without a PEP 517 build backend</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="distutils-legacy.html">distutils-r1 legacy concepts</a><ul> @@ -142,7 +139,7 @@ <li class="toctree-l2"><a class="reference internal" href="test.html#skipping-problematic-tests">Skipping problematic tests</a></li> <li class="toctree-l2"><a class="reference internal" href="test.html#tests-requiring-internet-access">Tests requiring Internet access</a></li> <li class="toctree-l2"><a class="reference internal" href="test.html#tests-aborting-due-to-assertions">Tests aborting (due to assertions)</a></li> -<li class="toctree-l2"><a class="reference internal" href="test.html#installing-extra-dependencies-in-test-environment-pep517-mode">Installing extra dependencies in test environment (PEP517 mode)</a></li> +<li class="toctree-l2"><a class="reference internal" href="test.html#installing-extra-dependencies-in-test-environment-pep-517-mode">Installing extra dependencies in test environment (PEP 517 mode)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="pytest.html">pytest recipes</a><ul> diff --git a/guide/searchindex.js b/guide/searchindex.js index dbbed99..849bc33 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", "pytest", "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", "pytest.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", "pytest recipes", "python-single-r1 \u2014 single-impl packages", "Resolving test suite problems"], "terms": {"The": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20], "eclass": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 14, 17, 18, 19, 20], "enabl": [0, 4, 6, 7, 8, 10, 11, 12, 14, 15, 18], "support": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 18, 19, 20], "packag": [0, 4, 7, 8, 9, 10, 11, 13, 17, 18], "need": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "pure": [0, 5, 6, 7, 8, 10, 11, 15], "refer": [0, 1, 5, 9, 11, 13, 14, 17, 19], "5": [0, 2, 5, 8, 9, 11, 12, 14, 16, 18, 19, 20], "defin": [0, 1, 5, 6, 11, 19], "featur": [0, 4, 5, 6, 8, 11, 12, 13, 19, 20], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "pkg_setup": [0, 1, 2, 8, 19], "phase": [0, 1, 3, 6, 7, 8, 10, 13, 14, 15, 19, 20], "It": [0, 1, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 16, 18, 19, 20], "normal": [0, 3, 5, 8, 9, 14, 19], "call": [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 16, 18, 19, 20], "python_setup": [0, 1, 2, 10, 13, 14, 19], "function": [0, 1, 4, 6, 7, 8, 10, 11, 13, 14, 16, 19, 20], "order": [0, 1, 2, 4, 5, 7, 9, 12, 13, 14, 15, 19], "find": [0, 2, 3, 4, 6, 14, 18, 20], "suitabl": [0, 7, 9, 14, 17], "interpret": [0, 1, 2, 5, 6, 7, 9, 10, 13, 14, 15, 16, 18, 19], "global": [0, 1, 5, 8, 13, 14, 18, 19], "environ": [0, 5, 6, 10, 11, 13, 14, 16, 18, 19], "appropri": [0, 2, 4, 5, 6, 7, 9, 11, 12, 15, 19], "mean": [0, 1, 2, 5, 7, 8, 11, 15, 16, 18, 19, 20], "most": [0, 3, 5, 6, 9, 11, 12, 13, 14, 17, 18, 19, 20], "trivial": [0, 5, 12, 16, 19], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20], "autotool": [0, 5, 6, 10, 16, 19], "compat": [0, 1, 2, 4, 5, 6, 7, 9, 11, 12, 13, 16, 19], "system": [0, 3, 8, 9, 10, 13, 14, 15, 17, 19, 20], "could": [0, 2, 3, 5, 6, 8, 9, 16, 19], "look": [0, 1, 6, 8, 18, 19, 20], "like": [0, 2, 4, 5, 6, 8, 11, 15, 16, 19, 20], "follow": [0, 1, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 17, 18, 19, 20], "copyright": [0, 2, 4, 5, 6, 8, 14, 19], "1999": [0, 2, 4, 5, 6, 8, 14, 19], "2020": [0, 2, 4, 5, 6, 8, 13, 14, 19], "gentoo": [0, 1, 2, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20], "author": [0, 2, 4, 5, 6, 8, 9, 10, 12, 14, 19], "distribut": [0, 2, 4, 5, 6, 7, 8, 14, 16, 17, 19, 20], "under": [0, 1, 2, 3, 4, 5, 6, 8, 14, 19], "term": [0, 2, 4, 5, 6, 8, 14, 19], "gnu": [0, 2, 4, 5, 6, 8, 14, 19], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "public": [0, 2, 4, 5, 6, 8, 14, 19], "licens": [0, 2, 4, 5, 6, 8, 10, 14, 19], "v2": [0, 2, 4, 5, 6, 8, 14, 19], "eapi": [0, 2, 4, 5, 6, 8, 10, 14, 19], "7": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20], "python_compat": [0, 2, 4, 5, 6, 8, 10, 12, 14, 15, 19], "python3_": [0, 1, 2, 4, 5, 6, 8, 12, 19], "6": [0, 1, 2, 4, 5, 6, 8, 11, 12, 14, 16, 18, 19, 20], "8": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 19, 20], "inherit": [0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19], "descript": [0, 2, 4, 5, 6, 8, 14, 19], "A": [0, 1, 2, 4, 5, 6, 8, 10, 11, 15, 18], "repositori": [0, 5, 6, 12], "data": [0, 2, 5, 6, 9, 16, 19, 20], "file": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19], "describ": [0, 6, 8, 9], "media": [0, 2, 8], "player": [0, 4], "capabl": 0, "homepag": [0, 2, 4, 5, 6, 8, 14, 19], "http": [0, 2, 4, 5, 6, 8, 9, 12, 14, 16, 19, 20], "cgit": 0, "freedesktop": 0, "org": [0, 2, 4, 5, 6, 8, 9, 12, 14, 19], "info": [0, 6, 18], "src_uri": [0, 2, 4, 5, 6, 8, 14, 19, 20], "www": [0, 2, 8, 14, 19], "softwar": [0, 1, 4, 8, 12, 14, 15, 16, 20], "pn": [0, 2, 4, 5, 6, 8, 9, 14, 19, 20], "p": [0, 2, 4, 5, 6, 8, 14, 18, 19, 20], "tar": [0, 2, 4, 5, 6, 8, 12, 14, 19, 20], "gz": [0, 2, 4, 5, 6, 8, 14, 19, 20], "bsd": [0, 2, 5, 6, 8, 14, 19], "slot": [0, 2, 4, 5, 6, 8, 11, 14, 19], "0": [0, 2, 4, 5, 6, 8, 10, 12, 14, 16, 18, 19, 20], "keyword": [0, 2, 4, 5, 6, 8, 10, 14, 16, 19], "alpha": [0, 2, 4, 5, 6, 8, 12, 14, 19], "amd64": [0, 2, 4, 5, 6, 8, 12, 14, 19], "arm": [0, 2, 4, 5, 6, 8, 19], "arm64": [0, 2, 4, 5, 6, 8, 14, 19], "hppa": [0, 2, 4, 5, 6, 8, 14, 19], "ia64": [0, 2, 4, 5, 6, 8, 14, 19], "mip": [0, 2, 4, 5, 6, 8, 19], "ppc": [0, 2, 4, 5, 6, 8, 14, 19], "ppc64": [0, 2, 4, 5, 6, 8, 14, 19], "sh": [0, 2, 4, 5, 6, 8, 12, 19], "sparc": [0, 2, 4, 5, 6, 8, 14, 19], "x86": [0, 2, 4, 5, 6, 8, 12, 14, 19], "ius": [0, 2, 4, 5, 8, 14, 19], "rdepend": [0, 1, 2, 4, 5, 6, 8, 13, 14, 19], "virtual": [0, 2, 8, 14], "udev": 0, "208": 0, "bdepend": [0, 1, 2, 5, 6, 8, 12, 14, 18, 19], "python_dep": [0, 2, 4, 5, 8, 10, 14, 19], "pkgconfig": [0, 2, 8, 14], "ebuild": [0, 1, 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, 19, 20], "demonstr": [0, 19], "absolut": [0, 1, 9, 15, 19, 20], "minimum": [0, 15, 19], "work": [0, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "code": [0, 1, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20], "onli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 16, 18, 19, 20], "three": [0, 1, 3, 9, 13, 16], "highlight": [0, 16, 19], "line": [0, 3, 5, 13, 15, 16, 19, 20], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "specif": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "plu": [0, 19], "implicitli": [0, 3, 5, 8, 12, 19], "export": [0, 1, 2, 5, 19], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "other": [0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20], "declar": [0, 1, 2, 5, 6, 8, 9, 12, 14, 18, 19], "ensur": [0, 1, 5, 6, 9, 14, 19], "would": [0, 2, 11, 12, 14, 15, 16, 19, 20], "built": [0, 1, 3, 5, 6, 7, 8, 11, 12, 14, 17, 19, 20], "against": [0, 4, 7, 9, 11, 12, 14, 19, 20], "implement": [0, 1, 3, 4, 5, 6, 7, 10, 14, 17, 18, 19, 20], "specifi": [0, 1, 2, 5, 6, 7, 8, 14, 18, 19, 20], "get": [0, 5, 6, 12, 13, 18, 20], "replac": [0, 5, 6, 11, 12, 13, 16], "python_gen_any_dep": [0, 2, 8], "match": [0, 2, 4, 5, 6, 8, 9, 11, 12, 15, 19], "python_check_dep": [0, 2, 8], "accept": [0, 1, 5, 6, 9, 12, 15, 16, 18], "templat": [0, 2, 4, 5, 19], "where": [0, 3, 5, 6, 9, 12, 14, 19, 20], "liter": [0, 4, 19], "python_usedep": [0, 2, 4, 5, 8, 10, 12, 14, 18, 19], "substitut": [0, 4, 19], "requir": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "same": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 20], "least": [0, 5, 8, 15, 20], "one": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20], "test": [0, 1, 2, 3, 4, 8, 10, 12, 13, 17, 19], "whether": [0, 1, 5, 6, 7, 15, 18, 19, 20], "question": [0, 1, 5, 7, 14, 18, 20], "In": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 14, 16, 18, 19, 20], "particular": [0, 1, 4, 5, 6, 11, 20], "verifi": [0, 1, 5, 6, 8, 13, 20], "branch": [0, 16, 20], "wa": [0, 4, 5, 11, 12, 13, 18, 20], "satisfi": [0, 1, 8, 12], "were": [0, 2, 3, 5, 8, 11, 12, 13, 16], "instal": [0, 1, 3, 4, 7, 8, 10, 11, 12, 13, 15, 16, 18], "current": [0, 5, 6, 11, 12, 13, 15, 18, 20], "For": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 20], "purpos": [0, 6, 9, 12, 14, 16, 19, 20], "variabl": [0, 1, 5, 6, 8, 13, 14, 16, 18, 19], "string": [0, 1, 4, 5, 8, 14, 16, 19], "best": [0, 5, 12, 16, 17, 18], "explain": [0, 1, 6], "exampl": [0, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20], "meson": [0, 4, 7, 10], "manag": [0, 4, 5, 6, 8, 9, 20], "cinnamon": 0, "fork": [0, 11, 12, 20], "from": [0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20], "nautilu": 0, "develop": [0, 1, 7, 11, 12, 15, 17, 18, 20], "linuxmint": 0, "com": [0, 2, 4, 5, 6, 8, 12, 14, 16, 20], "project": [0, 1, 5, 7, 8, 9, 10, 14, 17, 18], "html": [0, 5, 8], "github": [0, 2, 4, 5, 6, 8, 12, 14, 17, 19, 20], "nemo": 0, "archiv": [0, 2, 4, 10, 19, 20], "pv": [0, 2, 4, 5, 8, 14, 19, 20], "gpl": [0, 2, 4, 8, 14, 19], "2": [0, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20], "lgpl": [0, 2, 5, 14, 19], "fdl": [0, 19], "1": [0, 2, 3, 4, 5, 6, 8, 9, 12, 18, 19, 20], "dev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20], "polib": 0, "pygobject": [0, 14], "3": [0, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20], "python_has_vers": [0, 2, 8], "provid": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "its": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 16, 18, 20], "both": [0, 1, 3, 5, 6, 7, 8, 12, 13, 16, 17, 18, 19, 20], "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20], "dep": [0, 5, 13, 15, 18], "true": [0, 1, 2, 5, 6, 8, 12, 13, 16, 20], "them": [0, 1, 2, 3, 5, 6, 7, 8, 9, 12, 16, 18, 19, 20], "while": [0, 2, 3, 4, 5, 6, 7, 8, 11, 12, 14, 16, 17, 18, 19, 20], "which": [0, 5, 6, 10, 11, 14, 20], "wrapper": [0, 1, 5, 6, 9, 13, 14, 20], "help": [0, 5, 17, 20], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 15, 18, 20], "singl": [0, 1, 4, 6, 9, 10, 14, 16, 18, 20], "option": [0, 1, 3, 4, 6, 8, 10, 13, 15, 18, 19, 20], "class": [0, 1, 5, 16, 18], "flag": [0, 1, 5, 7, 8, 9, 10, 11, 12, 14, 15, 19, 20], "more": [0, 1, 3, 4, 7, 9, 11, 12, 13, 16, 18, 19, 20], "similarli": [0, 1, 5], "has_vers": [0, 12], "root": [0, 5, 6, 13, 19, 20], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20], "b": 0, "d": [0, 2, 3, 5, 8, 9, 14, 18], "r": [0, 2, 5, 9, 20], "idepend": 0, "pdepend": [0, 2, 8, 12], "pass": [0, 6, 8, 9, 10, 12, 13, 16, 18, 20], "assum": [0, 1, 5, 6, 9, 13, 19], "verbos": [0, 20], "print": [0, 3, 8, 14, 18, 20], "check": [0, 5, 6, 9, 12, 13, 16, 17, 20], "perform": [0, 2, 5, 6, 11, 12, 14, 19, 20], "result": [0, 5, 6, 8, 9, 12, 16, 17, 18, 20], "return": [0, 2, 5, 8, 16, 20], "success": 0, "found": [0, 1, 3, 5, 6, 9, 10, 15, 20], "fals": [0, 2, 5, 8, 12, 16], "otherwis": [0, 5, 6, 7, 8, 9], "note": [0, 1, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "invoc": [0, 5, 18], "chain": 0, "abov": [0, 1, 6, 8, 12, 13, 15, 19, 20], "also": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 20], "written": [0, 1, 5, 7, 10, 11, 18], "import": [0, 1, 3, 4, 5, 6, 7, 11, 12, 13, 14, 16, 18, 20], "understand": 0, "correctli": [0, 1, 5, 6, 7, 9, 11, 12, 13, 16, 20], "exactli": [0, 7], "furthermor": [0, 2, 5], "combin": [0, 2, 5, 10, 11, 12, 13, 17, 18, 19, 20], "must": [0, 1, 2, 3, 5, 6, 7, 8, 11, 18, 19, 20], "onc": [0, 5, 8, 11, 12], "invalid": 0, "split": [0, 5, 13, 16], "some": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 18, 19, 20], "necessari": [0, 2, 5, 6, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "particularli": [0, 6, 11, 13, 18, 20], "common": [0, 3, 5, 6, 7, 10, 11, 12, 13, 16, 17, 18, 19, 20], "suit": [0, 1, 2, 5, 6, 7, 8, 9, 10, 12, 18], "case": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20], "wrap": [0, 5, 6, 9, 13], "programm": [0, 15], "complet": [0, 5, 16, 17], "bash": [0, 5, 7, 8, 9, 19], "scop": 0, "releas": [0, 2, 5, 8, 11, 12, 14, 15, 16], "download": [0, 2, 5, 8, 14], "xz": [0, 4, 12, 14, 19], "s390": [0, 2, 4, 5, 6, 8, 19], "linux": [0, 2, 4, 5, 6, 8, 9, 14, 16, 19, 20], "maco": [0, 4, 5, 6, 8, 19], "x64": [0, 4, 5, 6, 8, 19], "m68k": [0, 4, 5, 6, 8, 19], "mint": 0, "solari": [0, 5, 6, 19], "sparc64": [0, 6], "restrict": [0, 2, 5, 10, 18, 19, 20], "app": [0, 2, 4, 5, 8, 12, 14, 15], "shell": [0, 5, 8, 14], "4": [0, 3, 5, 8, 9, 10, 11, 12, 14, 20], "3_p30": 0, "pexpect": [0, 5], "pytest": [0, 4, 8, 10, 12, 20], "r1_pkg_setup": [0, 2, 19], "anoth": [0, 8, 9, 14, 16, 18, 20], "possibl": [0, 2, 4, 5, 6, 7, 8, 9, 12, 14, 17, 18, 20], "uncondition": [0, 1, 2, 4, 5, 6, 8, 11, 19, 20], "condition": [0, 1, 2, 5, 7, 11, 12, 14, 15, 18, 19], "simplest": [0, 2, 5, 14, 18, 20], "wai": [0, 5, 6, 9, 12, 13, 18, 20], "achiev": [0, 8, 11, 16], "block": [0, 8, 13, 20], "express": [0, 8, 13, 19], "similar": [0, 2, 5, 14, 19, 20], "cmake": [0, 6, 19], "qt": 0, "bind": [0, 2, 5, 8, 14, 19], "telepathi": 0, "bu": 0, "protocol": [0, 2, 19], "dbu": [0, 2], "hardest": 0, "differ": [0, 1, 3, 5, 9, 10, 11, 16, 18, 20], "do": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20], "error": [0, 2, 5, 9, 13, 16, 18, 20], "prone": 0, "move": [0, 5, 12], "insid": [0, 1, 3, 5, 6, 9, 12, 14, 18, 19], "python3_6": [0, 2, 4, 8, 14], "gnome2": [0, 4, 14], "gobject": 0, "librari": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 19], "access": [0, 5, 10, 11, 18], "secret": 0, "servic": [0, 20], "api": [0, 2, 7, 9, 10, 11, 13, 14, 16], "wiki": [0, 4, 8, 9, 14, 17], "gnome": [0, 4, 14], "libsecret": 0, "apach": [0, 2, 4, 5, 8], "introspect": 0, "fail": [0, 1, 2, 5, 8, 9, 11, 12, 16, 18, 20], "bug": [0, 5, 6, 12, 20], "655482": 0, "required_us": [0, 1, 2, 4, 5, 8, 13, 14, 19], "mock": [0, 4, 8, 11, 12, 18, 20], "fi": [0, 2, 5, 8, 12, 14, 19], "host": 0, "variou": [1, 5, 6, 9, 13, 16], "r1": [1, 3, 4, 9, 10, 12, 20], "try": [1, 6, 8, 9, 11, 20], "design": [1, 19], "you": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "probabl": [1, 6, 8, 13, 19], "us": [1, 9, 10, 11, 12, 13, 15, 16, 20], "than": [1, 2, 3, 6, 7, 8, 11, 12, 16, 17, 18, 20], "so": [1, 4, 5, 6, 11, 12, 18, 19, 20], "worthwhil": [1, 20], "shortli": 1, "bit": [1, 12, 17], "well": [1, 5, 7, 8, 11, 13, 15], "non": [1, 5, 6, 7, 9, 12, 14, 16, 18, 20], "obviou": [1, 20], "between": [1, 5, 8, 10, 11, 12, 13, 16], "befor": [1, 4, 8, 9, 10, 12, 14, 16, 20], "thei": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "valid": [1, 5, 8, 16, 20], "valu": [1, 5, 6, 9, 13, 18], "pythonx_i": 1, "cpython": [1, 4, 5, 9, 11, 13], "x": [1, 5, 16, 18, 20], "y": [1, 2, 16], "pypy3": [1, 4, 5, 6, 8, 11, 12, 13, 15, 18], "typic": [1, 14], "ani": [1, 2, 3, 5, 6, 7, 10, 14, 16, 18, 20], "respons": [1, 5], "explicitli": [1, 5, 7, 8, 10, 13, 20], "put": [1, 8], "correct": [1, 5, 6, 9, 10, 18, 19], "meant": [1, 13], "consist": [1, 6, 9, 13, 14, 15], "cover": [1, 5, 6, 13], "time": [1, 3, 4, 5, 6, 9, 10, 11, 12, 13, 16, 17, 18, 20], "runtim": [1, 2, 3, 5, 8, 10, 13, 14], "form": [1, 4, 12, 17], "doe": [1, 2, 3, 5, 6, 8, 9, 11, 12, 14, 15, 16, 18, 20], "appli": [1, 4, 5, 6, 7, 12, 15, 18, 19, 20], "distutil": [1, 3, 4, 10, 13, 14, 18, 19, 20], "assign": 1, "default": [1, 2, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20], "commonli": [1, 2, 3, 5, 6, 9, 11], "concept": [1, 5, 10], "state": 1, "enforc": [1, 4, 5, 7, 8, 11, 18], "whenev": [1, 5, 9, 14, 15, 18, 19], "run": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20], "two": [1, 5, 6, 8, 9, 11, 13, 16, 18, 19], "being": [1, 3, 6, 7, 8, 9, 10, 11, 12, 15, 16, 18, 20], "epython": [1, 2, 5, 8, 9, 12, 13, 18, 20], "contain": [1, 3, 4, 5, 6, 7, 12, 13], "s": [1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 14, 16, 18, 19, 20], "basenam": 1, "identifi": 1, "e": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "g": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "python3": [1, 3, 5, 9, 11, 13, 16, 18, 20], "10": [1, 4, 5, 8, 10, 12], "final": [1, 2, 4, 5, 9, 12, 13, 16, 19, 20], "path": [1, 3, 5, 6, 9, 10, 12, 13, 16, 20], "usr": [1, 2, 3, 5, 7, 8, 9, 18, 20], "bin": [1, 2, 7, 8, 9, 12, 19, 20], "full": [1, 2, 4, 5, 7, 13, 20], "should": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "embed": [1, 2, 9, 11], "program": [1, 2, 5, 6, 11, 16, 18], "shebang": [1, 10, 11, 20], "spawn": 1, "dure": [1, 6, 7, 12, 13, 18], "prefer": [1, 5, 7, 8, 11, 12, 14, 15, 18, 20], "rather": [1, 6, 8, 16, 17, 18, 20], "bypass": 1, "virtualenv": [1, 5, 6, 12, 20], "creat": [1, 3, 4, 5, 6, 7, 12, 13, 16], "pep": [1, 3, 6, 10, 12, 16, 20], "517": [1, 3, 6, 10, 12, 20], "mode": [1, 3, 6, 10, 13], "mai": [1, 3, 5, 6, 8, 12, 13, 15, 16, 18, 20], "caus": [1, 4, 5, 8, 9, 13, 18, 20], "failur": [1, 5, 10, 12, 18], "modul": [1, 3, 4, 5, 6, 7, 8, 10, 11, 14, 15, 16, 18, 20], "previou": [1, 5, 12, 13, 16], "version": [1, 2, 3, 5, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18, 20], "just": [1, 5, 6, 11, 13, 20], "resolv": [1, 5, 6, 10, 16, 18], "problem": [1, 3, 4, 5, 6, 8, 10, 12, 16, 17, 18], "pythonn": 1, "tool": [1, 2, 5, 8, 14, 15, 16, 20], "etc": 1, "via": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 20], "exec": [1, 8, 9, 11, 12, 20], "hardcod": [1, 12, 18], "either": [1, 2, 5, 7, 8, 9, 11, 13, 18, 20], "establish": [1, 5, 13, 20], "local": [1, 2, 3, 5, 8, 9, 12, 13, 14, 18, 19, 20], "scope": [1, 5, 8, 13, 18], "multi": [1, 5, 10, 13, 19], "impl": [1, 5, 10, 13], "python_foreach_impl": [1, 2, 8, 14], "sub": [1, 3, 8, 10, 20], "setup": [1, 3, 6, 7, 10, 13, 18, 20], "done": [1, 5, 6, 8, 9, 12, 14, 18, 20], "directli": [1, 5, 6, 7, 9, 11, 13, 16, 18, 20], "section": [1, 5, 6, 12, 16, 20], "focu": [1, 12, 14], "often": [1, 5, 12, 20], "extern": [1, 2, 5, 6, 7, 11, 12], "languag": [1, 2, 5, 11, 15], "usual": [1, 3, 4, 5, 11, 13, 15, 16, 18, 20], "rule": [1, 2, 6, 8, 10, 13, 14, 15], "classifi": [1, 6], "categori": 1, "present": [1, 5, 6], "script": [1, 2, 5, 6, 7, 8, 10, 11, 12, 14, 16, 19], "usabl": [1, 11], "whose": [1, 5], "therefor": [1, 2, 5, 6, 7, 8, 11, 12, 15, 18], "howev": [1, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "modern": [1, 4, 5, 6, 12, 18, 20], "base": [1, 5, 8, 10, 12, 14, 15, 19, 20], "entri": [1, 5, 18], "point": [1, 5, 11, 12, 13, 18, 20], "refus": [1, 11], "place": [1, 6, 11, 12], "special": [1, 3, 4, 5, 6, 16, 20], "subclass": 1, "extra": [1, 5, 6, 10], "still": [1, 5, 6, 8, 11, 12, 13, 16, 20], "meaningfulli": 1, "handl": [1, 4, 5, 6, 8, 13, 14], "gracefulli": [1, 4, 8], "subset": [1, 4, 5, 7, 8, 11, 12, 14, 20], "without": [1, 4, 7, 11, 13, 14, 15, 18], "There": [1, 3, 5, 8, 9, 16, 18, 20], "multipl": [1, 3, 4, 5, 7, 10, 14, 17, 18, 20], "approach": [1, 5, 8], "ad": [1, 10, 11, 13, 14, 18], "consid": [1, 2, 3, 6, 7, 8, 12, 14, 16], "light": 1, "enough": [1, 5], "inform": [1, 3, 5, 6, 10, 13, 16, 20], "messag": [1, 5, 20], "pkg_postinst": [1, 5], "util": [1, 2, 4, 5, 8, 9, 10, 12, 15, 18, 19, 20], "optfeatur": 1, "cheap": 1, "rebuild": [1, 6], "includ": [1, 2, 3, 4, 5, 6, 7, 9, 12, 15, 16, 17, 18, 19, 20], "__init__": [1, 3, 5, 9, 18, 20], "py": [1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 20], "As": [1, 3, 5, 6, 7, 8, 11, 13, 15, 16, 18, 19, 20], "thumb": [1, 6, 10, 13, 15], "belong": [1, 20], "care": [1, 2, 5, 7, 9, 15, 20], "addit": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 18, 20], "plugin": [1, 3, 5, 6, 8, 10, 20], "setuptools_scm": [1, 10], "document": [1, 2, 8, 10, 11, 14, 17, 20], "former": [1, 5, 8, 13, 16, 20], "runner": [1, 5, 10], "sinc": [1, 2, 3, 5, 6, 7, 11, 12, 13, 15, 16, 18, 20], "sometim": [1, 5, 6, 9, 11, 18, 20], "These": [1, 6, 7, 12, 13, 18, 20], "go": [1, 2, 8, 12, 17, 18], "doc": [1, 2, 5, 8, 19], "respect": [1, 3, 5, 12, 14, 18], "maximum": [1, 5], "coverag": [1, 5, 15, 18], "further": [1, 18], "guid": [1, 3, 5, 16, 17], "linter": 1, "report": [1, 5, 6, 9, 20], "actual": [1, 5, 6, 7, 8, 9, 11, 12, 18, 20], "undesir": [1, 18, 20], "again": [1, 2, 20], "conveni": [1, 4, 5, 6, 18, 20], "add": [1, 2, 5, 6, 8, 12, 15, 19, 20], "sphinx": [1, 3, 6, 8, 10, 12], "copi": [1, 3, 5, 6, 9, 11, 19], "c": [1, 2, 5, 6, 8, 9, 10, 14], "extens": [1, 6, 7, 8, 9, 10, 11, 14, 15, 16], "header": [1, 9], "numpi": [1, 2], "If": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "metadata": [1, 5, 6, 14, 19], "pyproject": [1, 5, 7, 12], "toml": [1, 5, 7, 12], "setuptool": [1, 3, 4, 7, 8, 12, 13, 15, 18], "cfg": [1, 3, 5, 6, 18], "custom": [1, 2, 6, 10, 13, 18], "read": [1, 5], "name": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 16, 20], "uncondit": [1, 2, 5, 10, 13, 14], "upstream": [1, 3, 5, 6, 7, 9, 11, 12, 14, 15, 16, 18, 20], "spuriou": 1, "strip": [1, 3, 5, 11, 18, 20], "ommit": 1, "kei": [1, 5, 16, 18, 19], "kind": [1, 3, 5, 7, 9, 11, 20], "621": 1, "older": [1, 11], "flit": [1, 6, 7, 12, 13], "poetri": [1, 6, 7, 13], "indic": [1, 5, 6, 11, 12, 13, 18, 20], "install_requir": [1, 3, 5, 6], "group": [1, 2, 6, 13, 18], "extras_requir": [1, 5], "setup_requir": [1, 5, 18], "deprec": [1, 3, 10, 11, 13], "tests_requir": [1, 5], "tox": [1, 5, 20], "ini": [1, 5, 18, 20], "noxfil": 1, "python_requir": 1, "besid": [2, 6, 7, 11, 14, 18], "few": [2, 4, 6, 12, 18, 20], "make": [2, 3, 4, 5, 6, 7, 12, 13, 15, 16, 18, 19, 20], "proper": [2, 8], "fairli": [2, 15, 19], "recent": [2, 3, 5, 12, 20], "agnost": 2, "henc": [2, 5, 14], "treat": [2, 18], "arbitrari": [2, 13], "ha": [2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18, 20], "gain": [2, 18], "quit": [2, 4, 6, 11, 12], "At": [2, 5, 12, 15, 17], "mani": [2, 5, 8, 12, 14, 15, 16, 20], "old": [2, 4, 5, 6, 8, 10, 12, 16, 20], "reason": [2, 4, 5, 6, 11, 18, 20], "suffici": [2, 5, 6, 7, 11, 14], "prior": [2, 3, 5, 6, 8, 13, 16, 20], "happen": [2, 3, 4, 6, 7, 8, 11, 12, 19, 20], "natur": [2, 5, 8], "sort": 2, "latter": [2, 5, 8, 13, 16, 18, 20], "set": [2, 4, 5, 6, 7, 10, 12, 14, 15, 16, 18, 19, 20], "much": [2, 5, 7, 20], "compon": [2, 3, 8, 11, 14, 16], "account": [2, 5, 8, 20], "detail": [2, 5, 7, 9, 11, 13, 16, 20], "choic": [2, 6, 13, 20], "chapter": [2, 8, 9], "along": [2, 5, 6, 7, 11, 13, 19, 20], "toolchain": [2, 8], "func": [2, 8], "commit": [2, 20], "6e5e8a57628095d8d0c8bbb38187afb0f3a42112": 2, "userspac": 2, "xbox": 2, "360": 2, "control": [2, 4, 5, 18], "driver": 2, "xboxdrv": 2, "gitlab": [2, 8], "io": [2, 4, 5, 8, 14, 19], "chewi": 2, "workdir": 2, "lib": [2, 3, 5, 7, 9, 16, 18, 20], "boost": [2, 7], "glib": 2, "sy": [2, 5, 8, 11, 14, 15, 16, 20], "libudev": 2, "libusb": 2, "x11": 2, "libx11": 2, "src_compil": [2, 5, 6, 8, 14], "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, 19], "dobin": [2, 9], "doman": 2, "dodoc": [2, 5], "new": [2, 5, 6, 9, 10, 11, 13, 16, 18], "readm": [2, 12], "md": 2, "todo": [2, 9, 12], "yourself": [2, 4, 20], "becaus": [2, 5, 6, 15, 18, 20], "cannot": [2, 4, 5, 9, 11, 20], "my_p": 2, "src": [2, 5, 9, 20], "_rc": 2, "rc": 2, "high": [2, 12, 15, 19], "open": [2, 16], "sourc": [2, 3, 10, 12, 14, 17, 20], "schema": 2, "free": [2, 15, 20], "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, 18, 19, 20], "arch": [2, 8, 12], "snappi": 2, "cpp": 2, "yaml": [2, 3], "70": 2, "thread": [2, 8, 18, 19, 20], "libpcr": 2, "42": 2, "zstd": 2, "snowbal": 2, "stemmer": 2, "net": [2, 8, 11, 14, 19], "libpcap": 2, "zlib": 2, "11": [2, 5, 10, 12, 20], "pymongo": 2, "cheetah3": 2, "psutil": 2, "pyyaml": 2, "type": [2, 3, 6, 13, 16], "ncurs": [2, 14], "readlin": [2, 5, 8, 14], "admin": [2, 8], "mongo": 2, "src_configur": [2, 5, 8, 9, 13, 14, 19], "scons_opt": 2, "cc": [2, 9], "getcc": [2, 9], "disabl": [2, 5, 8, 10, 12, 14, 19, 20], "warn": [2, 3, 5, 10, 16], "pcre": 2, "core": [2, 5, 20], "src_test": [2, 5, 6, 14], "buildscript": 2, "resmok": 2, "dbpathprefix": 2, "job": [2, 18], "makeopts_job": [2, 18], "die": [2, 3, 5, 8, 9, 14, 18, 20], "nostrip": [2, 8], "prefix": [2, 8, 9, 16, 20], "ed": [2, 9, 15], "everyth": [2, 13], "your": [2, 4, 5, 6, 7, 8, 11, 12, 15, 16, 18, 20], "python2_7": [2, 5, 6, 8, 13, 14, 19], "eutil": 2, "molecular": 2, "dynam": 2, "nmr": 2, "analysi": [2, 19], "relax": [2, 18], "gna": 2, "bz2": [2, 8, 19], "python_required_us": [2, 4, 5, 8, 10, 14, 19], "python_gen_cond_dep": [2, 4, 5, 8, 12, 13, 19], "numdifftool": 2, "matplotlib": [2, 5, 19], "python2": [2, 8, 9, 13, 19], "wxpython": [2, 19], "wx_gtk_ver": [2, 19], "sci": [2, 5, 19], "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, 19], "make_wrapp": [2, 9], "python_get_sitedir": [2, 3, 8, 9], "part": [2, 3, 4, 5, 7, 8, 9, 12, 13, 14, 15, 18, 20], "That": [2, 16, 20], "fortran_need": 2, "fortran": 2, "fortran_standard": 2, "90": [2, 14], "object": [2, 11, 16, 19], "chemic": 2, "kinet": 2, "thermodynam": 2, "transport": 2, "cantera": 2, "v": [2, 4, 5, 14], "pch": 2, "sundial": 2, "eigen": 2, "libfmt": 2, "cython": [2, 10, 14, 19], "2_pkg_setup": 2, "scons_var": 2, "cc_flag": 2, "cxx_flag": 2, "std": 2, "debug": 2, "getfc": 2, "fortranflag": 2, "optimize_flag": 2, "wno": 2, "inlin": [2, 7, 14], "renamed_shared_librari": 2, "use_pch": 2, "usex": [2, 5, 19], "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, 18], "python2_packag": 2, "none": [2, 5, 6, 16], "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], "deal": [2, 7, 8, 10, 15], "sens": 2, "plain": [2, 5, 6, 13], "loop": [2, 5, 18], "autom": 2, "pipelin": [2, 20], "poisson": 2, "boltzmann": 2, "electrostat": 2, "calcul": 2, "poissonboltzmann": 2, "apb": 2, "opal": 2, "openbabel": 2, "zsi": 2, "lang": [2, 8, 11, 12, 19], "swig": [2, 19], "src_prepar": [2, 3, 5, 8, 9, 14, 16, 18], "f": [2, 9], "pyc": [2, 9], "o": [2, 5], "pyo": [2, 9], "delet": [2, 3, 14], "eappli": 2, "patch": [2, 5, 6, 8, 11, 12, 20], "eapply_us": 2, "rm": [2, 3, 5, 9], "rf": 2, "python_copy_sourc": [2, 14], "python_configur": 2, "cat": [2, 5], "build_dir": [2, 3, 5, 14, 20], "build_config": 2, "eof": [2, 5], "eprefix": [2, 8, 9], "max_atom": 2, "10000": 2, "build_pdb2pka": 2, "rebuild_swig": 2, "run_in_build_dir": [2, 8, 14], "python_instal": [2, 3, 14], "cd": [2, 5, 9, 12, 20], "let": [2, 4, 8, 16, 19], "independ": [2, 5, 6, 7, 14, 19], "separ": [2, 5, 6, 7, 8, 11, 14, 18, 20], "presum": 2, "manual": [2, 5, 6, 10, 12], "wider": 2, "target": [2, 5, 8, 9, 11, 12, 15, 19], "rang": [2, 5, 12], "recommend": [2, 5, 7, 12, 13, 14, 16, 18, 19, 20], "gp": [2, 8], "daemon": [2, 8], "usb": [2, 8], "serial": [2, 5, 8], "devic": [2, 8], "map": [2, 5, 6, 8, 18], "client": [2, 8, 9, 11, 14], "gpsd": [2, 8], "mirror": [2, 4, 5, 6, 8, 14, 19, 20], "nongnu": [2, 8], "24": [2, 8, 18, 20], "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, 20], "construct": [2, 4, 8, 19], "pkg_config": 2, "shlinkflag": 2, "destdir": [2, 8, 9], "bundl": [2, 12], "simpl": [2, 5, 7, 13, 14, 17], "impli": [2, 9, 11], "python_req_us": [2, 4, 5, 6, 8, 14, 19], "individu": [2, 5, 11, 18], "applic": [2, 9, 12], "had": 2, "instead": [2, 3, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 20], "no_waf_libdir": 2, "ye": 2, "unit": 2, "framework": [2, 3, 5, 11, 17], "mrzechonek": 2, "tut": 2, "roughli": [2, 9, 12, 13], "ldap": 2, "ldb": 2, "samba": [2, 19], "ftp": [2, 19], "pub": 2, "elibc_freebsd": 2, "libbsd": 2, "popt": 2, "talloc": [2, 19], "tevent": 2, "9": [2, 5, 10, 12, 20], "31": 2, "tdb": 2, "12": [2, 5, 8, 16, 18], "nd": 2, "openldap": 2, "libxslt": 2, "waf_binari": [2, 19], "buildtool": [2, 19], "filesdir": 2, "27": [2, 8], "optional_packag": 2, "myconf": [2, 8], "rpath": 2, "modulesdir": 2, "builtin": 2, "utils_src_configur": [2, 19], "tradition": 3, "python": [3, 6, 17, 18, 20], "organ": 3, "subpackag": [3, 5], "locat": [3, 5], "parent": [3, 9], "directori": [3, 6, 9, 10, 11, 12, 13, 14, 16, 18, 20], "submodul": 3, "repres": [3, 5], "attribut": [3, 10, 16], "session": [3, 20], "addnod": 3, "site": [3, 5, 6, 9, 11, 16, 18, 20], "fine": [3, 5, 12, 16], "start": [3, 5, 6, 11, 12, 15, 16, 20], "problemat": [3, 5, 6, 10, 18], "top": [3, 5, 9, 18], "level": [3, 5, 9, 11, 20], "layout": [3, 6, 13], "wish": [3, 5, 6], "zope": 3, "share": [3, 5], "interfac": [3, 6, 11, 16], "event": [3, 18], "depend": [3, 6, 7, 9, 10, 11, 12, 13, 15, 17], "far": [3, 12, 19], "concern": 3, "entir": [3, 5, 9, 10, 12, 13, 14, 20], "doabl": 3, "real": [3, 18, 20], "we": [3, 4, 6, 8, 11, 12, 14, 15, 17], "freshli": 3, "build": [3, 9, 10, 11, 16, 20], "abl": [3, 15], "tmp": [3, 5, 9, 18, 20], "portag": [3, 5, 8, 12, 14, 15, 18, 20], "python3_8": 3, "traceback": [3, 5, 20], "last": [3, 5], "stdin": 3, "modulenotfounderror": 3, "No": [3, 5], "now": [3, 5, 6, 8, 13, 14, 20], "around": [3, 5, 6, 12, 20], "back": [3, 6, 16], "better": [3, 6, 11, 12, 13, 14], "solut": [3, 5, 16, 20], "unlik": [3, 5, 6, 11, 15], "tradit": 3, "act": 3, "proxi": [3, 14], "strictli": [3, 5, 6, 15, 20], "bound": [3, 11, 16], "permit": [3, 4, 5, 6, 11, 15], "load": [3, 7, 9, 18, 20], "search": [3, 10, 20], "method": [3, 5, 11, 13, 16, 18, 20], "420": 3, "newer": [3, 4, 5, 6, 12, 16], "pkgutil": 3, "standard": [3, 4, 6, 7, 9, 10, 11, 14, 16, 20], "discourag": [3, 6], "earlier": [3, 13], "ignor": [3, 4, 5, 8, 18, 20], "did": [3, 13, 16, 20], "within": [3, 5, 6, 12, 17, 20], "content": 3, "__path__": 3, "__import__": 3, "extend_path": 3, "__name__": 3, "pkg_resourc": [3, 6], "declare_namespac": 3, "altern": [3, 6, 8, 10, 16, 17, 20], "pth": 3, "automat": [3, 4, 5, 6, 10, 12], "inject": [3, 5, 19], "portabl": 3, "topic": [3, 17], "exact": [3, 5, 11, 19], "detect": [3, 5, 9, 20], "recogn": [3, 5, 16], "lack": [3, 9, 20], "action": [3, 5], "distinguish": [3, 5, 13], "veri": [3, 5, 6, 9, 11, 12, 17], "through": [3, 4, 5, 6, 8, 11, 16, 18, 20], "suspici": 3, "less": [3, 20], "ruamel": 3, "miss": [3, 5, 6, 9, 10, 11, 12, 13, 17, 18], "learn": 3, "about": [3, 6, 13], "collis": [3, 5, 20], "namespace_packag": 3, "per": [3, 5], "remov": [3, 4, 5, 6, 11, 12, 13, 14, 15, 18, 20], "tree": [3, 5, 13, 20], "after": [3, 5, 6, 9, 12, 13, 16], "python_compil": 3, "r1_python_compil": [3, 5], "jaraco": [3, 5, 12, 18], "equival": [3, 6, 8, 9, 13], "r1_python_instal": [3, 5], "python_install_al": [3, 5], "r1_python_install_al": [3, 5], "explicit": [3, 4, 5, 6, 19, 20], "rdep": 3, "sed": [3, 5, 8, 14, 18, 20], "i": [3, 5, 6, 7, 11, 12, 14, 16, 18, 20], "r1_src_prepar": [3, 5, 18], "histor": [3, 5, 6, 13, 16], "process": [3, 5, 12, 16, 19], "retir": 3, "major": [4, 5, 6, 7, 11, 12, 20], "avail": [4, 5, 6, 8, 12, 13, 16, 17], "sqlite3": 4, "sqlite": [4, 8], "xdg": 4, "music": 4, "lollypop": 4, "adishatz": 4, "syntax": [4, 10, 11], "lightweight": [4, 5], "password": 4, "backend": [4, 10, 12, 13], "pwman3": 4, "mysql": [4, 14], "postgr": 4, "fulli": [4, 5, 7], "solv": [4, 17], "python_gen_impl_dep": 4, "helper": [4, 5, 10, 14, 19, 20], "2_7": [4, 5], "3_": 4, "travel": 4, "spulec": 4, "freezegun": [4, 18, 20], "pypi": [4, 5, 6, 8, 10, 11, 13], "dateutil": 4, "six": [4, 5, 8], "nose": [4, 5, 20], "distutils_enable_test": [4, 13, 18, 20], "ll": [4, 14], "backport": [4, 6, 10, 12], "zero": 4, "argument": [4, 6, 10, 13, 16, 20], "output": [4, 5, 6, 9, 16, 20], "everi": [4, 5, 6, 8, 12, 14, 16], "escap": [4, 13, 19], "quot": [4, 19], "partial": [4, 9, 10, 13], "python_single_usedep": [4, 5, 13, 19], "cli": [4, 5], "black": 4, "click": 4, "fnmatch": 4, "style": [4, 5, 13, 17, 18, 20], "wildcard": 4, "stdlib": [4, 13, 16], "rememb": [4, 12], "pattern": [4, 12, 13, 19], "prevent": [4, 10, 11, 19, 20], "filenam": [4, 5], "expans": 4, "expand": 4, "zoneinfo": 4, "advantag": [4, 5, 18, 20], "adjust": [4, 9, 11, 16], "switch": [4, 9, 12, 13, 20], "list": [4, 5, 8, 12, 13, 18], "longer": [4, 5, 6, 13], "silent": 4, "updat": [4, 6, 9, 11, 12, 16], "immedi": [4, 5, 19], "becam": [4, 11], "empti": [4, 5], "importlib_metadata": [4, 5, 6], "python3_7": [4, 8], "facilit": [5, 9], "deriv": [5, 6, 7], "notabl": [5, 16], "effici": 5, "experiment": 5, "guarante": [5, 6], "pleas": [5, 6, 8, 9, 12, 15, 16, 18, 19, 20], "hook": 5, "iwdevtool": 5, "regress": 5, "migrat": [5, 10], "exist": [5, 7, 10, 11, 12], "oper": [5, 17], "backward": [5, 11, 12, 16], "readi": [5, 12, 15], "greater": [5, 7], "number": [5, 7, 12, 18], "cost": 5, "flexibl": [5, 7], "wheel": [5, 12, 18], "zip": [5, 6], "stage": [5, 12, 20], "compil": [5, 6, 10, 11, 20], "mere": [5, 7], "imag": [5, 9], "invok": [5, 18, 20], "popul": [5, 15], "addition": [5, 11, 14], "pyproject2setuppi": [5, 6, 13], "hack": [5, 6, 7, 13], "reli": [5, 6, 7, 11, 20], "distutils_use_pep517": [5, 13], "By": [5, 6, 11], "2022": [5, 13, 18], "xml": [5, 6], "feel": [5, 15], "json": 5, "martinblech": 5, "xmltodict": 5, "mit": [5, 6], "vast": [5, 12], "index": [5, 10], "sdist": [5, 20], "binari": [5, 9, 12], "vc": [5, 20], "mechan": [5, 7, 11], "over": [5, 11, 12, 18, 19, 20], "offici": 5, "instanc": [5, 13], "nonfunct": 5, "append": [5, 14], "uniqu": [5, 14], "suffix": 5, "gh": [5, 20], "request": [5, 8, 10], "distfil": [5, 16, 19], "clearli": [5, 20], "tarbal": [5, 12, 20], "textual": 5, "rich": 5, "implic": 5, "cf": [5, 12], "regener": [5, 12], "anywai": [5, 16], "nevertheless": 5, "even": [5, 8, 9, 11, 18, 20], "pregener": 5, "internet": [5, 10, 18], "nodej": 5, "underli": [5, 6], "txt": [5, 6, 12, 18], "ci": [5, 20], "travi": 5, "yml": 5, "grep": 5, "statement": 5, "indirect": 5, "relev": [5, 6, 13, 17, 18, 20], "unnecessarili": 5, "logic": [5, 6, 12], "long": [5, 11, 12], "quickli": 5, "widest": 5, "avoid": [5, 6, 8, 10, 15, 16, 17, 20], "unpredict": 5, "who": [5, 17], "especi": [5, 18, 20], "distutils_single_impl": 5, "aim": [5, 11, 15, 17], "rewritten": [5, 19], "layer": [5, 14], "pyroot": 5, "rootpi": 5, "physic": [5, 19], "root_numpi": 5, "pytabl": 5, "termcolor": 5, "determin": [5, 6, 7, 11, 19, 20], "flit_cor": [5, 12], "maintain": [5, 10, 11, 12, 18], "suggest": [5, 8, 13, 17, 18, 20], "tabl": [5, 13, 16, 18], "summar": [5, 16], "use_pep517": 5, "flit_scm": 5, "hatchl": 5, "jupyt": 5, "jupyter_packag": 5, "build_api": 5, "maturin": 5, "pbr": [5, 6], "pdm": [5, 13], "pep517": [5, 10], "build_meta": [], "__legacy__": [], "standalon": [5, 12], "reserv": 5, "bootstrap": [5, 6, 10], "itself": [5, 6, 8, 9, 12, 18], "own": [5, 12, 20], "Their": [5, 6, 9], "fix": [5, 6, 10, 11, 12, 16, 18, 20], "produc": [5, 12], "ident": 5, "artifact": 5, "reduc": 5, "footprint": 5, "isol": 5, "faster": 5, "poetry_cor": 5, "smaller": 5, "checkout": [5, 12, 20], "abil": [5, 6], "tag": [5, 12, 20], "execut": [5, 6, 7, 9, 11, 12, 13, 14, 20], "143": 5, "_install_setup_requir": 5, "attr": [5, 12], "131": 5, "dist": 5, "dict": [5, 19], "425": 5, "_distribut": 5, "self": [5, 16, 18, 20], "292": 5, "finalize_opt": 5, "717": 5, "ep": 5, "integr": [5, 8, 10, 11], "48": 5, "infer_vers": 5, "_get_vers": 5, "config": [5, 9, 12], "148": 5, "parsed_vers": 5, "_do_pars": 5, "110": 5, "rais": 5, "lookuperror": 5, "scm": 5, "unabl": [5, 20], "sure": [5, 18, 20], "re": [5, 8, 15, 20], "intact": 5, "git": [5, 12, 20], "folder": 5, "don": [5, 13], "t": [5, 7, 8, 11, 13, 20], "pip": [5, 12, 20], "proj": 5, "master": [5, 20], "egg": [5, 6, 18], "setuptools_scm_pretend_vers": 5, "static": [5, 8], "write": [5, 6, 7, 12, 17], "hybrid": [5, 10], "expos": [5, 6], "alwai": [5, 6, 8, 11, 13, 16, 17], "taken": [5, 20], "ship": 5, "issu": [5, 6, 13, 16, 18, 20], "forc": [5, 6, 8, 9, 12, 13, 18, 20], "frobnic": 5, "makefil": [5, 14], "jq": 5, "pyx": 5, "unresolv": 5, "regard": 5, "simultan": [5, 11, 17, 20], "link": [5, 7, 9, 16], "editor": 5, "broken": [5, 6, 18, 20], "cryptic": 5, "revers": [5, 7, 12, 15], "miscompil": 5, "panda": 5, "breakag": [5, 20], "dask": [5, 18], "29": 5, "_lib": 5, "hashtabl": 5, "_hashtabl": 5, "tslib": 5, "_tslib": 5, "13": [5, 18, 20], "interv": 5, "init": 5, "30": 5, "convers": [5, 6], "outofboundstimedelta": 5, "localize_pydatetim": 5, "importerror": [5, 6, 10, 11], "38": 5, "x86_64": 5, "undefin": 5, "symbol": 5, "pandas_datetime_to_datetimestruct": 5, "easiest": [5, 19], "workaround": 5, "j1": 5, "origin": [5, 9, 11, 12, 16], "overrid": [5, 9, 14, 20], "extend": [5, 11], "introduc": [5, 11], "src_": 5, "python_": [5, 8], "_all": [5, 8], "compris": 5, "behav": [5, 8], "r1_": 5, "correspond": [5, 12], "python_prepare_al": [5, 18], "each": [5, 6, 7, 11, 14], "foreach": 5, "python_configure_al": 5, "python_compile_al": [5, 8], "python_test_al": 5, "dedic": [5, 6, 14], "chang": [5, 6, 8, 9, 10, 11, 13, 14, 15, 20], "task": [5, 8, 12], "default_src_prepar": 5, "ez_setup": 5, "end": [5, 6, 7, 9, 12, 14, 18, 20], "dir": [5, 14], "extran": 5, "fixm": 5, "test_pytest_plugin": 5, "test_testcase_no_app": 5, "_": [5, 12, 20], "test_test_util": 5, "pointless": 5, "cov": [5, 18], "addopt": 5, "aiohttp": [5, 18], "r1_python_prepare_al": [5, 18], "duplic": [5, 14, 20], "moment": [5, 12, 13, 15], "modif": 5, "keep": [5, 15, 17], "why": [5, 6, 20], "console_script": [5, 6], "configur": [5, 6, 8, 13, 14, 20], "step": [5, 6, 7, 8, 14], "esetup": [5, 8], "mpi": 5, "distutils_arg": [5, 13], "resourcepath": 5, "compress": 5, "manpag": 5, "see": [5, 9, 16, 18, 20], "distutils_enable_sphinx": [5, 8], "emak": [5, 8, 9], "strongli": [5, 6, 15], "encourag": [5, 15], "testbitvector": 5, "redefin": [5, 18], "too": [5, 12, 20], "collada": 5, "einstalldoc": [5, 8, 14], "docinto": 5, "sample_cod": 5, "docompress": 5, "pf": 5, "main": [5, 9], "manipul": [5, 20], "arrai": 5, "futur": [5, 15], "pillow": 5, "build_ext": [5, 6, 20], "tiff": 5, "webp": 5, "dash": 5, "underscor": [5, 20], "boolean": 5, "disable_tiff": 5, "enable_tiff": 5, "disable_webp": 5, "enable_webp": 5, "modifi": [5, 6, 11, 20], "beforehand": 5, "econf": [5, 19], "paremet": 5, "find_packag": 5, "wrongli": [5, 16, 20], "grab": [5, 13], "intend": [5, 16, 20], "attempt": [5, 16, 20], "mistak": 5, "forbidden": 5, "exclud": 5, "paramet": [5, 8, 16], "properli": [5, 6, 13], "intermedi": 5, "minim": [5, 11, 15], "precis": [5, 8, 9], "catch": 5, "earli": [5, 7, 8, 12], "anywher": 5, "first": [5, 6, 7, 11, 12, 15, 16, 18, 20], "easi": [5, 16, 20], "whitelist": 5, "sanit": [5, 16], "mozilla": 5, "bleach": 5, "webencod": 5, "unittest": [5, 11, 20], "discoveri": [5, 18, 20], "univers": 5, "encod": [5, 16], "detector": 5, "chardet": [5, 8], "cygwin": [5, 6], "hypothesi": [5, 20], "bottom": 5, "venv": [5, 6, 13], "temporari": [5, 6], "frequent": [5, 18], "littl": [5, 6, 18], "skip": [5, 8, 10, 12, 16], "those": [5, 6, 7, 8, 9, 18, 20], "how": [5, 20], "statist": 5, "want": [5, 6, 8], "across": 5, "irrelev": [5, 20], "pep8": 5, "pycodestyl": 5, "flake8": [5, 18], "thin": [5, 6], "alreadi": [5, 9, 12, 14], "close": 5, "pre": 5, "post": [5, 6, 13], "easili": [5, 14, 18, 20], "r1_src_test": 5, "cmd": 5, "cmd2": 5, "colorama": 5, "pyperclip": 5, "wcwidth": 5, "text": [5, 8], "column": 5, "80": 5, "fact": [5, 20], "simpli": [5, 16, 17, 20], "3_6": [5, 14], "3_7": [5, 14], "3_8": 5, "tab": 5, "argpars": 5, "argcomplet": 5, "fish": 5, "tcsh": 5, "rel": [5, 18, 20], "epytest": [5, 6, 8, 12, 18, 20], "network": [5, 6, 18, 20], "marker": [5, 10], "m": [5, 18, 20], "displai": 5, "appeas": 5, "usng": 5, "xvfb": 5, "server": [5, 20], "virtx": 5, "nonfat": 5, "termin": [5, 20], "context": [5, 19], "come": [5, 13, 18], "theme": [5, 6, 8], "larg": [5, 12, 15, 18], "hard": [5, 8, 12], "To": [5, 6, 8, 9, 12, 16, 18, 19], "conf": [5, 6], "ext": 5, "distutils_use_setuptool": [5, 13], "color": 5, "stream": 5, "handler": 5, "log": 5, "coloredlog": 5, "xolox": 5, "readthedoc": 5, "en": 5, "latest": 5, "humanfriendli": 5, "expert": [5, 10, 14, 20], "uncommon": 5, "third": [5, 7, 13], "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], "been": [5, 6, 8, 11, 12, 13, 14, 16, 18], "assumpt": 5, "consum": [5, 6, 20], "distutils_opt": 5, "alter": [5, 18], "distutils_dep": 5, "dependneci": 5, "r1_src_compil": 5, "r1_src_instal": 5, "primari": [5, 18], "alongsid": [5, 6], "libfoo": 5, "r1_src_configur": 5, "setuptools_rust": 5, "ecosystem": [5, 15, 17], "bump": [5, 12, 15], "lock": 5, "Then": [5, 12], "crate": 5, "cargo_opt": 5, "url": [5, 16], "cargo_crate_uri": 5, "qa_flags_ignor": 5, "posit": 5, "cflag": [5, 9, 20], "cargo_src_unpack": 5, "inflector": 5, "alias": [5, 16], "asn1": 5, "asn1_der": 5, "_rust": 5, "src_unpack": 5, "here": [6, 8, 14, 19], "direct": [6, 7, 14], "convert": [6, 8, 13], "facil": 6, "right": 6, "fit": [6, 20], "profil": [6, 15], "pyproject2toml": 6, "misbehav": 6, "subsequ": 6, "qa": [6, 9, 17], "unset": 6, "expect": [6, 18, 20], "sidebar": 6, "bitprophet": 6, "snippet": [6, 16], "except": [6, 7, 9, 11, 12, 16], "up": [6, 9, 12, 13, 14, 17, 18, 20], "pm": 6, "cleanli": [6, 12], "condit": [6, 10, 12, 18, 20], "leav": 6, "fallback": [5, 6], "never": [6, 11, 13], "clean": [6, 12, 13], "requier": 6, "With": [6, 20], "themselv": [6, 18, 20], "entry_point": [6, 18], "dictionari": [6, 19], "our": [6, 12, 18, 20], "interest": [6, 8, 20], "gui_script": 6, "meaning": 6, "importlib": [6, 11, 20], "fall": [6, 16], "remind": 6, "distutils_strict_entry_point": 6, "trigger": [6, 18, 20], "wrong": [6, 13], "leftov": 6, "resourc": [6, 11, 12], "submit": 6, "suppli": 6, "heavi": 6, "speak": [6, 11], "known": [6, 16, 20], "limit": [6, 12, 15, 17], "address": [6, 12, 16], "definit": 6, "subdirectori": [6, 9], "interspers": 6, "closest": 6, "inplac": 6, "shift": [6, 11], "throughout": 6, "incompat": [6, 11, 16, 18, 20], "2to3": 6, "distutils_in_source_build": 6, "collect": [6, 18, 20], "pypa": 6, "riscv": [6, 8, 19], "pythonpath": [6, 20], "unless": [6, 8, 15], "distutils_install_for_test": [6, 13, 18, 20], "alik": [6, 11, 13], "preserv": [6, 11], "extrem": 6, "home": [6, 12, 13], "went": 6, "awai": [6, 7], "python_test": [6, 8, 9, 12, 18, 20], "basi": 7, "occur": [7, 18], "libpython": [7, 16], "aforement": [7, 13, 16], "foo": [7, 16], "wise": 7, "abstract": [7, 14], "regular": [5, 7, 20], "scon": [7, 8, 10], "second": [7, 13], "easier": 7, "select": [7, 8, 18, 19], "allow": [7, 20], "complex": [7, 19], "repeat": [7, 14], "model": 7, "libboost_python": 7, "python_single_target": [7, 11, 12], "checklist": [7, 10], "primarili": [7, 11], "qualifi": 7, "remain": [7, 11, 13], "power": 8, "harder": 8, "ninja": 8, "train": 8, "yet": [8, 12, 19], "opposit": [8, 11, 13], "investig": 8, "involv": [8, 13], "human": 8, "beings": 8, "socks5": 8, "ssl": 8, "certifi": 8, "2017": 8, "17": 8, "idna": 8, "urllib3": [8, 12], "26": 8, "pysock": 8, "cryptographi": 8, "pyopenssl": 8, "14": [8, 20], "httpbin": [8, 18], "hang": 8, "continu": [8, 12, 20], "python_gen_useflag": 8, "out": [8, 9, 10, 11, 12, 13, 14, 15], "toolkit": 8, "translat": 8, "format": [8, 12, 16], "subtitl": 8, "pydiff": 8, "iso": 8, "lxml": 8, "pycountri": 8, "18": 8, "levenshtein": 8, "devel": 8, "gettext": 8, "video": 8, "gaupol": 8, "riverbankcomput": 8, "sip": [5, 8], "intro": 8, "sip_api_major_nr": 8, "siplib": 8, "h": [8, 9, 19], "bison": 8, "flex": 8, "prepar": [8, 9, 19], "bindir": 8, "incdir": 8, "python_get_includedir": [8, 9, 13], "echo": 8, "distutils_all_subphase_impl": 8, "python3_5": 8, "bzip2": 8, "epydoc": 8, "eselect": 8, "elibc_glibc": 8, "sandbox": [8, 20], "kernel_linux": 8, "pax": 8, "rsync": 8, "userland_gnu": 8, "coreutil": 8, "below": 8, "sphinx_rtd_them": 8, "practic": [8, 11, 12], "big": 8, "imagin": 8, "anymor": [8, 11], "downgrad": 8, "though": [8, 12], "resembl": [8, 18], "presenc": [8, 18], "activ": [8, 17], "behavior": [8, 11, 16], "goal": [8, 12, 20], "side": [8, 11], "effect": [8, 11], "someth": [8, 9, 20], "accord": 8, "won": 8, "reject": [8, 15, 16], "unsupport": [8, 11], "python_is_python3": [8, 13], "basic": [9, 10, 20], "reus": 9, "four": [9, 13, 19], "python_doex": 9, "python_newex": 9, "python_doscript": [9, 14, 19], "python_newscript": 9, "recurs": [9, 15, 18], "python_dohead": 9, "python_scriptinto": 9, "affect": [9, 14], "symlink": 9, "cropgtk": 9, "sbin": 9, "pynslcd": 9, "anyth": 9, "land": 9, "my_pn": 9, "dodir": 9, "rare": [9, 18, 20], "libimag": 9, "env": [9, 12], "python_fix_shebang": 9, "sphinxtrain": 9, "openvpn": 9, "vulnkei": 9, "insinto": 9, "doin": 9, "kitti": 9, "speed": 9, "nowadai": [9, 12, 13], "pypy2": [9, 11, 12], "_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, "mycmakearg": [9, 13, 19], "dpython_dest": 9, "dpython_execut": 9, "dpython_include_dir": 9, "dpython_librari": 9, "cmake_src_configur": [9, 19], "pyinc": 9, "pylib": 9, "micha\u0142": 10, "g\u00f3rny": 10, "creativ": 10, "intern": 10, "prefac": 10, "choos": [10, 11, 14], "vs": [10, 13], "relat": [10, 12, 13, 20], "legaci": [10, 13, 16], "variant": [10, 11, 16, 18], "snapshot": [10, 20], "parallel": 10, "race": 10, "command": [10, 14, 18], "usag": 10, "rust": 10, "cargo": 10, "variat": 10, "byte": [10, 16], "queri": [10, 16], "advanc": 10, "cffi": 10, "greenlet": [10, 18], "abort": 10, "due": [5, 10, 12, 14, 18], "assert": 10, "recip": 10, "xdist": [10, 12, 20], "autoload": 10, "typeerror": 10, "_make_test_flaki": 10, "got": [10, 13], "unexpect": 10, "rerun": 10, "importpathmismatcherror": 10, "fixtur": [10, 12], "namespac": [10, 18], "disjoint": 10, "waf": [10, 19], "tip": [10, 20], "retroact": 10, "mainten": 10, "co": [10, 20], "life": 10, "cycl": 10, "page": [10, 16, 17], "increment": 11, "minor": [11, 20], "plan": 11, "On": 11, "hand": [11, 13], "platform": [11, 16, 20], "linux_distribut": 11, "window": 11, "hous": 11, "rpython": 11, "lot": [11, 15], "good": [11, 17, 18, 20], "gc": 11, "jython": 11, "java": 11, "stand": 11, "alon": 11, "bidirect": 11, "interact": 11, "slow": 11, "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], "improv": [11, 17], "ideal": [11, 15, 20], "funcsig": 11, "signatur": [11, 16], "afterward": [11, 14, 15], "becom": [11, 12, 16], "later": 11, "lzma": 11, "compet": 11, "amount": [11, 12, 20], "ipaddress": 11, "drop": [11, 16], "box": [11, 13], "hexvers": [11, 20], "0x03030000": 11, "trolliu": 11, "asyncio": [11, 18, 20], "nativ": 11, "understood": 12, "potenti": [12, 16, 18], "stabl": [12, 15], "mask": [12, 15], "stabil": 12, "inconsist": [12, 20], "graph": 12, "repeatedli": 12, "ask": [12, 15], "push": 12, "forward": 12, "eventu": 12, "slowli": [12, 15], "discontinu": 12, "next": [12, 15, 18], "nears": 12, "obsolet": [12, 13], "live": 12, "team": [12, 15], "unmask": 12, "announc": 12, "date": [12, 17, 20], "thing": [12, 13, 17, 18], "progress": 12, "decid": [12, 18], "somewher": 12, "aggress": 12, "reach": [12, 15], "clear": 12, "pursu": 12, "kept": 12, "secur": 12, "workflow": 12, "clone": 12, "remot": [12, 20], "fetch": 12, "rebas": 12, "v3": 12, "cherri": 12, "pick": 12, "upload": 12, "mkdir": 12, "scp": 12, "precompil": 12, "unusu": 12, "structur": [12, 20], "ex": 12, "technic": 12, "docker": 12, "binpkg": 12, "diff": 12, "mgorni": 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, "circular": 12, "eas": [12, 15], "temporarili": [12, 13], "python3_11": 12, "20": 12, "pwd": 12, "round": 12, "signific": [12, 18], "remaind": 12, "pydant": 12, "epytest_deselect": [12, 18], "test_comparison": 12, "test_close_to_now_": 12, "lenient": 12, "deselect": [12, 18, 20], "unblock": 12, "100": 12, "40": [5, 12], "emerg": 12, "previous": 12, "reinstal": 12, "batch": 12, "focus": 12, "reenabl": [12, 18], "face": [12, 20], "goe": [12, 20], "unbundl": 12, "tomli": 12, "obligatori": 12, "baselin": 12, "ones": 12, "chosen": 12, "fewest": 12, "Its": 12, "vendor": [12, 13], "februari": 13, "gross": 13, "serv": 13, "placehold": 13, "transit": [13, 15], "period": 13, "ban": 13, "python_multi_usedep": 13, "know": [13, 16, 20], "given": 13, "repoman": 13, "pkgcheck": 13, "tell": 13, "chose": 13, "reorder": 13, "desir": [13, 16, 20], "scan": 13, "unmatch": 13, "trial": 13, "stuff": 13, "privat": 13, "python_export": 13, "python_wrapper_setup": 13, "python_gen_usedep": 13, "mydistutilsarg": 13, "renam": [13, 16], "cleanup": 13, "python_gen": 13, "march": 13, "python_get": 13, "python_includedir": 13, "python_libpath": 13, "dpython3_include_dir": 13, "dpython3_librari": 13, "sundri": 13, "stop": [13, 16], "realli": [13, 15, 18, 20], "ugli": 13, "sole": 13, "uppercas": 13, "fourth": 13, "cruft": 13, "short": [13, 18], "made": [13, 14, 16, 19], "evalu": 13, "januari": 13, "safe": 13, "streamlin": 13, "unfortun": [5, 13, 18, 20], "inde": 13, "foundat": 14, "fionet": 14, "psql": 14, "cach": 14, "sourceforg": [14, 19], "replic": 14, "tgz": 14, "libcangji": 14, "cangjian": 14, "i18n": 14, "eautoreconf": [14, 16], "econf_sourc": 14, "la": 14, "multibuild": 14, "unnecessari": [14, 19, 20], "implicit": [5, 14, 20], "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, 19], "routin": 14, "qemu": 14, "kernel": 14, "machin": 14, "userland": 14, "kvm": 14, "qemu_python_instal": 14, "vmxcap": 14, "qmp": 14, "ga": 14, "eol": 15, "proactiv": 15, "anticip": 15, "soon": 15, "mark": [15, 18, 20], "wide": [15, 20], "revis": 15, "newli": 15, "risk": 15, "break": [15, 16], "feasibl": 15, "manpow": 15, "member": 15, "prematur": 15, "gemato": 15, "carri": 15, "compar": 16, "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, "worm": 16, "danger": 16, "worst": [16, 20], "unpars": 16, "django": [16, 20], "pr": 16, "14349": 16, "impact": 16, "urlpars": 16, "nurl": 16, "parseresult": 16, "scheme": 16, "netloc": 16, "param": [16, 18], "fragment": 16, "badurl": 16, "what": 16, "attributeerror": 16, "492": 16, "decor": [16, 20], "async": [16, 18], "def": [16, 18, 20], "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, "hold": 16, "int": 16, "str": 16, "float": 16, "k6": 16, "k7": 16, "k8": 16, "One": [16, 20], "prototyp": 16, "bar": 16, "pretti": 16, "spec": 16, "stringif": 16, "automak": 16, "16": 16, "exec_prefix": 16, "met": 16, "pkg_config_path": 16, "python_cflag": 16, "python_lib": 16, "man": 16, "exit": [16, 20], "autoreconf": 16, "throw": 16, "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, "contrari": 16, "ought": 16, "unicod": 16, "version_info": 16, "b64_encodebyt": 16, "b64encod": 16, "b64decod": 16, "insert": 16, "newlin": 16, "length": 16, "until": 16, "suppos": 16, "emb": 16, "lpython3": 16, "7m": 16, "among": 17, "beyond": 17, "reliabl": [17, 20], "deep": 17, "beginn": 17, "peopl": 17, "suboptim": 17, "improp": 17, "fill": 17, "gap": 17, "welcom": 17, "whole": [18, 20], "parametr": 18, "epytest_ignor": 18, "test_client": 18, "test_gener": 18, "test_filenam": 18, "test_transport": 18, "test_transport_work": 18, "eventlet": 18, "py3": 18, "test_contextvar": 18, "test_leak": 18, "might": 18, "intent": 18, "Not": 18, "collid": [18, 20], "instabl": 18, "unstabl": 18, "discret": 18, "justifi": 18, "semi": 18, "random": 18, "multiprocess": 18, "finish": 18, "01": 18, "chanc": 18, "experienc": 18, "insuffici": 18, "nest": 18, "envvar": 18, "pytest_disable_plugin_autoload": 18, "pytest_plugin": 18, "comma": 18, "looponfail": 18, "pytest_fork": 18, "flaki": [18, 20], "rerunfailur": 18, "supposedli": 18, "twice": 18, "_pytest": [18, 20], "pathlib": [18, 20], "posixpath": 18, "confus": 18, "signifi": 18, "event_loop": 18, "freezer": 18, "mocker": 18, "captur": [18, 20], "summari": 18, "asgiref": 18, "sync": 18, "135": 18, "test_loc": 18, "test_sync": 18, "test_sync_contextvar": 18, "deprecationwarn": 18, "main_event_loop": 18, "get_event_loop": 18, "filterwarn": 18, "fatal": [18, 20], "_____________________": 18, "______________________": 18, "577": 18, "asgitest": 18, "testcas": 18, "583": 18, "test_wrapped_case_is_collect": 18, "interrupt": 18, "world": 18, "plot": 19, "voacap": 19, "propag": 19, "predict": 19, "qsl": 19, "hz1jw": 19, "pythonprop": 19, "basemap": 19, "gtk2": 19, "doubl": 19, "energi": 19, "yoda": 19, "hepforg": 19, "use_en": 19, "pyext": 19, "extra_opt": 19, "give": 19, "sound": 19, "signal": [19, 20], "composit": 19, "csound": 19, "fordfrog": 19, "dbuild_python_interfac": 19, "dbuild_python_opcod": 19, "superset": 19, "arab": 19, "arabey": 19, "duali": 19, "pyduali": 19, "dict2db": 19, "trans2arab": 19, "arabic2tran": 19, "domain": 20, "firstli": 20, "idea": 20, "nosetest": 20, "secondli": 20, "strict": 20, "thirdli": 20, "readabl": 20, "wholli": 20, "spew": 20, "seem": 20, "equal": 20, "ceas": 20, "downstream": 20, "convinc": 20, "preced": 20, "area": 20, "____________________": 20, "systemd": 20, "test_login": 20, "234": 20, "hint": 20, "578": 20, "_importtestmodul": 20, "mod": 20, "import_path": 20, "fspath": 20, "importmod": 20, "524": 20, "import_modul": 20, "module_nam": 20, "127": 20, "_bootstrap": 20, "_gcd_import": 20, "frozen": 20, "1014": 20, "991": 20, "_find_and_load": 20, "975": 20, "_find_and_load_unlock": 20, "671": 20, "_load_unlock": 20, "rewrit": 20, "170": 20, "exec_modul": 20, "__dict__": 20, "login": 20, "r2": 20, "discov": 20, "pyarg": 20, "guess": 20, "quick": 20, "mayb": 20, "eunittest": 20, "confirm": 20, "whom": 20, "myself": 20, "subtl": 20, "lead": 20, "But": 20, "bewar": 20, "unexpectedli": 20, "test_start_params_bug": 20, "xfail": 20, "statsmodel": 20, "tsa": 20, "test_arima": 20, "horrend": 20, "disk": 20, "space": 20, "mayhem": 20, "5a": 20, "test_null_byt": 20, "skipif": 20, "0x03000000": 20, "unconditioanlli": 20, "test_babel_with_language_": 20, "test_build_latex": 20, "test_polyglossia_with_language_": 20, "altogeth": 20, "replai": 20, "devmanu": 20, "explan": 20, "connect": 20, "pygit2": 20, "no_network": 20, "properti": 20, "test_network": 20, "allow_test": 20, "unclear": 20, "backtrac": 20, "pluggi": 20, "cachedir": 20, "pytest_cach": 20, "rootdir": 20, "var": 20, "sabyenc": 20, "configfil": 20, "item": 20, "test_decod": 20, "test_crc_pickl": 20, "54": 20, "test_empty_size_pickl": 20, "0x00007f748bc47740": 20, "testsupport": 20, "74": 20, "sabyenc3_wrapp": 20, "119": 20, "180": 20, "pytest_pyfunc_cal": 20, "caller": 20, "187": 20, "_multical": 20, "temp": 20, "2934": 20, "66": 20, "dump": 20, "vv": 20, "34": 20, "23": 20, "timeout": 20, "25": 20, "sabyenc3": 20, "596": 20, "decode_usenet_chunk": 20, "pybytearray_check": 20, "pylist_getitem": 20, "py_input_list": 20, "lp": 20, "0x00007fb5db746740": 20, "73": 20, "117": 20, "87": 20, "lambda": 20, "__main__": 20, "runpi": 20, "85": 20, "_run_cod": 20, "193": 20, "_run_module_as_main": 20, "initi": 20, "reproduc": 20, "ubuntu": 20, "dndebug": 20, "leak": 20, "o0": 20, "isort": 20, "distutils_pep517_instal": 20, "destin": 20, "cp": 20, "pushd": 20, "null": 20, "popd": 20, "sipbuild": 5, "prolong": 5, "tend": 5}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"python": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19], "ani": [0, 8], "r1": [0, 2, 5, 6, 7, 8, 13, 14, 19], "build": [0, 1, 2, 5, 6, 7, 8, 12, 13, 14, 19], "time": [0, 2, 7, 8, 14, 19], "depend": [0, 1, 2, 4, 5, 8, 14, 18, 19, 20], "basic": [0, 1, 5, 19], "us": [0, 2, 3, 4, 5, 6, 7, 8, 14, 18, 19], "uncondit": [0, 19], "condit": [0, 2, 4, 5, 14, 19], "addit": [0, 5, 14], "multipl": [0, 11, 19], "set": [0, 8], "common": [1, 9], "python_compat": 1, "python_dep": 1, "python_required_us": 1, "environ": [1, 20], "packag": [1, 2, 3, 5, 6, 12, 14, 15, 16, 19, 20], "The": [1, 5], "most": 1, "type": 1, "find": 1, "list": [1, 16], "from": [1, 5, 13], "system": [1, 2, 5, 6, 7, 12], "integr": 2, "written": 2, "meson": 2, "scon": 2, "extra": [2, 20], "singl": [2, 5, 7, 13, 19], "impl": [2, 7, 14, 19], "instal": [2, 5, 6, 9, 14, 19, 20], "pure": [2, 14], "multi": [2, 7, 14], "hybrid": [2, 19], "waf": 2, "advanc": [3, 4], "concept": [3, 6], "namespac": 3, "hierarch": 3, "structur": 3, "determin": 3, "whether": 3, "ar": 3, "ad": [3, 5, 12, 15], "new": [3, 12, 15], "gentoo": [3, 10], "legaci": [3, 5, 6], "request": 4, "flag": 4, "interpret": [4, 8, 11, 12], "version": [4, 11], "cffi": 4, "greenlet": 4, "distutil": [5, 6, 7, 8, 16], "standard": 5, "pep": [5, 13], "517": [5, 13], "mode": [5, 20], "sourc": [5, 6], "archiv": 5, "variant": 5, "deprec": [5, 16], "backend": 5, "flit": 5, "buildapi": 5, "poetri": 5, "masonri": 5, "api": [5, 8], "setuptools_scm": 5, "snapshot": 5, "cython": 5, "parallel": [5, 18], "race": 5, "sub": 5, "phase": 5, "function": [5, 9], "python_prepar": 5, "python_configur": 5, "python_compil": 5, "python_test": 5, "python_instal": 5, "pass": 5, "argument": [5, 18], "setup": 5, "py": 5, "call": 5, "custom": 5, "command": 5, "prevent": 5, "test": [5, 6, 15, 18, 20], "directori": 5, "being": 5, "enabl": 5, "distutils_enable_test": 5, "more": 5, "befor": [5, 6], "run": [5, 18], "undesir": 5, "pytest": [5, 18], "virtualx": 5, "document": 5, "via": 5, "sphinx": 5, "autodoc": 5, "extens": [5, 20], "without": 5, "option": 5, "usag": [5, 8], "rust": 5, "cargo": 5, "differ": [6, 8], "variat": 6, "distutils_use_setuptool": 6, "setuptool": [5, 6], "entri": 6, "point": 6, "other": [6, 18], "runtim": [6, 7, 19], "pyproject": 6, "toml": 6, "base": [6, 16, 18], "project": [6, 15], "In": 6, "vs": [6, 7], "out": 6, "choos": [7, 20], "between": 7, "eclass": [7, 12], "relat": 7, "A": [7, 19], "rule": 7, "thumb": 7, "util": 7, "expert": [8, 18], "partial": 8, "restrict": 8, "implement": [8, 9, 11, 12, 15], "python_setup": 8, "disjoint": 8, "regular": 8, "combin": 8, "helper": 9, "fix": 9, "shebang": 9, "script": 9, "byte": 9, "compil": 9, "modul": 9, "queri": 9, "inform": 9, "guid": [10, 13], "content": 10, "indic": 10, "tabl": 10, "altern": 11, "support": [11, 15], "backport": 11, "mainten": [12, 15], "life": 12, "cycl": 12, "note": 12, "specif": 12, "cpython": 12, "patchset": 12, "pypi": [12, 20], "profil": 12, "chang": [12, 16], "port": [12, 15, 16], "initi": 12, "bootstrap": 12, "migrat": 13, "old": 13, "python_usedep": 13, "syntax": 13, "eapi": [13, 15], "7": 13, "8": [13, 16], "manual": [14, 19], "autotool": 14, "2": 15, "which": 15, "exist": 15, "can": 15, "co": 15, "maintain": 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, "coroutin": 16, "remov": 16, "asyncio": 16, "inspect": 16, "getargspec": 16, "formatargspec": 16, "10": 16, "configur": 16, "No": 16, "1": 16, "found": [16, 18], "sysconfig": 16, "9": 16, "base64": 16, "encodestr": 16, "decodestr": 16, "config": 16, "pkg": 16, "longer": 16, "librari": 16, "default": 16, "prefac": 17, "recip": 18, "skip": [18, 20], "marker": 18, "path": 18, "name": 18, "avoid": 18, "runner": [18, 20], "xdist": 18, "plugin": 18, "explicitli": 18, "disabl": 18, "automat": 18, "autoload": 18, "entir": 18, "typeerror": 18, "_make_test_flaki": 18, "got": 18, "an": 18, "unexpect": 18, "keyword": 18, "rerun": 18, "importpathmismatcherror": 18, "fixtur": 18, "warn": 18, "resolv": 20, "suit": 20, "problem": 20, "correct": 20, "miss": 20, "file": 20, "importerror": 20, "c": 20, "checklist": 20, "deal": 20, "failur": 20, "problemat": 20, "requir": 20, "internet": 20, "access": 20, "abort": 20, "due": 20, "assert": 20, "pep517": 20, "build_meta": 5, "__legacy__": 5}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
\ 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", "pytest", "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", "pytest.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", "pytest recipes", "python-single-r1 \u2014 single-impl packages", "Resolving test suite problems"], "terms": {"The": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20], "eclass": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 13, 14, 17, 18, 19, 20], "enabl": [0, 4, 6, 7, 8, 10, 11, 12, 14, 15, 18], "support": [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 16, 17, 18, 19, 20], "packag": [0, 4, 8, 9, 10, 11, 13, 17, 18], "need": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "pure": [0, 5, 6, 7, 8, 10, 11, 15], "refer": [0, 1, 5, 9, 11, 13, 14, 17, 19], "5": [0, 2, 5, 7, 8, 9, 11, 12, 14, 16, 18, 19, 20], "defin": [0, 1, 5, 6, 11, 19], "featur": [0, 4, 5, 6, 7, 8, 11, 12, 13, 19, 20], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "pkg_setup": [0, 1, 2, 8, 19], "phase": [0, 1, 3, 6, 7, 8, 9, 10, 13, 14, 15, 19, 20], "It": [0, 1, 3, 4, 5, 6, 9, 11, 12, 13, 14, 16, 18, 19, 20], "normal": [0, 3, 5, 8, 9, 14, 19], "call": [0, 1, 2, 3, 6, 7, 8, 9, 10, 11, 13, 14, 16, 18, 19, 20], "python_setup": [0, 1, 2, 10, 13, 14, 19], "function": [0, 1, 4, 6, 7, 8, 10, 11, 13, 14, 16, 19, 20], "order": [0, 1, 2, 4, 5, 7, 9, 12, 13, 14, 15, 19], "find": [0, 2, 3, 4, 6, 14, 18, 20], "suitabl": [0, 7, 9, 14, 17], "interpret": [0, 1, 2, 5, 6, 7, 9, 10, 13, 14, 15, 16, 18, 19], "global": [0, 1, 5, 8, 13, 14, 18, 19], "environ": [0, 5, 6, 10, 11, 13, 14, 16, 18, 19], "appropri": [0, 2, 4, 5, 6, 7, 9, 11, 12, 15, 19], "mean": [0, 1, 2, 5, 7, 8, 11, 15, 16, 18, 19, 20], "most": [0, 3, 5, 6, 9, 11, 12, 13, 14, 17, 18, 19, 20], "trivial": [0, 5, 12, 16, 19], "an": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19, 20], "autotool": [0, 5, 6, 10, 16, 19], "compat": [0, 1, 2, 4, 5, 6, 7, 9, 11, 12, 13, 16, 19], "system": [0, 3, 7, 8, 9, 10, 13, 14, 15, 17, 19, 20], "could": [0, 2, 3, 5, 6, 8, 9, 16, 19], "look": [0, 1, 6, 8, 18, 19, 20], "like": [0, 2, 4, 5, 6, 8, 11, 15, 16, 19, 20], "follow": [0, 1, 3, 4, 5, 6, 8, 9, 12, 13, 16, 17, 18, 19, 20], "copyright": [0, 2, 4, 5, 6, 8, 14, 19], "1999": [0, 2, 4, 5, 6, 8, 14, 19], "2020": [0, 2, 4, 5, 6, 8, 13, 14, 19], "gentoo": [0, 1, 2, 4, 5, 6, 8, 9, 11, 12, 14, 15, 16, 17, 18, 19, 20], "author": [0, 2, 4, 5, 6, 8, 9, 10, 12, 14, 19], "distribut": [0, 2, 4, 5, 6, 8, 14, 16, 17, 19, 20], "under": [0, 1, 2, 3, 4, 5, 6, 8, 14, 19], "term": [0, 2, 4, 5, 6, 8, 14, 19], "gnu": [0, 2, 4, 5, 6, 8, 14, 19], "gener": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "public": [0, 2, 4, 5, 6, 8, 14, 19], "licens": [0, 2, 4, 5, 6, 8, 10, 14, 19], "v2": [0, 2, 4, 5, 6, 8, 14, 19], "eapi": [0, 2, 4, 5, 6, 8, 10, 14, 19], "7": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20], "python_compat": [0, 2, 4, 5, 6, 8, 10, 12, 14, 15, 19], "python3_": [0, 1, 2, 4, 5, 6, 8, 12, 19], "6": [0, 1, 2, 4, 5, 6, 8, 11, 12, 14, 16, 18, 19, 20], "8": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 19, 20], "inherit": [0, 1, 2, 4, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19], "descript": [0, 2, 4, 5, 6, 8, 14, 19], "A": [0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 15, 18], "repositori": [0, 5, 6, 12], "data": [0, 2, 5, 6, 9, 16, 19, 20], "file": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19], "describ": [0, 5, 6, 8, 9], "media": [0, 2, 8], "player": [0, 4], "capabl": 0, "homepag": [0, 2, 4, 5, 6, 8, 14, 19], "http": [0, 2, 4, 5, 6, 8, 9, 12, 14, 16, 19, 20], "cgit": 0, "freedesktop": 0, "org": [0, 2, 4, 5, 6, 8, 9, 12, 14, 19], "info": [0, 5, 6, 18], "src_uri": [0, 2, 4, 5, 6, 8, 14, 19, 20], "www": [0, 2, 8, 14, 19], "softwar": [0, 1, 4, 8, 12, 14, 15, 16, 20], "pn": [0, 2, 4, 5, 6, 8, 9, 14, 19, 20], "p": [0, 2, 4, 5, 6, 8, 14, 18, 19, 20], "tar": [0, 2, 4, 5, 6, 8, 12, 14, 19, 20], "gz": [0, 2, 4, 5, 6, 8, 14, 19, 20], "bsd": [0, 2, 5, 6, 8, 14, 19], "slot": [0, 2, 4, 5, 6, 8, 11, 14, 19], "0": [0, 2, 4, 5, 6, 8, 10, 12, 14, 16, 18, 19, 20], "keyword": [0, 2, 4, 5, 6, 8, 10, 14, 16, 19], "alpha": [0, 2, 4, 5, 6, 8, 12, 14, 19], "amd64": [0, 2, 4, 5, 6, 8, 12, 14, 19], "arm": [0, 2, 4, 5, 6, 8, 19], "arm64": [0, 2, 4, 5, 6, 8, 14, 19], "hppa": [0, 2, 4, 5, 6, 8, 14, 19], "ia64": [0, 2, 4, 5, 6, 8, 14, 19], "mip": [0, 2, 4, 5, 6, 8, 19], "ppc": [0, 2, 4, 5, 6, 8, 14, 19], "ppc64": [0, 2, 4, 5, 6, 8, 14, 19], "sh": [0, 2, 4, 5, 6, 8, 12, 19], "sparc": [0, 2, 4, 5, 6, 8, 14, 19], "x86": [0, 2, 4, 5, 6, 8, 12, 14, 19], "ius": [0, 2, 4, 5, 8, 14, 19], "rdepend": [0, 1, 2, 4, 5, 6, 8, 13, 14, 19], "virtual": [0, 2, 8, 14], "udev": 0, "208": 0, "bdepend": [0, 1, 2, 5, 6, 8, 12, 14, 18, 19], "python_dep": [0, 2, 4, 5, 8, 10, 14, 19], "pkgconfig": [0, 2, 8, 14], "ebuild": [0, 1, 4, 5, 6, 7, 9, 12, 13, 14, 15, 16, 17, 19, 20], "demonstr": [0, 5, 19], "absolut": [0, 1, 9, 15, 19, 20], "minimum": [0, 15, 19], "work": [0, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "code": [0, 1, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20], "onli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 16, 18, 19, 20], "three": [0, 1, 3, 9, 13, 16], "highlight": [0, 16, 19], "line": [0, 3, 5, 13, 15, 16, 19, 20], "ar": [0, 1, 2, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "specif": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "plu": [0, 19], "implicitli": [0, 3, 5, 8, 12, 19], "export": [0, 1, 2, 5, 19], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "other": [0, 1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20], "declar": [0, 1, 2, 5, 6, 8, 9, 12, 14, 18, 19], "ensur": [0, 1, 5, 6, 9, 14, 19], "would": [0, 2, 5, 7, 11, 12, 14, 15, 16, 19, 20], "built": [0, 1, 3, 5, 6, 7, 8, 11, 12, 14, 17, 19, 20], "against": [0, 4, 7, 9, 11, 12, 14, 19, 20], "implement": [0, 1, 3, 4, 5, 6, 7, 10, 14, 17, 18, 19, 20], "specifi": [0, 1, 2, 5, 6, 7, 8, 14, 18, 19, 20], "get": [0, 5, 6, 12, 13, 18, 20], "replac": [0, 5, 6, 11, 12, 13, 16], "python_gen_any_dep": [0, 2, 8], "match": [0, 2, 4, 5, 6, 8, 9, 11, 12, 15, 19], "python_check_dep": [0, 2, 8], "accept": [0, 1, 5, 6, 9, 12, 15, 16, 18], "templat": [0, 2, 4, 5, 19], "where": [0, 3, 5, 6, 9, 12, 14, 19, 20], "liter": [0, 4, 19], "python_usedep": [0, 2, 4, 5, 8, 10, 12, 14, 18, 19], "substitut": [0, 4, 19], "requir": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "same": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 17, 18, 20], "least": [0, 5, 8, 15, 20], "one": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20], "test": [0, 1, 2, 3, 4, 7, 8, 10, 12, 13, 17, 19], "whether": [0, 1, 5, 6, 7, 15, 18, 19, 20], "question": [0, 1, 5, 7, 14, 18, 20], "In": [0, 1, 2, 3, 4, 5, 7, 8, 10, 11, 12, 14, 16, 18, 19, 20], "particular": [0, 1, 4, 5, 6, 11, 20], "verifi": [0, 1, 5, 6, 8, 13, 20], "branch": [0, 16, 20], "wa": [0, 4, 5, 11, 12, 13, 18, 20], "satisfi": [0, 1, 8, 12], "were": [0, 2, 3, 5, 8, 11, 12, 13, 16], "instal": [0, 1, 3, 4, 7, 8, 10, 11, 12, 13, 15, 16, 18], "current": [0, 5, 6, 11, 12, 13, 15, 18, 20], "For": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 20], "purpos": [0, 6, 9, 12, 14, 16, 19, 20], "variabl": [0, 1, 5, 6, 8, 13, 14, 16, 18, 19], "string": [0, 1, 4, 5, 8, 14, 16, 19], "best": [0, 5, 7, 12, 16, 17, 18], "explain": [0, 1, 6], "exampl": [0, 4, 5, 6, 7, 8, 9, 11, 12, 16, 17, 18, 19, 20], "meson": [0, 4, 5, 7, 10], "manag": [0, 4, 5, 6, 8, 9, 20], "cinnamon": 0, "fork": [0, 11, 12, 20], "from": [0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20], "nautilu": 0, "develop": [0, 1, 7, 11, 12, 15, 17, 18, 20], "linuxmint": 0, "com": [0, 2, 4, 5, 6, 8, 12, 14, 16, 20], "project": [0, 1, 5, 8, 9, 10, 14, 17, 18], "html": [0, 5, 8], "github": [0, 2, 4, 5, 6, 8, 12, 14, 17, 19, 20], "nemo": 0, "archiv": [0, 2, 4, 10, 19, 20], "pv": [0, 2, 4, 5, 8, 14, 19, 20], "gpl": [0, 2, 4, 8, 14, 19], "2": [0, 2, 3, 4, 5, 8, 9, 10, 11, 12, 13, 14, 16, 17, 19, 20], "lgpl": [0, 2, 5, 14, 19], "fdl": [0, 19], "1": [0, 2, 3, 4, 5, 6, 8, 9, 12, 18, 19, 20], "dev": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20], "polib": 0, "pygobject": [0, 14], "3": [0, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20], "python_has_vers": [0, 2, 8], "provid": [0, 1, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "its": [0, 1, 2, 3, 5, 6, 7, 8, 11, 12, 15, 16, 18, 20], "both": [0, 1, 3, 5, 6, 7, 8, 12, 13, 16, 17, 18, 19, 20], "have": [0, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 19, 20], "dep": [0, 5, 13, 15, 18], "true": [0, 1, 2, 5, 6, 8, 12, 13, 16, 20], "them": [0, 1, 2, 3, 5, 6, 7, 8, 9, 12, 16, 18, 19, 20], "while": [0, 2, 3, 4, 5, 6, 7, 8, 11, 12, 14, 16, 17, 18, 19, 20], "which": [0, 5, 6, 9, 10, 11, 14, 20], "wrapper": [0, 1, 5, 6, 9, 13, 14, 20], "help": [0, 17, 20], "take": [0, 1, 2, 4, 5, 6, 7, 8, 9, 15, 18, 20], "singl": [0, 1, 4, 6, 9, 10, 14, 16, 18, 20], "option": [0, 1, 3, 4, 6, 8, 10, 13, 15, 18, 19, 20], "class": [0, 1, 5, 16, 18], "flag": [0, 1, 5, 7, 8, 9, 10, 11, 12, 14, 15, 19, 20], "more": [0, 1, 3, 4, 7, 9, 11, 12, 13, 16, 18, 19, 20], "similarli": [0, 1, 5], "has_vers": [0, 12], "root": [0, 5, 6, 13, 19, 20], "can": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 18, 19, 20], "b": 0, "d": [0, 2, 3, 8, 9, 14, 18], "r": [0, 2, 5, 9, 20], "idepend": 0, "pdepend": [0, 2, 8, 12], "pass": [0, 6, 8, 9, 10, 12, 13, 16, 18, 20], "assum": [0, 1, 5, 6, 9, 13, 19], "verbos": [0, 20], "print": [0, 3, 8, 14, 18, 20], "check": [0, 5, 6, 9, 12, 13, 16, 17, 20], "perform": [0, 2, 5, 6, 11, 12, 14, 19, 20], "result": [0, 5, 6, 8, 9, 12, 16, 17, 18, 20], "return": [0, 2, 5, 8, 16, 20], "success": 0, "found": [0, 1, 3, 5, 6, 9, 10, 15, 20], "fals": [0, 2, 5, 8, 12, 16], "otherwis": [0, 5, 6, 7, 8, 9], "note": [0, 1, 5, 6, 8, 9, 10, 11, 13, 14, 15, 16, 18, 19, 20], "invoc": [0, 5, 18], "chain": 0, "abov": [0, 1, 6, 8, 12, 13, 15, 19, 20], "also": [0, 1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 20], "written": [0, 1, 5, 7, 10, 11, 18], "import": [0, 1, 3, 4, 5, 6, 7, 11, 12, 13, 14, 16, 18, 20], "understand": 0, "correctli": [0, 1, 5, 6, 7, 9, 11, 12, 13, 16, 20], "exactli": [0, 7], "furthermor": [0, 2, 5], "combin": [0, 2, 5, 10, 11, 12, 13, 17, 18, 19, 20], "must": [0, 1, 2, 3, 5, 6, 7, 8, 11, 18, 19, 20], "onc": [0, 5, 8, 11, 12], "invalid": 0, "split": [0, 5, 13, 16], "some": [0, 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 16, 18, 19, 20], "necessari": [0, 2, 5, 6, 8, 9, 11, 12, 13, 14, 15, 18, 19, 20], "particularli": [0, 5, 6, 7, 11, 13, 18, 20], "common": [0, 3, 5, 6, 7, 10, 11, 12, 13, 16, 17, 18, 19, 20], "suit": [0, 1, 2, 5, 6, 7, 8, 9, 10, 12, 18], "case": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 16, 18, 19, 20], "wrap": [0, 5, 6, 9, 13], "programm": [0, 15], "complet": [0, 5, 16, 17], "bash": [0, 5, 7, 8, 9, 19], "scop": 0, "releas": [0, 2, 5, 8, 11, 12, 14, 15, 16], "download": [0, 2, 5, 8, 14], "xz": [0, 4, 12, 14, 19], "s390": [0, 2, 4, 5, 6, 8, 19], "linux": [0, 2, 4, 5, 6, 8, 9, 14, 16, 19, 20], "maco": [0, 4, 5, 6, 8, 19], "x64": [0, 4, 5, 6, 8, 19], "m68k": [0, 4, 5, 6, 8, 19], "mint": 0, "solari": [0, 5, 6, 19], "sparc64": [0, 6], "restrict": [0, 2, 5, 10, 18, 19, 20], "app": [0, 2, 4, 5, 8, 12, 14, 15], "shell": [0, 5, 8, 14], "4": [0, 3, 5, 8, 9, 10, 11, 12, 14, 20], "3_p30": 0, "pexpect": [0, 5], "pytest": [0, 4, 8, 10, 12, 20], "r1_pkg_setup": [0, 2, 19], "anoth": [0, 8, 9, 14, 16, 18, 20], "possibl": [0, 2, 4, 5, 6, 8, 9, 12, 14, 17, 18, 20], "uncondition": [0, 1, 2, 4, 5, 6, 8, 11, 19, 20], "condition": [0, 1, 2, 5, 11, 12, 14, 15, 18, 19], "simplest": [0, 2, 5, 7, 14, 18, 20], "wai": [0, 5, 6, 9, 12, 13, 18, 20], "achiev": [0, 8, 11, 16], "block": [0, 8, 13, 20], "express": [0, 8, 13, 19], "similar": [0, 2, 5, 14, 19, 20], "cmake": [0, 5, 6, 19], "qt": 0, "bind": [0, 2, 5, 8, 14, 19], "telepathi": 0, "bu": 0, "protocol": [0, 2, 19], "dbu": [0, 2], "hardest": 0, "differ": [0, 1, 3, 5, 9, 10, 11, 16, 18, 20], "do": [0, 1, 3, 4, 5, 6, 8, 9, 11, 12, 14, 15, 17, 18, 19, 20], "error": [0, 2, 5, 9, 13, 16, 18, 20], "prone": 0, "move": [0, 5, 12], "insid": [0, 1, 3, 5, 6, 9, 12, 14, 18, 19], "python3_6": [0, 2, 4, 8, 14], "gnome2": [0, 4, 14], "gobject": 0, "librari": [0, 1, 2, 3, 4, 5, 8, 9, 11, 14, 19], "access": [0, 5, 10, 11, 18], "secret": 0, "servic": [0, 20], "api": [0, 2, 9, 10, 11, 13, 14, 16], "wiki": [0, 4, 8, 9, 14, 17], "gnome": [0, 4, 14], "libsecret": 0, "apach": [0, 2, 4, 5, 8], "introspect": 0, "fail": [0, 1, 2, 5, 8, 9, 11, 12, 16, 18, 20], "bug": [0, 5, 6, 12, 20], "655482": 0, "required_us": [0, 1, 2, 4, 5, 7, 8, 13, 14, 19], "mock": [0, 4, 8, 11, 12, 18, 20], "fi": [0, 2, 5, 8, 12, 14, 19], "host": 0, "variou": [1, 5, 6, 9, 13, 16], "r1": [1, 3, 4, 9, 10, 12, 20], "try": [1, 6, 8, 9, 11, 20], "design": [1, 19], "you": [1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "probabl": [1, 6, 8, 13, 19], "us": [1, 9, 10, 11, 12, 13, 15, 16, 20], "than": [1, 2, 3, 6, 7, 8, 11, 12, 16, 17, 18, 20], "so": [1, 4, 5, 6, 11, 12, 18, 19, 20], "worthwhil": [1, 20], "shortli": 1, "bit": [1, 12, 17], "well": [1, 5, 7, 8, 11, 13, 15], "non": [1, 6, 7, 9, 12, 14, 16, 18, 20], "obviou": [1, 20], "between": [1, 5, 8, 10, 11, 12, 13, 16], "befor": [1, 4, 8, 9, 10, 12, 14, 16, 20], "thei": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 20], "valid": [1, 5, 8, 16, 20], "valu": [1, 5, 6, 9, 13, 18], "pythonx_i": 1, "cpython": [1, 4, 5, 9, 11, 13], "x": [1, 5, 16, 18, 20], "y": [1, 2, 16], "pypy3": [1, 4, 5, 6, 8, 11, 12, 13, 15, 18], "typic": [1, 14], "ani": [1, 2, 3, 5, 6, 7, 10, 14, 16, 18, 20], "respons": [1, 5], "explicitli": [1, 5, 7, 8, 10, 13, 20], "put": [1, 8], "correct": [1, 5, 6, 7, 9, 10, 18, 19], "meant": [1, 13], "consist": [1, 6, 9, 13, 14, 15], "cover": [1, 5, 6, 13], "time": [1, 3, 4, 5, 6, 9, 10, 11, 12, 13, 16, 17, 18, 20], "runtim": [1, 2, 3, 5, 8, 10, 13, 14], "form": [1, 4, 12, 17], "doe": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 14, 15, 16, 18, 20], "appli": [1, 4, 5, 6, 7, 12, 15, 18, 19, 20], "distutil": [1, 3, 4, 9, 10, 13, 14, 18, 19, 20], "assign": 1, "default": [1, 2, 5, 6, 7, 8, 9, 12, 13, 14, 15, 18, 19, 20], "commonli": [1, 2, 3, 5, 6, 9, 11], "concept": [1, 5, 10], "state": 1, "enforc": [1, 4, 5, 7, 8, 11, 18], "whenev": [1, 5, 9, 14, 15, 18, 19], "run": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 17, 20], "two": [1, 5, 6, 8, 9, 11, 13, 16, 18, 19], "being": [1, 3, 6, 8, 9, 10, 11, 12, 15, 16, 18, 20], "epython": [1, 2, 5, 8, 9, 12, 13, 18, 20], "contain": [1, 3, 4, 5, 6, 7, 12, 13], "s": [1, 2, 4, 5, 6, 7, 8, 9, 12, 13, 14, 16, 18, 19, 20], "basenam": 1, "identifi": 1, "e": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "g": [1, 2, 3, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "python3": [1, 3, 5, 9, 11, 13, 16, 18, 20], "10": [1, 4, 5, 8, 10, 12], "final": [1, 2, 4, 5, 9, 12, 13, 16, 19, 20], "path": [1, 3, 5, 6, 9, 10, 12, 13, 16, 20], "usr": [1, 2, 3, 5, 7, 8, 9, 18, 20], "bin": [1, 2, 5, 7, 8, 9, 12, 19, 20], "full": [1, 2, 4, 5, 13, 20], "should": [1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "embed": [1, 2, 9, 11], "program": [1, 2, 5, 6, 11, 16, 18], "shebang": [1, 10, 11, 20], "spawn": 1, "dure": [1, 5, 6, 7, 12, 13, 18], "prefer": [1, 5, 7, 8, 11, 12, 14, 15, 18, 20], "rather": [1, 6, 8, 16, 17, 18, 20], "bypass": 1, "virtualenv": [1, 5, 6, 12, 20], "creat": [1, 3, 4, 5, 6, 12, 13, 16], "pep": [1, 3, 6, 7, 10, 12, 16], "517": [1, 3, 6, 7, 10, 12], "mode": [1, 3, 6, 7, 10, 13], "mai": [1, 3, 5, 6, 8, 12, 13, 15, 16, 18, 20], "caus": [1, 4, 5, 8, 9, 13, 18, 20], "failur": [1, 5, 10, 12, 18], "modul": [1, 3, 4, 5, 6, 7, 8, 10, 11, 14, 15, 16, 18, 20], "previou": [1, 5, 12, 13, 16], "version": [1, 2, 3, 5, 6, 7, 8, 10, 12, 13, 15, 16, 17, 18, 20], "just": [1, 5, 6, 11, 13, 20], "resolv": [1, 5, 6, 10, 16, 18], "problem": [1, 3, 4, 5, 6, 8, 10, 12, 16, 17, 18], "pythonn": 1, "tool": [1, 2, 5, 8, 14, 15, 16, 20], "etc": 1, "via": [1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 19, 20], "exec": [1, 8, 9, 11, 12, 20], "hardcod": [1, 12, 18], "either": [1, 2, 5, 8, 9, 11, 13, 18, 20], "establish": [1, 5, 13, 20], "local": [1, 2, 3, 5, 8, 9, 12, 13, 14, 18, 19, 20], "scope": [1, 5, 8, 13, 18], "multi": [1, 5, 10, 13, 19], "impl": [1, 5, 10, 13], "python_foreach_impl": [1, 2, 8, 14], "sub": [1, 3, 7, 8, 10, 20], "setup": [1, 3, 6, 7, 10, 13, 18, 20], "done": [1, 5, 6, 8, 9, 12, 14, 18, 20], "directli": [1, 5, 6, 7, 9, 11, 13, 16, 18, 20], "section": [1, 5, 6, 7, 12, 16, 20], "focu": [1, 7, 12, 14], "often": [1, 5, 12, 20], "extern": [1, 2, 5, 6, 7, 11, 12], "languag": [1, 2, 5, 11, 15], "usual": [1, 3, 4, 5, 7, 11, 13, 15, 16, 18, 20], "rule": [1, 2, 6, 7, 8, 13, 14, 15], "classifi": [1, 6], "categori": 1, "present": [1, 5, 6], "script": [1, 2, 5, 6, 7, 8, 10, 11, 12, 14, 16, 19], "usabl": [1, 11], "whose": [1, 5], "therefor": [1, 2, 5, 6, 7, 8, 11, 12, 15, 18], "howev": [1, 3, 5, 6, 7, 8, 9, 11, 12, 13, 15, 16, 18, 19, 20], "modern": [1, 4, 5, 6, 12, 18, 20], "base": [1, 5, 7, 8, 10, 12, 14, 15, 19, 20], "entri": [1, 5, 18], "point": [1, 5, 11, 12, 13, 18, 20], "refus": [1, 11], "place": [1, 6, 11, 12], "special": [1, 3, 4, 5, 6, 16, 20], "subclass": 1, "extra": [1, 5, 6, 10], "still": [1, 5, 6, 8, 11, 12, 13, 16, 20], "meaningfulli": 1, "handl": [1, 4, 5, 6, 8, 13, 14], "gracefulli": [1, 4, 8], "subset": [1, 4, 5, 7, 8, 11, 12, 14, 20], "without": [1, 4, 10, 11, 13, 14, 15, 18], "There": [1, 3, 5, 8, 9, 16, 18, 20], "multipl": [1, 3, 4, 5, 7, 10, 14, 17, 18, 20], "approach": [1, 5, 7, 8], "ad": [1, 7, 10, 11, 13, 14, 18], "consid": [1, 2, 3, 6, 7, 8, 12, 14, 16], "light": 1, "enough": [1, 5], "inform": [1, 3, 5, 6, 10, 13, 16, 20], "messag": [1, 5, 20], "pkg_postinst": [1, 5], "util": [1, 2, 4, 5, 7, 8, 9, 12, 15, 18, 19, 20], "optfeatur": 1, "cheap": 1, "rebuild": [1, 6], "includ": [1, 2, 3, 4, 5, 6, 7, 9, 12, 15, 16, 17, 18, 19, 20], "__init__": [1, 3, 5, 9, 18, 20], "py": [1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 20], "As": [1, 3, 5, 6, 7, 8, 11, 13, 15, 16, 18, 19, 20], "thumb": [1, 6, 7, 13, 15], "belong": [1, 20], "care": [1, 2, 5, 7, 9, 15, 20], "addit": [1, 2, 4, 6, 8, 9, 10, 11, 12, 13, 18, 20], "plugin": [1, 3, 5, 6, 8, 10, 20], "setuptools_scm": [1, 10], "document": [1, 2, 7, 8, 10, 11, 14, 17, 20], "former": [1, 5, 7, 8, 13, 16, 20], "runner": [1, 5, 7, 10], "sinc": [1, 2, 3, 5, 6, 7, 11, 12, 13, 15, 16, 18, 20], "sometim": [1, 5, 6, 7, 9, 11, 18, 20], "These": [1, 6, 7, 12, 13, 18, 20], "go": [1, 2, 8, 12, 17, 18], "doc": [1, 2, 5, 8, 19], "respect": [1, 3, 5, 12, 14, 18], "maximum": [1, 5], "coverag": [1, 5, 15, 18], "further": [1, 18], "guid": [1, 3, 5, 16, 17], "linter": 1, "report": [1, 5, 6, 9, 20], "actual": [1, 5, 6, 8, 9, 11, 12, 18, 20], "undesir": [1, 18, 20], "again": [1, 2, 20], "conveni": [1, 4, 5, 6, 7, 18, 20], "add": [1, 2, 5, 6, 8, 12, 15, 19, 20], "sphinx": [1, 3, 6, 7, 8, 10, 12], "copi": [1, 3, 5, 6, 9, 11, 19], "c": [1, 2, 5, 6, 8, 9, 10, 14], "extens": [1, 6, 7, 8, 9, 10, 11, 14, 15, 16], "header": [1, 9], "numpi": [1, 2], "If": [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 18, 19, 20], "metadata": [1, 5, 6, 14, 19], "pyproject": [1, 5, 7, 12], "toml": [1, 5, 7, 12], "setuptool": [1, 3, 4, 7, 8, 12, 13, 15, 18], "cfg": [1, 3, 5, 6, 18], "custom": [1, 2, 6, 10, 13, 18], "read": [1, 5], "name": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14, 16, 20], "uncondit": [1, 2, 5, 10, 13, 14], "upstream": [1, 3, 5, 6, 7, 9, 11, 12, 14, 15, 16, 18, 20], "spuriou": 1, "strip": [1, 3, 5, 11, 18, 20], "ommit": 1, "kei": [1, 5, 16, 18, 19], "kind": [1, 3, 5, 7, 9, 11, 20], "621": 1, "older": [1, 11], "flit": [1, 6, 12, 13], "poetri": [1, 6, 13], "indic": [1, 5, 6, 11, 12, 13, 18, 20], "install_requir": [1, 3, 5, 6], "group": [1, 2, 6, 13, 18], "extras_requir": [1, 5], "setup_requir": [1, 5, 18], "deprec": [1, 3, 10, 11, 13], "tests_requir": [1, 5], "tox": [1, 5, 20], "ini": [1, 5, 18, 20], "noxfil": 1, "python_requir": 1, "besid": [2, 6, 11, 14, 18], "few": [2, 4, 6, 12, 18, 20], "make": [2, 3, 4, 5, 6, 7, 12, 13, 15, 16, 18, 19, 20], "proper": [2, 8], "fairli": [2, 15, 19], "recent": [2, 3, 5, 12, 20], "agnost": 2, "henc": [2, 5, 14], "treat": [2, 18], "arbitrari": [2, 13], "ha": [2, 3, 5, 6, 7, 11, 12, 13, 14, 15, 16, 18, 20], "gain": [2, 18], "quit": [2, 4, 6, 11, 12], "At": [2, 5, 12, 15, 17], "mani": [2, 5, 8, 12, 14, 15, 16, 20], "old": [2, 4, 5, 6, 8, 10, 12, 16, 20], "reason": [2, 4, 5, 6, 11, 18, 20], "suffici": [2, 5, 6, 7, 11, 14], "prior": [2, 3, 5, 6, 8, 13, 16, 20], "happen": [2, 3, 4, 6, 7, 8, 11, 12, 19, 20], "natur": [2, 5, 8], "sort": 2, "latter": [2, 5, 7, 8, 13, 16, 18, 20], "set": [2, 4, 5, 6, 7, 10, 12, 14, 15, 16, 18, 19, 20], "much": [2, 5, 20], "compon": [2, 3, 8, 11, 14, 16], "account": [2, 5, 8, 20], "detail": [2, 5, 7, 9, 11, 13, 16, 20], "choic": [2, 6, 7, 13, 20], "chapter": [2, 8, 9], "along": [2, 5, 6, 7, 11, 13, 19, 20], "toolchain": [2, 8], "func": [2, 8], "commit": [2, 20], "6e5e8a57628095d8d0c8bbb38187afb0f3a42112": 2, "userspac": 2, "xbox": 2, "360": 2, "control": [2, 4, 5, 18], "driver": 2, "xboxdrv": 2, "gitlab": [2, 8], "io": [2, 4, 5, 8, 14, 19], "chewi": 2, "workdir": [2, 5], "lib": [2, 3, 5, 7, 9, 16, 18, 20], "boost": [2, 7], "glib": 2, "sy": [2, 5, 8, 11, 14, 15, 16, 20], "libudev": 2, "libusb": 2, "x11": 2, "libx11": 2, "src_compil": [2, 5, 6, 8, 14], "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, 19], "dobin": [2, 9], "doman": 2, "dodoc": [2, 5], "new": [2, 5, 6, 9, 10, 11, 13, 16, 18], "readm": [2, 12], "md": 2, "todo": [2, 9, 12], "yourself": [2, 4, 20], "becaus": [2, 5, 6, 15, 18, 20], "cannot": [2, 4, 5, 9, 11, 20], "my_p": 2, "src": [2, 5, 9, 20], "_rc": 2, "rc": 2, "high": [2, 12, 15, 19], "open": [2, 16], "sourc": [2, 3, 10, 12, 14, 17, 20], "schema": 2, "free": [2, 15, 20], "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, 18, 19, 20], "arch": [2, 5, 8, 12], "snappi": 2, "cpp": 2, "yaml": [2, 3], "70": 2, "thread": [2, 8, 18, 19, 20], "libpcr": 2, "42": 2, "zstd": 2, "snowbal": 2, "stemmer": 2, "net": [2, 8, 11, 14, 19], "libpcap": 2, "zlib": 2, "11": [2, 5, 10, 12, 20], "pymongo": 2, "cheetah3": 2, "psutil": 2, "pyyaml": 2, "type": [2, 3, 6, 13, 16], "ncurs": [2, 14], "readlin": [2, 5, 8, 14], "admin": [2, 8], "mongo": 2, "src_configur": [2, 5, 8, 9, 13, 14, 19], "scons_opt": 2, "cc": [2, 9], "getcc": [2, 9], "disabl": [2, 5, 8, 10, 12, 14, 19, 20], "warn": [2, 3, 5, 10, 16], "pcre": 2, "core": [2, 5, 20], "src_test": [2, 5, 6, 14], "buildscript": 2, "resmok": 2, "dbpathprefix": 2, "job": [2, 18], "makeopts_job": [2, 18], "die": [2, 3, 5, 8, 9, 14, 18, 20], "nostrip": [2, 8], "prefix": [2, 8, 9, 16, 20], "ed": [2, 9, 15], "everyth": [2, 13], "your": [2, 4, 5, 6, 7, 8, 11, 12, 15, 16, 18, 20], "python2_7": [2, 5, 6, 8, 13, 14, 19], "eutil": 2, "molecular": 2, "dynam": 2, "nmr": 2, "analysi": [2, 19], "relax": [2, 18], "gna": 2, "bz2": [2, 8, 19], "python_required_us": [2, 4, 5, 8, 10, 14, 19], "python_gen_cond_dep": [2, 4, 5, 8, 12, 13, 19], "numdifftool": 2, "matplotlib": [2, 5, 19], "python2": [2, 8, 9, 13, 19], "wxpython": [2, 19], "wx_gtk_ver": [2, 19], "sci": [2, 5, 19], "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, 19], "make_wrapp": [2, 9], "python_get_sitedir": [2, 3, 8, 9], "part": [2, 3, 4, 5, 8, 9, 12, 13, 14, 15, 18, 20], "That": [2, 16, 20], "fortran_need": 2, "fortran": 2, "fortran_standard": 2, "90": [2, 14], "object": [2, 11, 16, 19], "chemic": 2, "kinet": 2, "thermodynam": 2, "transport": 2, "cantera": 2, "v": [2, 4, 5, 14], "pch": 2, "sundial": 2, "eigen": 2, "libfmt": 2, "cython": [2, 10, 14, 19], "2_pkg_setup": 2, "scons_var": 2, "cc_flag": 2, "cxx_flag": 2, "std": 2, "debug": 2, "getfc": 2, "fortranflag": 2, "optimize_flag": 2, "wno": 2, "inlin": [2, 7, 14], "renamed_shared_librari": 2, "use_pch": 2, "usex": [2, 5, 19], "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, 18], "python2_packag": 2, "none": [2, 5, 6, 16], "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], "deal": [2, 7, 8, 10, 15], "sens": 2, "plain": [2, 5, 6, 13], "loop": [2, 5, 18], "autom": 2, "pipelin": [2, 20], "poisson": 2, "boltzmann": 2, "electrostat": 2, "calcul": 2, "poissonboltzmann": 2, "apb": 2, "opal": 2, "openbabel": 2, "zsi": 2, "lang": [2, 8, 11, 12, 19], "swig": [2, 19], "src_prepar": [2, 3, 5, 8, 9, 14, 16, 18], "f": [2, 9], "pyc": [2, 9], "o": [2, 5], "pyo": [2, 9], "delet": [2, 3, 14], "eappli": 2, "patch": [2, 5, 6, 8, 11, 12, 20], "eapply_us": 2, "rm": [2, 3, 5, 9], "rf": 2, "python_copy_sourc": [2, 14], "python_configur": 2, "cat": [2, 5], "build_dir": [2, 3, 9, 14, 20], "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, 3, 14], "cd": [2, 5, 9, 12, 20], "let": [2, 4, 8, 16, 19], "independ": [2, 5, 6, 7, 14, 19], "separ": [2, 5, 6, 7, 8, 11, 14, 18, 20], "presum": 2, "manual": [2, 6, 10, 12], "wider": 2, "target": [2, 5, 8, 9, 11, 12, 15, 19], "rang": [2, 5, 12], "recommend": [2, 5, 7, 12, 13, 14, 16, 18, 19, 20], "gp": [2, 8], "daemon": [2, 8], "usb": [2, 8], "serial": [2, 5, 8], "devic": [2, 8], "map": [2, 5, 6, 8, 18], "client": [2, 8, 9, 11, 14], "gpsd": [2, 8], "mirror": [2, 4, 5, 6, 8, 14, 19, 20], "nongnu": [2, 8], "24": [2, 8, 18, 20], "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, 20], "construct": [2, 4, 8, 19], "pkg_config": 2, "shlinkflag": 2, "destdir": [2, 8, 9], "bundl": [2, 5, 12], "simpl": [2, 5, 7, 13, 14, 17], "impli": [2, 9, 11], "python_req_us": [2, 4, 5, 6, 8, 14, 19], "individu": [2, 5, 11, 18], "applic": [2, 9, 12], "had": 2, "instead": [2, 3, 5, 6, 7, 8, 9, 13, 14, 16, 18, 19, 20], "no_waf_libdir": 2, "ye": 2, "unit": 2, "framework": [2, 3, 5, 11, 17], "mrzechonek": 2, "tut": 2, "roughli": [2, 9, 12, 13], "ldap": 2, "ldb": 2, "samba": [2, 19], "ftp": [2, 19], "pub": 2, "elibc_freebsd": 2, "libbsd": 2, "popt": 2, "talloc": [2, 19], "tevent": 2, "9": [2, 5, 10, 12, 20], "31": 2, "tdb": 2, "12": [2, 5, 8, 16, 18], "nd": 2, "openldap": 2, "libxslt": 2, "waf_binari": [2, 19], "buildtool": [2, 19], "filesdir": 2, "27": [2, 8], "optional_packag": 2, "myconf": [2, 8], "rpath": 2, "modulesdir": 2, "builtin": 2, "utils_src_configur": [2, 19], "tradition": 3, "python": [3, 6, 17, 18, 20], "organ": 3, "subpackag": [3, 5], "locat": [3, 5], "parent": [3, 9], "directori": [3, 6, 9, 10, 11, 12, 13, 14, 16, 18, 20], "submodul": 3, "repres": [3, 5], "attribut": [3, 10, 16], "session": [3, 20], "addnod": 3, "site": [3, 5, 6, 9, 11, 16, 18, 20], "fine": [3, 5, 12, 16], "start": [3, 5, 6, 11, 12, 15, 16, 20], "problemat": [3, 5, 6, 10, 18], "top": [3, 5, 9, 18], "level": [3, 5, 9, 11, 20], "layout": [3, 6, 13], "wish": [3, 5, 6], "zope": 3, "share": [3, 5], "interfac": [3, 6, 11, 16], "event": [3, 18], "depend": [3, 6, 7, 9, 10, 11, 12, 13, 15, 17], "far": [3, 12, 19], "concern": 3, "entir": [3, 5, 9, 10, 12, 13, 14, 20], "doabl": 3, "real": [3, 18, 20], "we": [3, 4, 6, 8, 11, 12, 14, 15, 17], "freshli": 3, "build": [3, 9, 10, 11, 16, 20], "abl": [3, 15], "tmp": [3, 5, 9, 18, 20], "portag": [3, 8, 12, 14, 15, 18, 20], "python3_8": 3, "traceback": [3, 5, 20], "last": [3, 5], "stdin": 3, "modulenotfounderror": 3, "No": [3, 5], "now": [3, 5, 6, 8, 13, 14, 20], "around": [3, 5, 6, 12, 20], "back": [3, 6, 16], "better": [3, 6, 11, 12, 13, 14], "solut": [3, 5, 16, 20], "unlik": [3, 5, 6, 11, 15], "tradit": 3, "act": 3, "proxi": [3, 14], "strictli": [3, 5, 6, 15, 20], "bound": [3, 11, 16], "permit": [3, 4, 5, 6, 11, 15], "load": [3, 7, 9, 18, 20], "search": [3, 10, 20], "method": [3, 5, 11, 13, 16, 18, 20], "420": 3, "newer": [3, 4, 5, 6, 12, 16], "pkgutil": 3, "standard": [3, 4, 6, 7, 9, 10, 11, 14, 16, 20], "discourag": [3, 6], "earlier": [3, 13], "ignor": [3, 4, 5, 8, 18, 20], "did": [3, 13, 16, 20], "within": [3, 5, 6, 12, 17, 20], "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, 20], "pth": 3, "automat": [3, 4, 5, 6, 10, 12], "inject": [3, 5, 19], "portabl": 3, "topic": [3, 17], "exact": [3, 5, 11, 19], "detect": [3, 5, 9, 20], "recogn": [3, 5, 16], "lack": [3, 9, 20], "action": [3, 5], "distinguish": [3, 5, 13], "veri": [3, 5, 6, 9, 11, 12, 17], "through": [3, 4, 5, 6, 8, 11, 16, 18, 20], "suspici": 3, "less": [3, 20], "ruamel": 3, "miss": [3, 5, 6, 9, 10, 11, 12, 13, 17, 18], "learn": 3, "about": [3, 6, 13], "collis": [3, 5, 20], "namespace_packag": 3, "per": [3, 5], "remov": [3, 4, 5, 6, 11, 12, 13, 14, 15, 18, 20], "tree": [3, 5, 13, 20], "after": [3, 5, 6, 9, 12, 13, 16], "python_compil": 3, "r1_python_compil": [3, 5], "jaraco": [3, 5, 12, 18], "equival": [3, 6, 8, 9, 13], "r1_python_instal": [3, 5], "python_install_al": [3, 5], "r1_python_install_al": [3, 5], "explicit": [3, 4, 5, 6, 19, 20], "rdep": 3, "sed": [3, 5, 8, 14, 18, 20], "i": [3, 5, 6, 7, 11, 12, 14, 16, 18, 20], "r1_src_prepar": [3, 5, 18], "histor": [3, 5, 6, 13, 16], "process": [3, 5, 7, 12, 16, 19], "retir": 3, "major": [4, 5, 6, 11, 12, 20], "avail": [4, 5, 6, 8, 12, 13, 16, 17], "sqlite3": 4, "sqlite": [4, 8], "xdg": 4, "music": 4, "lollypop": 4, "adishatz": 4, "syntax": [4, 10, 11], "lightweight": [4, 5], "password": 4, "backend": [4, 10, 12, 13], "pwman3": 4, "mysql": [4, 14], "postgr": 4, "fulli": [4, 5, 7], "solv": [4, 17], "python_gen_impl_dep": 4, "helper": [4, 5, 7, 10, 14, 19, 20], "2_7": [4, 5], "3_": 4, "travel": 4, "spulec": 4, "freezegun": [4, 18, 20], "pypi": [4, 5, 6, 8, 10, 11, 13], "dateutil": 4, "six": [4, 5, 8], "nose": [4, 5, 20], "distutils_enable_test": [4, 13, 18, 20], "ll": [4, 14], "backport": [4, 6, 10, 12], "zero": 4, "argument": [4, 6, 10, 13, 16, 20], "output": [4, 5, 6, 9, 16, 20], "everi": [4, 5, 6, 8, 12, 14, 16], "escap": [4, 13, 19], "quot": [4, 19], "partial": [4, 5, 9, 10, 13], "python_single_usedep": [4, 5, 13, 19], "cli": [4, 5], "black": 4, "click": 4, "fnmatch": 4, "style": [4, 5, 13, 17, 18, 20], "wildcard": 4, "stdlib": [4, 13, 16], "rememb": [4, 12], "pattern": [4, 12, 13, 19], "prevent": [4, 10, 11, 19, 20], "filenam": [4, 5], "expans": 4, "expand": 4, "zoneinfo": 4, "advantag": [4, 5, 7, 18, 20], "adjust": [4, 9, 11, 16], "switch": [4, 7, 9, 12, 13, 20], "list": [4, 5, 8, 12, 13, 18], "longer": [4, 5, 6, 13], "silent": 4, "updat": [4, 6, 9, 11, 12, 16], "immedi": [4, 5, 19], "becam": [4, 11], "empti": [4, 5], "importlib_metadata": [4, 5, 6], "python3_7": [4, 8], "facilit": [5, 9], "deriv": [5, 6], "notabl": [5, 16], "effici": 5, "oper": [5, 17], "backward": [5, 11, 12, 16], "incompat": [5, 6, 11, 16, 18, 20], "greater": [5, 7], "number": [5, 7, 12, 18], "cost": 5, "flexibl": [5, 7], "wheel": [5, 12, 18], "zip": [5, 6], "stage": [5, 12, 20], "compil": [5, 6, 10, 11, 20], "mere": [5, 7], "imag": [5, 9], "compliant": [5, 7], "invok": [5, 18, 20], "popul": [5, 15], "addition": [5, 9, 11, 14], "pyproject2setuppi": [5, 6, 13], "hack": [5, 6, 7, 13], "reli": [5, 6, 11, 20], "distutils_use_pep517": [5, 13], "legal": 5, "unset": [5, 6], "By": [5, 6, 11], "2022": [5, 13, 18], "xml": [5, 6], "feel": [5, 15], "json": 5, "martinblech": 5, "xmltodict": 5, "mit": [5, 6], "vast": [5, 12], "index": [5, 10], "sdist": [5, 20], "binari": [5, 9, 12], "vc": [5, 20], "mechan": [5, 7, 11], "over": [5, 7, 11, 12, 18, 19, 20], "offici": 5, "instanc": [5, 13], "nonfunct": 5, "append": [5, 14], "uniqu": [5, 14], "suffix": 5, "gh": [5, 20], "request": [5, 8, 10], "distfil": [5, 16, 19], "clearli": [5, 20], "tarbal": [5, 12, 20], "textual": 5, "rich": 5, "implic": 5, "cf": [5, 12], "regener": [5, 12], "anywai": [5, 16], "nevertheless": 5, "even": [5, 8, 9, 11, 18, 20], "pregener": 5, "internet": [5, 10, 18], "nodej": 5, "underli": [5, 6, 7], "txt": [5, 6, 12, 18], "ci": [5, 20], "travi": 5, "yml": 5, "grep": 5, "statement": 5, "indirect": 5, "relev": [5, 6, 13, 17, 18, 20], "unnecessarili": 5, "logic": [5, 6, 12], "long": [5, 11, 12], "quickli": 5, "widest": 5, "avoid": [5, 6, 8, 10, 15, 16, 17, 20], "unpredict": 5, "who": [5, 17], "especi": [5, 7, 18, 20], "distutils_single_impl": [5, 7], "aim": [5, 11, 15, 17], "exist": [5, 10, 11, 12], "rewritten": [5, 19], "layer": [5, 14], "pyroot": 5, "rootpi": 5, "physic": [5, 19], "root_numpi": 5, "pytabl": 5, "termcolor": 5, "determin": [5, 6, 7, 11, 19, 20], "flit_cor": [5, 12], "maintain": [5, 10, 11, 12, 18], "suggest": [5, 8, 13, 17, 18, 20], "tabl": [5, 13, 16, 18], "summar": [5, 16], "use_pep517": 5, "flit_scm": 5, "hatchl": 5, "jupyt": 5, "jupyter_packag": 5, "build_api": 5, "maturin": 5, "see": [5, 9, 16, 18, 20], "below": [5, 8], "pbr": [5, 6], "pdm": [5, 13], "pep517": 5, "sip": [5, 8], "sipbuild": 5, "standalon": [5, 12], "itself": [5, 6, 8, 9, 12, 18], "own": [5, 12, 20], "Their": [5, 6, 9], "fix": [5, 6, 10, 11, 12, 16, 18, 20], "produc": [5, 12], "ident": 5, "artifact": 5, "reduc": 5, "footprint": 5, "isol": 5, "faster": 5, "poetry_cor": 5, "smaller": 5, "40": [5, 12], "incorrect": [5, 6], "intend": [5, 16, 20], "implicit": [5, 14, 20], "fallback": [5, 6], "regular": [5, 7, 20], "pleas": [5, 6, 8, 9, 12, 15, 16, 18, 19, 20], "alwai": [5, 6, 8, 11, 13, 16, 17], "unfortun": [5, 13, 18, 20], "due": [5, 10, 12, 14, 18], "prolong": 5, "larg": [5, 12, 15, 18], "tend": 5, "mistak": 5, "checkout": [5, 12, 20], "abil": [5, 6], "tag": [5, 12, 20], "execut": [5, 6, 7, 9, 11, 12, 13, 14, 20], "143": 5, "_install_setup_requir": 5, "attr": [5, 12], "131": 5, "dist": 5, "dict": [5, 19], "425": 5, "_distribut": 5, "self": [5, 16, 18, 20], "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, "lookuperror": 5, "scm": 5, "unabl": [5, 20], "sure": [5, 18, 20], "re": [5, 8, 15, 20], "intact": 5, "git": [5, 12, 20], "folder": 5, "don": [5, 13], "t": [5, 7, 8, 11, 13, 20], "pip": [5, 12, 20], "proj": 5, "master": [5, 20], "egg": [5, 6, 18], "setuptools_scm_pretend_vers": 5, "static": [5, 8], "write": [5, 6, 7, 12, 17], "hybrid": [5, 10], "expos": [5, 6], "guarante": [5, 6], "taken": [5, 20], "ship": 5, "issu": [5, 6, 13, 16, 18, 20], "forc": [5, 6, 8, 9, 12, 13, 18, 20], "frobnic": 5, "makefil": [5, 14], "jq": 5, "pyx": 5, "unresolv": 5, "regard": 5, "simultan": [5, 11, 17, 20], "link": [5, 7, 9, 16], "editor": 5, "broken": [5, 6, 18, 20], "cryptic": 5, "revers": [5, 7, 12, 15], "miscompil": 5, "panda": 5, "breakag": [5, 20], "dask": [5, 18], "29": 5, "_lib": 5, "hashtabl": 5, "_hashtabl": 5, "tslib": 5, "_tslib": 5, "13": [5, 18, 20], "interv": 5, "init": 5, "30": 5, "convers": [5, 6], "outofboundstimedelta": 5, "localize_pydatetim": 5, "importerror": [5, 6, 10, 11], "38": 5, "x86_64": 5, "undefin": 5, "symbol": 5, "pandas_datetime_to_datetimestruct": 5, "easiest": [5, 19], "workaround": 5, "j1": 5, "origin": [5, 9, 11, 12, 16], "overrid": [5, 9, 14, 20], "extend": [5, 11], "introduc": [5, 11], "src_": 5, "python_": [5, 8], "_all": [5, 8], "compris": 5, "behav": [5, 8], "r1_": 5, "correspond": [5, 12], "python_prepare_al": [5, 18], "each": [5, 6, 7, 11, 14], "foreach": 5, "python_configure_al": 5, "python_compile_al": [5, 8], "python_test_al": 5, "dedic": [5, 6, 14], "chang": [5, 6, 8, 9, 10, 11, 13, 14, 15, 20], "task": [5, 8, 12], "default_src_prepar": 5, "ez_setup": 5, "bootstrap": [5, 6, 10], "end": [5, 6, 7, 9, 12, 14, 18, 20], "dir": [5, 14], "extran": 5, "fixm": 5, "test_pytest_plugin": 5, "test_testcase_no_app": 5, "_": [5, 12, 20], "test_test_util": 5, "pointless": 5, "cov": [5, 18], "addopt": 5, "aiohttp": [5, 18], "r1_python_prepare_al": [5, 18], "duplic": [5, 14, 20], "moment": [5, 12, 13, 15], "modif": 5, "keep": [5, 15, 17], "why": [5, 6, 20], "console_script": [5, 6], "configur": [5, 6, 8, 13, 14, 20], "step": [5, 6, 7, 8, 14], "esetup": [5, 8], "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, 18], "too": [5, 12, 20], "collada": 5, "einstalldoc": [5, 8, 14], "docinto": 5, "sample_cod": 5, "docompress": 5, "pf": 5, "main": [5, 9], "manipul": [5, 20], "arrai": 5, "futur": [5, 15], "pillow": 5, "build_ext": [5, 6, 20], "tiff": 5, "webp": 5, "dash": 5, "underscor": [5, 20], "boolean": 5, "disable_tiff": 5, "enable_tiff": 5, "disable_webp": 5, "enable_webp": 5, "modifi": [5, 6, 11, 20], "beforehand": 5, "econf": [5, 19], "paremet": 5, "find_packag": 5, "wrongli": [5, 16, 20], "grab": [5, 13], "attempt": [5, 16, 20], "forbidden": 5, "exclud": 5, "paramet": [5, 8, 16], "properli": [5, 6, 13], "intermedi": 5, "minim": [5, 11, 15], "precis": [5, 8, 9], "catch": 5, "earli": [5, 7, 8, 12], "anywher": 5, "first": [5, 6, 11, 12, 15, 16, 18, 20], "easi": [5, 16, 20], "whitelist": 5, "sanit": [5, 16], "mozilla": 5, "bleach": 5, "webencod": 5, "unittest": [5, 11, 20], "discoveri": [5, 18, 20], "univers": 5, "encod": [5, 16], "detector": 5, "chardet": [5, 8], "cygwin": [5, 6], "hypothesi": [5, 20], "bottom": 5, "venv": [5, 6, 13], "temporari": [5, 6], "frequent": [5, 18], "littl": [5, 6, 18], "skip": [5, 8, 10, 12, 16], "those": [5, 6, 8, 9, 18, 20], "how": [5, 20], "statist": 5, "want": [5, 6, 8], "across": 5, "irrelev": [5, 20], "pep8": 5, "pycodestyl": 5, "flake8": [5, 18], "thin": [5, 6], "alreadi": [5, 9, 12, 14], "close": 5, "pre": 5, "post": [5, 6, 13], "easili": [5, 14, 18, 20], "r1_src_test": 5, "cmd": 5, "cmd2": 5, "colorama": 5, "pyperclip": 5, "wcwidth": 5, "text": [5, 8], "column": 5, "80": 5, "fact": [5, 20], "simpli": [5, 16, 17, 20], "3_6": [5, 14], "3_7": [5, 14], "3_8": 5, "tab": 5, "argpars": 5, "argcomplet": 5, "fish": 5, "tcsh": 5, "rel": [5, 18, 20], "epytest": [5, 6, 8, 12, 18, 20], "network": [5, 6, 18, 20], "marker": [5, 10], "m": [5, 18, 20], "displai": 5, "appeas": 5, "usng": 5, "xvfb": 5, "server": [5, 20], "virtx": 5, "nonfat": 5, "termin": [5, 20], "context": [5, 19], "come": [5, 13, 18], "theme": [5, 6, 8], "hard": [5, 8, 12], "To": [5, 6, 8, 9, 12, 16, 18, 19], "conf": [5, 6], "ext": 5, "distutils_use_setuptool": [5, 13], "color": 5, "stream": 5, "handler": 5, "log": 5, "coloredlog": 5, "xolox": 5, "readthedoc": 5, "en": 5, "latest": 5, "humanfriendli": 5, "expert": [5, 10, 14, 20], "uncommon": 5, "third": [5, 7, 13], "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, "been": [5, 6, 8, 11, 12, 13, 14, 16, 18], "assumpt": 5, "consum": [5, 6, 20], "distutils_opt": 5, "alter": [5, 18], "distutils_dep": 5, "dependneci": 5, "r1_src_compil": 5, "r1_src_instal": 5, "primari": [5, 18], "alongsid": [5, 6], "libfoo": 5, "r1_src_configur": 5, "setuptools_rust": 5, "ecosystem": [5, 15, 17], "bump": [5, 12, 15], "lock": 5, "Then": [5, 12], "crate": 5, "cargo_opt": 5, "url": [5, 16], "cargo_crate_uri": 5, "qa_flags_ignor": 5, "posit": 5, "cflag": [5, 9, 20], "cargo_src_unpack": 5, "inflector": 5, "alias": [5, 16], "asn1": 5, "asn1_der": 5, "_rust": 5, "src_unpack": 5, "benefit": [5, 7], "yet": [5, 8, 12, 19], "cyclic": 5, "suppos": [5, 16], "overlap": 5, "machineri": 5, "op": 5, "unless": [5, 6, 8, 15], "merg": 5, "toward": 5, "effect": [5, 8, 11], "pick": [5, 12], "up": [5, 6, 9, 12, 13, 14, 17, 18, 20], "hukkin": 5, "tomli": [5, 12], "pythonhost": 5, "py3": [5, 18], "whl": 5, "unzip": 5, "deliber": 5, "unpack": 5, "gpep517": 5, "python_newscript": [5, 9], "__main__": [5, 20], "exit": [5, 16, 20], "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, 19], "direct": [6, 14], "convert": [6, 8, 13], "facil": 6, "right": [6, 7], "fit": [6, 20], "profil": [6, 15], "pyproject2toml": 6, "misbehav": 6, "subsequ": 6, "qa": [6, 9, 17], "expect": [6, 18, 20], "sidebar": 6, "bitprophet": 6, "snippet": [6, 16], "except": [6, 7, 9, 11, 12, 16], "pm": 6, "cleanli": [6, 12], "condit": [6, 10, 12, 18, 20], "leav": 6, "never": [6, 11, 13], "clean": [6, 12, 13], "requier": 6, "With": [6, 20], "themselv": [6, 18, 20], "entry_point": [6, 18], "dictionari": [6, 19], "our": [6, 12, 18, 20], "interest": [6, 8, 20], "gui_script": 6, "meaning": 6, "importlib": [6, 11, 20], "fall": [6, 16], "remind": 6, "distutils_strict_entry_point": 6, "trigger": [6, 18, 20], "wrong": [6, 13], "leftov": 6, "resourc": [6, 11, 12], "submit": 6, "suppli": 6, "heavi": 6, "speak": [6, 11], "known": [6, 16, 20], "limit": [6, 12, 15, 17], "address": [6, 12, 16], "definit": 6, "subdirectori": [6, 9], "interspers": 6, "closest": 6, "inplac": 6, "shift": [6, 11], "throughout": 6, "2to3": 6, "distutils_in_source_build": 6, "collect": [6, 18, 20], "pypa": 6, "riscv": [6, 8, 19], "pythonpath": [6, 20], "distutils_install_for_test": [6, 13, 18, 20], "alik": [6, 7, 11, 13], "preserv": [6, 11], "extrem": 6, "home": [6, 12, 13], "went": 6, "awai": [6, 7], "python_test": [6, 8, 9, 12, 18, 20], "total": 7, "rare": [7, 9, 18, 20], "simpler": 7, "complex": [7, 19], "primarili": [7, 11], "involv": [7, 8, 13], "graph": [7, 12], "meet": 7, "potenti": [7, 12, 16, 18], "basi": 7, "occur": [7, 18], "libpython": [7, 16], "aforement": [7, 13, 16], "foo": [7, 16], "wise": 7, "abstract": [7, 14], "scon": [7, 8, 10], "second": [7, 13], "easier": 7, "select": [7, 8, 18, 19], "allow": [7, 20], "repeat": [7, 14], "model": 7, "libboost_python": 7, "python_single_target": [7, 11, 12], "Its": [7, 12], "legaci": [7, 10, 13, 16], "power": 8, "harder": 8, "ninja": 8, "train": 8, "opposit": [8, 11, 13], "investig": 8, "human": 8, "beings": 8, "socks5": 8, "ssl": 8, "certifi": 8, "2017": 8, "17": 8, "idna": 8, "urllib3": [8, 12], "26": 8, "pysock": 8, "cryptographi": 8, "pyopenssl": 8, "14": [8, 20], "httpbin": [8, 18], "hang": 8, "continu": [8, 12, 20], "python_gen_useflag": 8, "out": [8, 9, 10, 11, 12, 13, 14, 15], "toolkit": 8, "translat": 8, "format": [8, 12, 16], "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, 19], "bison": 8, "flex": 8, "prepar": [8, 9, 19], "bindir": 8, "incdir": 8, "python_get_includedir": [8, 9, 13], "echo": 8, "distutils_all_subphase_impl": 8, "python3_5": 8, "bzip2": 8, "epydoc": 8, "eselect": 8, "elibc_glibc": 8, "sandbox": [8, 20], "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, 12], "resembl": [8, 18], "presenc": [8, 18], "activ": [8, 17], "behavior": [8, 11, 16], "goal": [8, 12, 20], "side": [8, 11], "someth": [8, 9, 20], "accord": 8, "integr": [8, 9, 10, 11], "won": 8, "reject": [8, 15, 16], "unsupport": [8, 11], "python_is_python3": [8, 13], "basic": [9, 10, 20], "reus": 9, "four": [9, 13, 19], "python_doex": 9, "python_newex": 9, "python_doscript": [9, 14, 19], "recurs": [9, 15, 18], "python_dohead": 9, "python_scriptinto": 9, "affect": [9, 14], "symlink": 9, "onto": 9, "improv": [9, 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, 12], "_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, "mycmakearg": [9, 13, 19], "dpython_dest": 9, "dpython_execut": 9, "dpython_include_dir": 9, "dpython_librari": 9, "cmake_src_configur": [9, 19], "pyinc": 9, "pylib": 9, "micha\u0142": 10, "g\u00f3rny": 10, "creativ": 10, "intern": 10, "prefac": 10, "choos": [10, 11, 14], "overview": 10, "variant": [10, 11, 16, 18], "snapshot": [10, 20], "parallel": 10, "race": 10, "command": [10, 14, 18], "usag": 10, "rust": 10, "cargo": 10, "variat": 10, "vs": [10, 13], "byte": [10, 16], "queri": [10, 16], "advanc": 10, "cffi": 10, "greenlet": [10, 18], "checklist": 10, "abort": 10, "assert": 10, "recip": 10, "xdist": [10, 12, 20], "autoload": 10, "typeerror": 10, "_make_test_flaki": 10, "got": [10, 13], "unexpect": 10, "rerun": 10, "importpathmismatcherror": 10, "fixtur": [10, 12], "namespac": [10, 18], "disjoint": 10, "waf": [10, 19], "tip": [10, 20], "retroact": 10, "migrat": 10, "mainten": 10, "co": [10, 20], "life": 10, "cycl": 10, "page": [10, 16, 17], "increment": 11, "minor": [11, 20], "plan": 11, "On": 11, "hand": [11, 13], "platform": [11, 16, 20], "linux_distribut": 11, "window": 11, "hous": 11, "rpython": 11, "lot": [11, 15], "good": [11, 17, 18, 20], "gc": 11, "jython": 11, "java": 11, "stand": 11, "alon": 11, "bidirect": 11, "interact": 11, "slow": 11, "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], "ideal": [11, 15, 20], "funcsig": 11, "signatur": [11, 16], "afterward": [11, 14, 15], "becom": [11, 12, 16], "later": 11, "lzma": 11, "compet": 11, "amount": [11, 12, 20], "ipaddress": 11, "drop": [11, 16], "box": [11, 13], "hexvers": [11, 20], "0x03030000": 11, "remain": [11, 13], "trolliu": 11, "asyncio": [11, 18, 20], "nativ": 11, "understood": 12, "stabl": [12, 15], "mask": [12, 15], "readi": [12, 15], "stabil": 12, "inconsist": [12, 20], "repeatedli": 12, "ask": [12, 15], "push": 12, "forward": 12, "eventu": 12, "slowli": [12, 15], "discontinu": 12, "next": [12, 15, 18], "nears": 12, "obsolet": [12, 13], "live": 12, "team": [12, 15], "unmask": 12, "announc": 12, "date": [12, 17, 20], "thing": [12, 13, 17, 18], "progress": 12, "decid": [12, 18], "somewher": 12, "aggress": 12, "reach": [12, 15], "clear": 12, "pursu": 12, "kept": 12, "secur": 12, "workflow": 12, "clone": 12, "remot": [12, 20], "fetch": 12, "rebas": 12, "v3": 12, "cherri": 12, "upload": 12, "mkdir": 12, "scp": 12, "precompil": 12, "unusu": 12, "structur": [12, 20], "ex": 12, "technic": 12, "docker": 12, "binpkg": 12, "diff": 12, "relat": [12, 13, 20], "mgorni": 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, "circular": 12, "eas": [12, 15], "temporarili": [12, 13], "python3_11": 12, "20": 12, "pwd": 12, "round": 12, "signific": [12, 18], "remaind": 12, "pydant": 12, "epytest_deselect": [12, 18], "test_comparison": 12, "test_close_to_now_": 12, "lenient": 12, "deselect": [12, 18, 20], "unblock": 12, "100": 12, "emerg": 12, "previous": 12, "reinstal": 12, "batch": 12, "focus": 12, "reenabl": [12, 18], "face": [12, 20], "goe": [12, 20], "unbundl": 12, "obligatori": 12, "baselin": 12, "ones": 12, "chosen": 12, "fewest": 12, "vendor": [12, 13], "februari": 13, "gross": 13, "serv": 13, "placehold": 13, "transit": [13, 15], "period": 13, "ban": 13, "python_multi_usedep": 13, "know": [13, 16, 20], "given": 13, "repoman": 13, "pkgcheck": 13, "tell": 13, "chose": 13, "reorder": 13, "desir": [13, 16, 20], "scan": 13, "unmatch": 13, "trial": 13, "stuff": 13, "privat": 13, "python_export": 13, "python_wrapper_setup": 13, "python_gen_usedep": 13, "mydistutilsarg": 13, "renam": [13, 16], "cleanup": 13, "python_gen": 13, "march": 13, "python_get": 13, "python_includedir": 13, "python_libpath": 13, "dpython3_include_dir": 13, "dpython3_librari": 13, "sundri": 13, "stop": [13, 16], "realli": [13, 15, 18, 20], "ugli": 13, "sole": 13, "uppercas": 13, "fourth": 13, "cruft": 13, "short": [13, 18], "made": [13, 14, 16, 19], "evalu": 13, "januari": 13, "safe": 13, "streamlin": 13, "inde": 13, "foundat": 14, "fionet": 14, "psql": 14, "cach": 14, "sourceforg": [14, 19], "replic": 14, "tgz": 14, "libcangji": 14, "cangjian": 14, "i18n": 14, "eautoreconf": [14, 16], "econf_sourc": 14, "la": 14, "multibuild": 14, "unnecessari": [14, 19, 20], "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, 19], "routin": 14, "qemu": 14, "kernel": 14, "machin": 14, "userland": 14, "kvm": 14, "qemu_python_instal": 14, "vmxcap": 14, "qmp": 14, "ga": 14, "eol": 15, "proactiv": 15, "anticip": 15, "soon": 15, "mark": [15, 18, 20], "wide": [15, 20], "revis": 15, "newli": 15, "risk": 15, "break": [15, 16], "feasibl": 15, "manpow": 15, "member": 15, "prematur": 15, "gemato": 15, "carri": 15, "compar": 16, "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, "worm": 16, "danger": 16, "worst": [16, 20], "unpars": 16, "django": [16, 20], "pr": 16, "14349": 16, "impact": 16, "urlpars": 16, "nurl": 16, "parseresult": 16, "scheme": 16, "netloc": 16, "param": [16, 18], "badurl": 16, "what": 16, "attributeerror": 16, "492": 16, "decor": [16, 20], "async": [16, 18], "def": [16, 18, 20], "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, "hold": 16, "int": 16, "str": 16, "float": 16, "k6": 16, "k7": 16, "k8": 16, "One": [16, 20], "prototyp": 16, "bar": 16, "pretti": 16, "spec": 16, "stringif": 16, "automak": 16, "16": 16, "exec_prefix": 16, "met": 16, "pkg_config_path": 16, "python_cflag": 16, "python_lib": 16, "man": 16, "autoreconf": 16, "throw": 16, "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, "contrari": 16, "ought": 16, "unicod": 16, "version_info": 16, "b64_encodebyt": 16, "b64encod": 16, "b64decod": 16, "insert": 16, "newlin": 16, "length": 16, "until": 16, "emb": 16, "lpython3": 16, "7m": 16, "among": 17, "beyond": 17, "reliabl": [17, 20], "deep": 17, "beginn": 17, "peopl": 17, "suboptim": 17, "improp": 17, "fill": 17, "gap": 17, "welcom": 17, "whole": [18, 20], "parametr": 18, "epytest_ignor": 18, "test_client": 18, "test_gener": 18, "test_filenam": 18, "test_transport": 18, "test_transport_work": 18, "eventlet": 18, "test_contextvar": 18, "test_leak": 18, "might": 18, "intent": 18, "Not": 18, "collid": [18, 20], "instabl": 18, "unstabl": 18, "discret": 18, "justifi": 18, "semi": 18, "random": 18, "multiprocess": 18, "finish": 18, "01": 18, "chanc": 18, "experienc": 18, "insuffici": 18, "nest": 18, "envvar": 18, "pytest_disable_plugin_autoload": 18, "pytest_plugin": 18, "comma": 18, "looponfail": 18, "pytest_fork": 18, "flaki": [18, 20], "rerunfailur": 18, "supposedli": 18, "twice": 18, "_pytest": [18, 20], "pathlib": [18, 20], "posixpath": 18, "confus": 18, "signifi": 18, "event_loop": 18, "freezer": 18, "mocker": 18, "captur": [18, 20], "summari": 18, "asgiref": 18, "sync": 18, "135": 18, "test_loc": 18, "test_sync": 18, "test_sync_contextvar": 18, "deprecationwarn": 18, "main_event_loop": 18, "get_event_loop": 18, "filterwarn": 18, "fatal": [18, 20], "_____________________": 18, "______________________": 18, "577": 18, "asgitest": 18, "testcas": 18, "583": 18, "test_wrapped_case_is_collect": 18, "interrupt": 18, "world": 18, "plot": 19, "voacap": 19, "propag": 19, "predict": 19, "qsl": 19, "hz1jw": 19, "pythonprop": 19, "basemap": 19, "gtk2": 19, "doubl": 19, "energi": 19, "yoda": 19, "hepforg": 19, "use_en": 19, "pyext": 19, "extra_opt": 19, "give": 19, "sound": 19, "signal": [19, 20], "composit": 19, "csound": 19, "fordfrog": 19, "dbuild_python_interfac": 19, "dbuild_python_opcod": 19, "superset": 19, "arab": 19, "arabey": 19, "duali": 19, "pyduali": 19, "dict2db": 19, "trans2arab": 19, "arabic2tran": 19, "domain": 20, "firstli": 20, "idea": 20, "nosetest": 20, "secondli": 20, "strict": 20, "thirdli": 20, "readabl": 20, "wholli": 20, "spew": 20, "seem": 20, "equal": 20, "ceas": 20, "downstream": 20, "convinc": 20, "preced": 20, "area": 20, "____________________": 20, "systemd": 20, "test_login": 20, "234": 20, "hint": 20, "578": 20, "_importtestmodul": 20, "mod": 20, "import_path": 20, "fspath": 20, "importmod": 20, "524": 20, "import_modul": 20, "module_nam": 20, "127": 20, "_bootstrap": 20, "_gcd_import": 20, "frozen": 20, "1014": 20, "991": 20, "_find_and_load": 20, "975": 20, "_find_and_load_unlock": 20, "671": 20, "_load_unlock": 20, "rewrit": 20, "170": 20, "exec_modul": 20, "__dict__": 20, "login": 20, "r2": 20, "discov": 20, "pyarg": 20, "guess": 20, "quick": 20, "mayb": 20, "eunittest": 20, "confirm": 20, "whom": 20, "myself": 20, "subtl": 20, "lead": 20, "But": 20, "bewar": 20, "unexpectedli": 20, "test_start_params_bug": 20, "xfail": 20, "statsmodel": 20, "tsa": 20, "test_arima": 20, "horrend": 20, "disk": 20, "space": 20, "mayhem": 20, "5a": 20, "test_null_byt": 20, "skipif": 20, "0x03000000": 20, "unconditioanlli": 20, "test_babel_with_language_": 20, "test_build_latex": 20, "test_polyglossia_with_language_": 20, "altogeth": 20, "replai": 20, "devmanu": 20, "explan": 20, "connect": 20, "pygit2": 20, "no_network": 20, "properti": 20, "test_network": 20, "allow_test": 20, "unclear": 20, "backtrac": 20, "pluggi": 20, "cachedir": 20, "pytest_cach": 20, "rootdir": 20, "var": 20, "sabyenc": 20, "configfil": 20, "item": 20, "test_decod": 20, "test_crc_pickl": 20, "54": 20, "test_empty_size_pickl": 20, "0x00007f748bc47740": 20, "testsupport": 20, "74": 20, "sabyenc3_wrapp": 20, "119": 20, "180": 20, "pytest_pyfunc_cal": 20, "caller": 20, "187": 20, "_multical": 20, "temp": 20, "2934": 20, "66": 20, "dump": 20, "vv": 20, "34": 20, "23": 20, "timeout": 20, "25": 20, "sabyenc3": 20, "596": 20, "decode_usenet_chunk": 20, "pybytearray_check": 20, "pylist_getitem": 20, "py_input_list": 20, "lp": 20, "0x00007fb5db746740": 20, "73": 20, "117": 20, "87": 20, "lambda": 20, "runpi": 20, "85": 20, "_run_cod": 20, "193": 20, "_run_module_as_main": 20, "initi": 20, "reproduc": 20, "ubuntu": 20, "dndebug": 20, "leak": 20, "o0": 20, "isort": 20, "distutils_pep517_instal": 20, "destin": 20, "cp": 20, "pushd": 20, "null": 20, "popd": 20}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"python": [0, 1, 2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 19], "ani": [0, 8], "r1": [0, 2, 5, 6, 7, 8, 13, 14, 19], "build": [0, 1, 2, 5, 6, 7, 8, 12, 13, 14, 19], "time": [0, 2, 7, 8, 14, 19], "depend": [0, 1, 2, 4, 5, 8, 14, 18, 19, 20], "basic": [0, 1, 5, 19], "us": [0, 2, 3, 4, 5, 6, 7, 8, 14, 18, 19], "uncondit": [0, 19], "condit": [0, 2, 4, 5, 14, 19], "addit": [0, 5, 14], "multipl": [0, 11, 19], "set": [0, 8], "common": [1, 9], "python_compat": 1, "python_dep": 1, "python_required_us": 1, "environ": [1, 20], "packag": [1, 2, 3, 5, 6, 7, 12, 14, 15, 16, 19, 20], "The": [1, 5], "most": 1, "type": 1, "find": 1, "list": [1, 16], "from": [1, 5, 13], "system": [1, 2, 5, 6, 12], "integr": [2, 5], "written": 2, "meson": 2, "scon": 2, "extra": [2, 20], "singl": [2, 5, 7, 13, 19], "impl": [2, 7, 14, 19], "instal": [2, 5, 6, 9, 14, 19, 20], "pure": [2, 14], "multi": [2, 7, 14], "hybrid": [2, 19], "waf": 2, "advanc": [3, 4], "concept": [3, 6], "namespac": 3, "hierarch": 3, "structur": 3, "determin": 3, "whether": 3, "ar": 3, "ad": [3, 5, 12, 15], "new": [3, 12, 15], "gentoo": [3, 10], "legaci": [3, 5, 6], "request": 4, "flag": 4, "interpret": [4, 8, 11, 12], "version": [4, 11], "cffi": 4, "greenlet": 4, "distutil": [5, 6, 7, 8, 16], "standard": 5, "pep": [5, 13, 20], "517": [5, 13, 20], "mode": [5, 20], "sourc": [5, 6], "archiv": 5, "variant": 5, "deprec": [5, 16], "backend": 5, "flit": 5, "buildapi": 5, "poetri": 5, "masonri": 5, "api": [5, 8], "setuptool": [5, 6], "build_meta": 5, "__legacy__": 5, "setuptools_scm": 5, "snapshot": 5, "cython": 5, "parallel": [5, 18], "race": 5, "sub": 5, "phase": 5, "function": [5, 9], "python_prepar": 5, "python_configur": 5, "python_compil": 5, "python_test": 5, "python_instal": 5, "pass": 5, "argument": [5, 18], "setup": 5, "py": 5, "call": 5, "custom": 5, "command": 5, "prevent": 5, "test": [5, 6, 15, 18, 20], "directori": 5, "being": 5, "enabl": 5, "distutils_enable_test": 5, "more": 5, "befor": [5, 6], "run": [5, 18], "undesir": 5, "pytest": [5, 18], "virtualx": 5, "document": 5, "via": 5, "sphinx": 5, "autodoc": 5, "extens": [5, 20], "without": 5, "option": 5, "usag": [5, 8], "rust": 5, "cargo": 5, "manual": [5, 14, 19], "build_dir": 5, "d": 5, "non": 5, "differ": [6, 8], "variat": 6, "distutils_use_setuptool": 6, "entri": 6, "point": 6, "other": [6, 18], "runtim": [6, 7, 19], "pyproject": 6, "toml": 6, "base": [6, 16, 18], "project": [6, 15], "In": 6, "vs": [6, 7], "out": 6, "choos": [7, 20], "between": 7, "eclass": [7, 12], "overview": 7, "first": 7, "expert": [8, 18], "partial": 8, "restrict": 8, "implement": [8, 9, 11, 12, 15], "python_setup": 8, "disjoint": 8, "regular": 8, "combin": 8, "helper": 9, "fix": 9, "shebang": 9, "script": 9, "byte": 9, "compil": 9, "modul": 9, "queri": 9, "inform": 9, "guid": [10, 13], "content": 10, "indic": 10, "tabl": 10, "altern": 11, "support": [11, 15], "backport": 11, "mainten": [12, 15], "life": 12, "cycl": 12, "note": 12, "specif": 12, "cpython": 12, "patchset": 12, "pypi": [12, 20], "profil": 12, "chang": [12, 16], "port": [12, 15, 16], "initi": 12, "bootstrap": 12, "migrat": 13, "old": 13, "python_usedep": 13, "syntax": 13, "eapi": [13, 15], "7": 13, "8": [13, 16], "autotool": 14, "2": 15, "which": 15, "exist": 15, "can": 15, "co": 15, "maintain": 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, "coroutin": 16, "remov": 16, "asyncio": 16, "inspect": 16, "getargspec": 16, "formatargspec": 16, "10": 16, "configur": 16, "No": 16, "1": 16, "found": [16, 18], "sysconfig": 16, "9": 16, "base64": 16, "encodestr": 16, "decodestr": 16, "config": 16, "pkg": 16, "longer": 16, "librari": 16, "default": 16, "prefac": 17, "recip": 18, "skip": [18, 20], "marker": 18, "path": 18, "name": 18, "avoid": 18, "runner": [18, 20], "xdist": 18, "plugin": 18, "explicitli": 18, "disabl": 18, "automat": 18, "autoload": 18, "entir": 18, "typeerror": 18, "_make_test_flaki": 18, "got": 18, "an": 18, "unexpect": 18, "keyword": 18, "rerun": 18, "importpathmismatcherror": 18, "fixtur": 18, "warn": 18, "A": 19, "resolv": 20, "suit": 20, "problem": 20, "correct": 20, "miss": 20, "file": 20, "importerror": 20, "c": 20, "checklist": 20, "deal": 20, "failur": 20, "problemat": 20, "requir": 20, "internet": 20, "access": 20, "abort": 20, "due": 20, "assert": 20}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 56}})
\ No newline at end of file diff --git a/guide/test.html b/guide/test.html index 47995a1..5436d7a 100644 --- a/guide/test.html +++ b/guide/test.html @@ -348,8 +348,8 @@ $ pytest -s </pre></div> </div> </section> -<section id="installing-extra-dependencies-in-test-environment-pep517-mode"> -<h2>Installing extra dependencies in test environment (PEP517 mode)<a class="headerlink" href="#installing-extra-dependencies-in-test-environment-pep517-mode" title="Permalink to this heading">¶</a></h2> +<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> <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 @@ -423,7 +423,7 @@ into it for the purpose of testing. Note that <code class="docutils literal not <li class="toctree-l2"><a class="reference internal" href="#skipping-problematic-tests">Skipping problematic tests</a></li> <li class="toctree-l2"><a class="reference internal" href="#tests-requiring-internet-access">Tests requiring Internet access</a></li> <li class="toctree-l2"><a class="reference internal" href="#tests-aborting-due-to-assertions">Tests aborting (due to assertions)</a></li> -<li class="toctree-l2"><a class="reference internal" href="#installing-extra-dependencies-in-test-environment-pep517-mode">Installing extra dependencies in test environment (PEP517 mode)</a></li> +<li class="toctree-l2"><a class="reference internal" href="#installing-extra-dependencies-in-test-environment-pep-517-mode">Installing extra dependencies in test environment (PEP 517 mode)</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="pytest.html">pytest recipes</a></li> |