virtualenv-multipython


Namevirtualenv-multipython JSON
Version 0.4.1 PyPI version JSON
download
home_pageNone
Summaryvirtualenv discovery plugin for tox 4 and multipython
upload_time2025-01-21 18:49:24
maintainerNone
docs_urlNone
authorNone
requires_python!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7
licenseMIT
keywords discovery multipython plugin testing tox virtualenv virtualenv-discovery virtualenv-plugin
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # virtualenv-multipython
> virtualenv discovery plugin for [multipython](https://github.com/makukha/multipython)

[![python versions](https://img.shields.io/pypi/pyversions/virtualenv-multipython.svg)](https://pypi.org/project/virtualenv-multipython)
[![pypi](https://img.shields.io/pypi/v/virtualenv-multipython.svg#v0.4.1)](https://pypi.python.org/pypi/virtualenv-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)
[![license](https://img.shields.io/github/license/makukha/virtualenv-multipython.svg)](https://github.com/makukha/virtualenv-multipython/blob/main/LICENSE)

> [!NOTE]
> [virtualenv-multipython]() has twin plugin [tox-multipython](https://github.com/makukha/tox-multipython) that serves similar purpose for [tox](https://tox.wiki) 3

This [virtualenv](https://virtualenv.pypa.io) 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.

# Behaviour

* Loosely follow behaviour of builtin virtualenv discovery, with some important differences:
* Try requests one by one, starting with [`--try-first-with`](https://virtualenv.pypa.io/en/latest/cli_interface.html#try-first-with); if one matches multipython tag or is an absolute path, return it to virtualenv.
* If no version was requested at all, use `sys.executable`
* If no request matched conditions above, fail to discover interpreter.
* In particular, command names on `PATH` are not discovered.

# Testing

There are two test suites:

1. `venv` — Install `virtualenv` in *host tag* environment and create virtual environments for all *target tags*. Environment's python version must match *target tag*.
2. `tox4` — `tox` and `virtualenv` are installed in *host tag* environment, and `tox run` is executed on `tox.ini` with env names equal to *target tags*. This test includes subtests:
    - assert `{env_python}` version inside tox env
    - assert `python` version inside tox env
    - install externally built *sample package* in tox environment
    - execute entrypoint of *sample package*

Virtualenv supports discovery plugins since v20. In v20.22, it dropped support for Python <=3.6, in v20.27 it dropped support for Python 3.7.

This is why we use 6 different test setups:

1. `venv` + `virtualenv>=20`
1. `venv` + `virtualenv>=20,<20.27`
1. `venv` + `virtualenv>=20,<20.22`
1. `tox4` + `virtualenv>=20`
1. `tox4` + `virtualenv>=20,<20.27`
1. `tox4` + `virtualenv>=20,<20.22`

## Test report

When `virtualenv-multipython` is installed inside *host tag* environment, it allows to use selected ✅ *target tag* (create virtualenv environment or use as tox env name in `env_list`) and automatically discovers corresponding [multipython](https://github.com/makukha/multipython) executable. For prohibited 🚫️ *target tag*, python executable is not discoverable. For failing 💥 *target tag*, interpreter is discoverable, but virtual environment with *sample package* cannot be created.

*Host tag* and *Target tags* are valid [multipython](https://hub.docker.com/r/makukha/multipython) tags. *Host tags* are listed vertically (rows), *target tags* are listed horizontally (columns).

<table>
<tbody>

<tr>

<td>
<code>virtualenv>=20</code>
<!-- docsub: begin -->
<!-- docsub: x pretty venv-v__ -->
<!-- docsub: lines after 1 upto -1 -->
<pre>
  HOST    TARGETS
——————    A B C D E F G H I J K L M
py314t  A ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
py313t  B ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py314  C ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py313  D ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py312  E ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py311  F ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py310  G ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py39  H ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py38  I ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py37  J ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py36  K ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py35  L ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py27  M ✅✅✅✅✅✅✅✅✅✅✅✅✅
</pre>
<!-- docsub: end -->
</td>

<td>
<code>tox>=4,<5</code>, <code>virtualenv>=20</code>
<!-- docsub: begin -->
<!-- docsub: x pretty tox4-v__ -->
<!-- docsub: lines after 1 upto -1 -->
<pre>
  HOST    TARGETS
——————    A B C D E F G H I J K L M
py314t  A ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
py313t  B ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
 py314  C ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
 py313  D ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
 py312  E ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
 py311  F ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
 py310  G ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
  py39  H ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
  py38  I ✅✅✅✅✅✅✅✅✅💥🚫🚫🚫
  py37  J ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py36  K . . . . . . . . . . . . .
  py35  L . . . . . . . . . . . . .
  py27  M . . . . . . . . . . . . .
</pre>
<!-- docsub: end -->
</td>

</tr>

<tr>

<td>
<code>virtualenv>=20,<20.27</code>
<!-- docsub: begin -->
<!-- docsub: x pretty venv-v27 -->
<!-- docsub: lines after 1 upto -1 -->
<pre>
  HOST    TARGETS
——————    A B C D E F G H I J K L M
py314t  A ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
py313t  B ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py314  C ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py313  D ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py312  E ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py311  F ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py310  G ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py39  H ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py38  I ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py37  J ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py36  K ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py35  L ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py27  M ✅✅✅✅✅✅✅✅✅✅✅✅✅
</pre>
<!-- docsub: end -->
</td>

<td>
<code>tox>=4,<5</code>, <code>virtualenv>=20,<20.27</code>
<!-- docsub: begin -->
<!-- docsub: x pretty tox4-v27 -->
<!-- docsub: lines after 1 upto -1 -->
<pre>
  HOST    TARGETS
——————    A B C D E F G H I J K L M
py314t  A ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
py313t  B ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py314  C ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py313  D ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py312  E ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py311  F ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
 py310  G ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py39  H ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py38  I ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py37  J ✅✅✅✅✅✅✅✅✅✅🚫🚫🚫
  py36  K . . . . . . . . . . . . .
  py35  L . . . . . . . . . . . . .
  py27  M . . . . . . . . . . . . .
</pre>
<!-- docsub: end -->
</td>

</tr>

<tr>

<td>
<code>virtualenv>=20,<20.22</code>
<!-- docsub: begin -->
<!-- docsub: x pretty venv-v22 -->
<!-- docsub: lines after 1 upto -1 -->
<pre>
  HOST    TARGETS
——————    A B C D E F G H I J K L M
py314t  A ✅✅✅✅✅✅✅✅✅✅✅✅✅
py313t  B ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py314  C ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py313  D ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py312  E ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py311  F ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py310  G ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py39  H ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py38  I ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py37  J ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py36  K ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py35  L ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py27  M ✅✅✅✅✅✅✅✅✅✅✅✅✅
</pre>
<!-- docsub: end -->
</td>

<td>
<code>tox>=4,<5</code>, <code>virtualenv>=20,<20.22</code>
<!-- docsub: begin -->
<!-- docsub: x pretty tox4-v22 -->
<!-- docsub: lines after 1 upto -1 -->
<pre>
  HOST    TARGETS
——————    A B C D E F G H I J K L M
py314t  A ✅✅✅✅✅✅✅✅✅✅✅✅✅
py313t  B ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py314  C ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py313  D ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py312  E ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py311  F ✅✅✅✅✅✅✅✅✅✅✅✅✅
 py310  G ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py39  H ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py38  I ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py37  J ✅✅✅✅✅✅✅✅✅✅✅✅✅
  py36  K . . . . . . . . . . . . .
  py35  L . . . . . . . . . . . . .
  py27  M . . . . . . . . . . . . .
</pre>
<!-- docsub: end -->
</td>

</tr>

</tbody>
</table>


# Changelog

Check repository [CHANGELOG.md](https://github.com/makukha/virtualenv-multipython/tree/main/CHANGELOG.md)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "virtualenv-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, virtualenv, virtualenv-discovery, virtualenv-plugin",
    "author": null,
    "author_email": "Michael Makukha <m.makukha@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/74/3b/3776aa43c4007fe604f15decf4180445c31bbc384744a5a6cc3e7ecaa203/virtualenv_multipython-0.4.1.tar.gz",
    "platform": null,
    "description": "# virtualenv-multipython\n> virtualenv discovery plugin for [multipython](https://github.com/makukha/multipython)\n\n[![python versions](https://img.shields.io/pypi/pyversions/virtualenv-multipython.svg)](https://pypi.org/project/virtualenv-multipython)\n[![pypi](https://img.shields.io/pypi/v/virtualenv-multipython.svg#v0.4.1)](https://pypi.python.org/pypi/virtualenv-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[![license](https://img.shields.io/github/license/makukha/virtualenv-multipython.svg)](https://github.com/makukha/virtualenv-multipython/blob/main/LICENSE)\n\n> [!NOTE]\n> [virtualenv-multipython]() has twin plugin [tox-multipython](https://github.com/makukha/tox-multipython) that serves similar purpose for [tox](https://tox.wiki) 3\n\nThis [virtualenv](https://virtualenv.pypa.io) 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# Behaviour\n\n* Loosely follow behaviour of builtin virtualenv discovery, with some important differences:\n* Try requests one by one, starting with [`--try-first-with`](https://virtualenv.pypa.io/en/latest/cli_interface.html#try-first-with); if one matches multipython tag or is an absolute path, return it to virtualenv.\n* If no version was requested at all, use `sys.executable`\n* If no request matched conditions above, fail to discover interpreter.\n* In particular, command names on `PATH` are not discovered.\n\n# Testing\n\nThere are two test suites:\n\n1. `venv` \u2014 Install `virtualenv` in *host tag* environment and create virtual environments for all *target tags*. Environment's python version must match *target tag*.\n2. `tox4` \u2014 `tox` and `virtualenv` are installed in *host tag* environment, and `tox run` is executed on `tox.ini` with env names equal to *target tags*. This test includes subtests:\n    - assert `{env_python}` version inside tox env\n    - assert `python` version inside tox env\n    - install externally built *sample package* in tox environment\n    - execute entrypoint of *sample package*\n\nVirtualenv supports discovery plugins since v20. In v20.22, it dropped support for Python <=3.6, in v20.27 it dropped support for Python 3.7.\n\nThis is why we use 6 different test setups:\n\n1. `venv` + `virtualenv>=20`\n1. `venv` + `virtualenv>=20,<20.27`\n1. `venv` + `virtualenv>=20,<20.22`\n1. `tox4` + `virtualenv>=20`\n1. `tox4` + `virtualenv>=20,<20.27`\n1. `tox4` + `virtualenv>=20,<20.22`\n\n## Test report\n\nWhen `virtualenv-multipython` is installed inside *host tag* environment, it allows to use selected \u2705 *target tag* (create virtualenv environment or use as tox env name in `env_list`) and automatically discovers corresponding [multipython](https://github.com/makukha/multipython) executable. For prohibited \ud83d\udeab\ufe0f *target tag*, python executable is not discoverable. For failing \ud83d\udca5 *target tag*, interpreter is discoverable, but virtual environment with *sample package* cannot be created.\n\n*Host tag* and *Target tags* are valid [multipython](https://hub.docker.com/r/makukha/multipython) tags. *Host tags* are listed vertically (rows), *target tags* are listed horizontally (columns).\n\n<table>\n<tbody>\n\n<tr>\n\n<td>\n<code>virtualenv>=20</code>\n<!-- docsub: begin -->\n<!-- docsub: x pretty venv-v__ -->\n<!-- docsub: lines after 1 upto -1 -->\n<pre>\n  HOST    TARGETS\n\u2014\u2014\u2014\u2014\u2014\u2014    A\u2002B\u2002C\u2002D\u2002E\u2002F\u2002G\u2002H\u2002I\u2002J\u2002K\u2002L\u2002M\npy314t  A \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\npy313t  B \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py314  C \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py313  D \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py312  E \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py311  F \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py310  G \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py39  H \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py38  I \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py37  J \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py36  K \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py35  L \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py27  M \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n</pre>\n<!-- docsub: end -->\n</td>\n\n<td>\n<code>tox>=4,<5</code>, <code>virtualenv>=20</code>\n<!-- docsub: begin -->\n<!-- docsub: x pretty tox4-v__ -->\n<!-- docsub: lines after 1 upto -1 -->\n<pre>\n  HOST    TARGETS\n\u2014\u2014\u2014\u2014\u2014\u2014    A\u2002B\u2002C\u2002D\u2002E\u2002F\u2002G\u2002H\u2002I\u2002J\u2002K\u2002L\u2002M\npy314t  A \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\npy313t  B \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py314  C \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py313  D \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py312  E \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py311  F \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py310  G \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py39  H \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py38  I \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udca5\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py37  J \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py36  K .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n  py35  L .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n  py27  M .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n</pre>\n<!-- docsub: end -->\n</td>\n\n</tr>\n\n<tr>\n\n<td>\n<code>virtualenv>=20,<20.27</code>\n<!-- docsub: begin -->\n<!-- docsub: x pretty venv-v27 -->\n<!-- docsub: lines after 1 upto -1 -->\n<pre>\n  HOST    TARGETS\n\u2014\u2014\u2014\u2014\u2014\u2014    A\u2002B\u2002C\u2002D\u2002E\u2002F\u2002G\u2002H\u2002I\u2002J\u2002K\u2002L\u2002M\npy314t  A \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\npy313t  B \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py314  C \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py313  D \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py312  E \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py311  F \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py310  G \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py39  H \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py38  I \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py37  J \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py36  K \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py35  L \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py27  M \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n</pre>\n<!-- docsub: end -->\n</td>\n\n<td>\n<code>tox>=4,<5</code>, <code>virtualenv>=20,<20.27</code>\n<!-- docsub: begin -->\n<!-- docsub: x pretty tox4-v27 -->\n<!-- docsub: lines after 1 upto -1 -->\n<pre>\n  HOST    TARGETS\n\u2014\u2014\u2014\u2014\u2014\u2014    A\u2002B\u2002C\u2002D\u2002E\u2002F\u2002G\u2002H\u2002I\u2002J\u2002K\u2002L\u2002M\npy314t  A \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\npy313t  B \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py314  C \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py313  D \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py312  E \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py311  F \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n py310  G \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py39  H \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py38  I \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py37  J \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\ud83d\udeab\ud83d\udeab\ud83d\udeab\n  py36  K .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n  py35  L .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n  py27  M .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n</pre>\n<!-- docsub: end -->\n</td>\n\n</tr>\n\n<tr>\n\n<td>\n<code>virtualenv>=20,<20.22</code>\n<!-- docsub: begin -->\n<!-- docsub: x pretty venv-v22 -->\n<!-- docsub: lines after 1 upto -1 -->\n<pre>\n  HOST    TARGETS\n\u2014\u2014\u2014\u2014\u2014\u2014    A\u2002B\u2002C\u2002D\u2002E\u2002F\u2002G\u2002H\u2002I\u2002J\u2002K\u2002L\u2002M\npy314t  A \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\npy313t  B \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py314  C \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py313  D \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py312  E \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py311  F \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py310  G \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py39  H \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py38  I \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py37  J \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py36  K \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py35  L \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py27  M \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n</pre>\n<!-- docsub: end -->\n</td>\n\n<td>\n<code>tox>=4,<5</code>, <code>virtualenv>=20,<20.22</code>\n<!-- docsub: begin -->\n<!-- docsub: x pretty tox4-v22 -->\n<!-- docsub: lines after 1 upto -1 -->\n<pre>\n  HOST    TARGETS\n\u2014\u2014\u2014\u2014\u2014\u2014    A\u2002B\u2002C\u2002D\u2002E\u2002F\u2002G\u2002H\u2002I\u2002J\u2002K\u2002L\u2002M\npy314t  A \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\npy313t  B \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py314  C \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py313  D \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py312  E \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py311  F \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n py310  G \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py39  H \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py38  I \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py37  J \u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\u2705\n  py36  K .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n  py35  L .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n  py27  M .\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\u2002.\n</pre>\n<!-- docsub: end -->\n</td>\n\n</tr>\n\n</tbody>\n</table>\n\n\n# Changelog\n\nCheck repository [CHANGELOG.md](https://github.com/makukha/virtualenv-multipython/tree/main/CHANGELOG.md)\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "virtualenv discovery plugin for tox 4 and multipython",
    "version": "0.4.1",
    "project_urls": {
        "Changelog": "https://github.com/makukha/virtualenv-multipython/tree/main/CHANGELOG.md",
        "Issues": "https://github.com/makukha/virtualenv-multipython/issues",
        "Repository": "https://github.com/makukha/virtualenv-multipython"
    },
    "split_keywords": [
        "discovery",
        " multipython",
        " plugin",
        " testing",
        " tox",
        " virtualenv",
        " virtualenv-discovery",
        " virtualenv-plugin"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2780f20e1d81ed1f2b9e9502ca76b0485c4ddbc67857c5364c2e28f09777a7de",
                "md5": "800211ecd19d9138b1fd198ba2107e4b",
                "sha256": "a1f419140e34f9fc713c7880197bcd74eef9358657efee24aee96057682b7478"
            },
            "downloads": -1,
            "filename": "virtualenv_multipython-0.4.1-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "800211ecd19d9138b1fd198ba2107e4b",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": "!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7",
            "size": 6223,
            "upload_time": "2025-01-21T18:49:21",
            "upload_time_iso_8601": "2025-01-21T18:49:21.883418Z",
            "url": "https://files.pythonhosted.org/packages/27/80/f20e1d81ed1f2b9e9502ca76b0485c4ddbc67857c5364c2e28f09777a7de/virtualenv_multipython-0.4.1-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "743b3776aa43c4007fe604f15decf4180445c31bbc384744a5a6cc3e7ecaa203",
                "md5": "9c936b9b5caec15d4d1f63416957cbd1",
                "sha256": "3e02a7499b6d52034236b10d4e7355008b6969a99dbf52ffb26addb04c6eb8bf"
            },
            "downloads": -1,
            "filename": "virtualenv_multipython-0.4.1.tar.gz",
            "has_sig": false,
            "md5_digest": "9c936b9b5caec15d4d1f63416957cbd1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,>=2.7",
            "size": 59106,
            "upload_time": "2025-01-21T18:49:24",
            "upload_time_iso_8601": "2025-01-21T18:49:24.076299Z",
            "url": "https://files.pythonhosted.org/packages/74/3b/3776aa43c4007fe604f15decf4180445c31bbc384744a5a6cc3e7ecaa203/virtualenv_multipython-0.4.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-21 18:49:24",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "makukha",
    "github_project": "virtualenv-multipython",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "virtualenv-multipython"
}
        
Elapsed time: 0.96071s