# tox-multipython
> python interpreter interpreter discovery plugin for [tox](https://tox.wiki) 3 and [multipython](https://github.com/makukha/multipython)
[![license](https://img.shields.io/github/license/makukha/tox-multipython.svg)](https://github.com/makukha/tox-multipython/blob/main/LICENSE)
[![versions](https://img.shields.io/pypi/pyversions/tox-multipython.svg)](https://pypi.org/project/tox-multipython)
[![pypi](https://img.shields.io/pypi/v/tox-multipython.svg#v0.1.0)](https://pypi.python.org/pypi/tox-multipython)
[![tested with multipython](https://img.shields.io/badge/tested_with-multipython-x)](https://github.com/makukha/multipython)
[![uses docsub](https://img.shields.io/badge/uses-docsub-royalblue)
](https://github.com/makukha/docsub)
> [!NOTE]
> [tox-multipython]() has twin plugin [virtualenv-multipython](https://github.com/makukha/virtualenv-multipython) that serves the same purpose for [tox](https://tox.wiki) 4
This [tox](https://tox.wiki) plugin comes pre-installed in [multipython](https://hub.docker.com/r/makukha/multipython) Docker image and is responsible for resolving tox environment name to Python executable. Most probably, you don't need to install it yourself.
Environment names supported are all multipython tags, including free threading Python builds `py313t` and `py314t`. More names may be added in the future.
> [!IMPORTANT]
> This plugin does not fall back to tox python: interpreter discovery errors are explicit.
# Testing
Read table below as
> When `tox-multipython` is installed inside `Host tag` environment, it allows to use selected ✅ *Target tag* as `env_list` in `tox.ini` and automatically discovers corresponding [multipython](https://hub.docker.com/r/makukha/multipython) executable. For rejected 🚫 *Target tag*, `tox` environment provision fails.
*Host tag* and *Target tags* are valid [multipython](https://hub.docker.com/r/makukha/multipython) tags.
<table>
<thead>
<tr>
<th rowspan="2">Host tag</th>
<th colspan="13">Target tag</th>
</tr>
<tr>
<th><code>py</code><br/><code>314t</code></th>
<th><code>py</code><br/><code>313t</code></th>
<th><code>py</code><br/><code>314</code></th>
<th><code>py</code><br/><code>313</code></th>
<th><code>py</code><br/><code>312</code></th>
<th><code>py</code><br/><code>311</code></th>
<th><code>py</code><br/><code>310</code></th>
<th><code>py</code><br/><code>39</code></th>
<th><code>py</code><br/><code>38</code></th>
<th><code>py</code><br/><code>37</code></th>
<th><code>py</code><br/><code>36</code></th>
<th><code>py</code><br/><code>35</code></th>
<th><code>py</code><br/><code>27</code></th>
</tr>
</thead>
<tbody>
<!-- docsub: begin -->
<!-- docsub: exec bash .dev/gen-tests-summary.sh -->
<tr><th><code>py314t</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py313t</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py314</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py313</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py312</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py311</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py310</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py39</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py38</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py37</code></th> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>🚫</td> <td>🚫</td> <td>🚫</td></tr>
<tr><th><code>py36</code></th> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td></tr>
<tr><th><code>py35</code></th> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td></tr>
<tr><th><code>py27</code></th> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>🚫</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td> <td>✅</td></tr>
<!-- docsub: end -->
</tbody>
</table>
# Authors
* [Michael Makukha](https://github.com/makukha)
This package is a part of [multipython](https://github.com/makukha/multipython) project.
## License
[MIT License](https://github.com/makukha/caseutil/blob/main/LICENSE)
# Changelog
Check repository [CHANGELOG.md](https://github.com/makukha/tox-multipython/tree/main/CHANGELOG.md)
Raw data
{
"_id": null,
"home_page": null,
"name": "tox-multipython",
"maintainer": null,
"docs_url": null,
"requires_python": "!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7",
"maintainer_email": null,
"keywords": "discovery, multipython, plugin, testing, tox, tox-plugin",
"author": null,
"author_email": "Michael Makukha <m.makukha@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/2f/c6/aeeb3b642e6dd7ce42df505dd18f0b7c0c8da4800db7ca1a6a4e1674f5e4/tox_multipython-0.1.0.tar.gz",
"platform": null,
"description": "# tox-multipython\n> python interpreter interpreter discovery plugin for [tox](https://tox.wiki) 3 and [multipython](https://github.com/makukha/multipython)\n\n[![license](https://img.shields.io/github/license/makukha/tox-multipython.svg)](https://github.com/makukha/tox-multipython/blob/main/LICENSE)\n[![versions](https://img.shields.io/pypi/pyversions/tox-multipython.svg)](https://pypi.org/project/tox-multipython)\n[![pypi](https://img.shields.io/pypi/v/tox-multipython.svg#v0.1.0)](https://pypi.python.org/pypi/tox-multipython) \n[![tested with multipython](https://img.shields.io/badge/tested_with-multipython-x)](https://github.com/makukha/multipython)\n[![uses docsub](https://img.shields.io/badge/uses-docsub-royalblue)\n](https://github.com/makukha/docsub)\n\n> [!NOTE]\n> [tox-multipython]() has twin plugin [virtualenv-multipython](https://github.com/makukha/virtualenv-multipython) that serves the same purpose for [tox](https://tox.wiki) 4\n\nThis [tox](https://tox.wiki) plugin comes pre-installed in [multipython](https://hub.docker.com/r/makukha/multipython) Docker image and is responsible for resolving tox environment name to Python executable. Most probably, you don't need to install it yourself.\n\nEnvironment names supported are all multipython tags, including free threading Python builds `py313t` and `py314t`. More names may be added in the future.\n\n> [!IMPORTANT]\n> This plugin does not fall back to tox python: interpreter discovery errors are explicit.\n\n# Testing\n\nRead table below as\n\n> When `tox-multipython` is installed inside `Host tag` environment, it allows to use selected \u2705 *Target tag* as `env_list` in `tox.ini` and automatically discovers corresponding [multipython](https://hub.docker.com/r/makukha/multipython) executable. For rejected \ud83d\udeab *Target tag*, `tox` environment provision fails.\n\n*Host tag* and *Target tags* are valid [multipython](https://hub.docker.com/r/makukha/multipython) tags.\n\n<table>\n<thead>\n<tr>\n <th rowspan=\"2\">Host tag</th>\n <th colspan=\"13\">Target tag</th>\n</tr>\n<tr>\n <th><code>py</code><br/><code>314t</code></th>\n <th><code>py</code><br/><code>313t</code></th>\n <th><code>py</code><br/><code>314</code></th>\n <th><code>py</code><br/><code>313</code></th>\n <th><code>py</code><br/><code>312</code></th>\n <th><code>py</code><br/><code>311</code></th>\n <th><code>py</code><br/><code>310</code></th>\n <th><code>py</code><br/><code>39</code></th>\n <th><code>py</code><br/><code>38</code></th>\n <th><code>py</code><br/><code>37</code></th>\n <th><code>py</code><br/><code>36</code></th>\n <th><code>py</code><br/><code>35</code></th>\n <th><code>py</code><br/><code>27</code></th>\n</tr>\n</thead>\n<tbody>\n<!-- docsub: begin -->\n<!-- docsub: exec bash .dev/gen-tests-summary.sh -->\n<tr><th><code>py314t</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py313t</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py314</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py313</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py312</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py311</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py310</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py39</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py38</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py37</code></th> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td></tr>\n<tr><th><code>py36</code></th> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td></tr>\n<tr><th><code>py35</code></th> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td></tr>\n<tr><th><code>py27</code></th> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\ud83d\udeab</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td> <td>\u2705</td></tr>\n<!-- docsub: end -->\n</tbody>\n</table>\n\n# Authors\n\n* [Michael Makukha](https://github.com/makukha)\n\nThis package is a part of [multipython](https://github.com/makukha/multipython) project.\n\n\n## License\n\n[MIT License](https://github.com/makukha/caseutil/blob/main/LICENSE)\n\n\n# Changelog\n\nCheck repository [CHANGELOG.md](https://github.com/makukha/tox-multipython/tree/main/CHANGELOG.md)\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "tox 3 interpreter discovery plugin for multipython",
"version": "0.1.0",
"project_urls": {
"Changelog": "https://github.com/makukha/tox-multipython/tree/main/CHANGELOG.md",
"Homepage": "https://github.com/makukha/tox-multipython",
"Issues": "https://github.com/makukha/tox-multipython/issues",
"Repository": "https://github.com/makukha/tox-multipython"
},
"split_keywords": [
"discovery",
" multipython",
" plugin",
" testing",
" tox",
" tox-plugin"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "3497e6794c33054dfa72c53a42bdb77ca334c003a1f518e76fbd138fdc0e7297",
"md5": "92ae4e190a6910e55ec8483937708d0d",
"sha256": "ef14ba557156a50da7ff90d1b4a43c4856eb8258bc6e525994e3d7601b5a5807"
},
"downloads": -1,
"filename": "tox_multipython-0.1.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "92ae4e190a6910e55ec8483937708d0d",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": "!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7",
"size": 4544,
"upload_time": "2025-01-10T12:20:11",
"upload_time_iso_8601": "2025-01-10T12:20:11.544183Z",
"url": "https://files.pythonhosted.org/packages/34/97/e6794c33054dfa72c53a42bdb77ca334c003a1f518e76fbd138fdc0e7297/tox_multipython-0.1.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2fc6aeeb3b642e6dd7ce42df505dd18f0b7c0c8da4800db7ca1a6a4e1674f5e4",
"md5": "0315696312aeb1abfba78a8beaa9298d",
"sha256": "b9cfaeeef9d3f7767b3e4b61f37de34695ea8733c86ccc2c5abf4055fce87e47"
},
"downloads": -1,
"filename": "tox_multipython-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "0315696312aeb1abfba78a8beaa9298d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7",
"size": 53406,
"upload_time": "2025-01-10T12:20:15",
"upload_time_iso_8601": "2025-01-10T12:20:15.193431Z",
"url": "https://files.pythonhosted.org/packages/2f/c6/aeeb3b642e6dd7ce42df505dd18f0b7c0c8da4800db7ca1a6a4e1674f5e4/tox_multipython-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-10 12:20:15",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "makukha",
"github_project": "tox-multipython",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "tox-multipython"
}