Repository: tox-dev/tox-uv (language: python)

Issue:
base_python.version_info.minor is None on PyPy3 3.8
## Issue

<!-- Describe what's the expected behavior and what you're observing. -->

Trying to take tox-uv out for a spin on [boltons](https://github.com/mahmoud/boltons). All is well, except PyPy3.8 on my Ubuntu 22.04 laptop. I considered upgrading to 3.9, but I saw 3.8 was still supported.

## Environment

Provide at least:

- OS: Ubuntu 22.04 LTS
- Python: PyPy 3.8.13

<details >
<summary>
$ apt-cache policy pypy3
</summary>
pypy3:
  Installed: 7.3.9+dfsg-1ubuntu0.1
  Candidate: 7.3.9+dfsg-1ubuntu0.1
  Version table:
 *** 7.3.9+dfsg-1ubuntu0.1 500
        500 http://us.archive.ubuntu.com/ubuntu jammy-updates/universe amd64 Packages
        500 http://security.ubuntu.com/ubuntu jammy-security/universe amd64 Packages
        100 /var/lib/dpkg/status
     7.3.9+dfsg-1 500
        500 http://us.archive.ubuntu.com/ubuntu jammy/universe amd64 Packages
</details>

<details >
<summary>Output of <code>pip list</code></summary>
$ pip list
Package            Version
------------------ ---------
attrs              22.1.0
bleach             6.0.0
cachetools         5.3.2
certifi            2022.12.7
cffi               1.15.1
chardet            5.2.0
charset-normalizer 3.0.1
colorama           0.4.6
coverage           6.5.0
cryptography       39.0.1
distlib            0.3.7
docutils           0.19
exceptiongroup     1.0.4
filelock           3.13.1
idna               3.4
importlib-metadata 6.0.0
iniconfig          1.1.1
jaraco.classes     3.2.3
jeepney            0.8.0
keyring            23.13.1
markdown-it-py     2.1.0
mdurl              0.1.2
more-itertools     9.0.0
packaging          23.2
pip                22.0.2
pkginfo            1.9.6
platformdirs       4.2.1
pluggy             1.3.0
py                 1.11.0
pycparser          2.21
Pygments           2.14.0
pyproject-api      1.6.1
pytest             7.2.0
pytest-cov         4.0.0
readme-renderer    37.3
requests           2.28.2
requests-toolbelt  0.10.1
rfc3986            2.0.0
rich               13.3.1
SecretStorage      3.3.3
setuptools         68.2.2
six                1.16.0
tomli              2.0.1
tox                4.15.0
twine              4.0.2
urllib3            1.26.14
uv                 0.1.39
virtualenv         20.26.0
webencodings       0.5.1
wheel              0.38.4
zipp               3.14.0

</details>

## Output of running tox


Stack(s):

<details>
<summary>$ tox -rvv -e pypy3</summary>

```console

pypy3: 102 W remove tox env folder /home/mahmoud/projects/boltons/.tox/pypy3 [tox/tox_env/api.py:323]
.pkg: 109 W remove tox env folder /home/mahmoud/projects/boltons/.tox/.pkg [tox/tox_env/api.py:323]
pypy3: 117 W venv> venv/bin/uv venv -p 3 -v /home/mahmoud/projects/boltons/.tox/pypy3/.venv [tox/tox_env/api.py:425]
DEBUG Starting interpreter discovery for Python @ `3`
DEBUG Cached interpreter info for Python 3.10.12, skipping probing: venv/bin/python3
Using Python 3.10.12 interpreter at: venv/bin/python3
Creating virtualenv at: .tox/pypy3/.venv
pypy3: 127 I exit 0 (0.01 seconds) /home/mahmoud/projects/boltons> venv/bin/uv venv -p 3 -v /home/mahmoud/projects/boltons/.tox/pypy3/.venv pid=182049 [tox/execute/api.py:286]
pypy3: 130 W install_deps> venv/bin/uv pip install -r requirements-test.txt -v [tox/tox_env/api.py:425]
INFO Found a virtualenv through VIRTUAL_ENV at: /home/mahmoud/projects/boltons/.tox/pypy3/.venv
DEBUG Cached interpreter info for Python 3.10.12, skipping probing: .tox/pypy3/.venv/bin/python
DEBUG Using Python 3.10.12 environment at [36m.tox/pypy3/.venv/bin/python[39m
DEBUG Trying to lock if free: .tox/pypy3/.venv/.lock
DEBUG Using registry request timeout of 30s
DEBUG Solving with target Python version 3.10.12
DEBUG Adding direct dependency: coverage==6.5.0
DEBUG Adding direct dependency: pytest==7.2.0
DEBUG Adding direct dependency: pytest-cov==4.0.0
DEBUG Adding direct dependency: tox<3.0
DEBUG Found fresh response for: https://pypi.org/simple/pytest-cov/
DEBUG Found fresh response for: https://pypi.org/simple/pytest/
DEBUG Found fresh response for: https://pypi.org/simple/tox/
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/fe/1f/9ec0ddd33bd2b37d6ec50bb39155bca4fe7085fa78b3b434c05459a860e3/pytest_cov-4.0.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/67/68/a5eb36c3a8540594b6035e6cdae40c1ef1b6a2bfacbecc3d1a544583c078/pytest-7.2.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/1d/4e/20c679f8c5948f7c48591fde33d442e716af66a31a88f5791850a75041eb/tox-2.9.1-py2.py3-none-any.whl.metadata
DEBUG Found fresh response for: https://pypi.org/simple/coverage/
DEBUG Searching for a compatible version of coverage (==6.5.0)
DEBUG Selecting: coverage==6.5.0 (coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/3c/7d/d5211ea782b193ab8064b06dc0cc042cf1a4ca9c93a530071459172c550f/coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata
DEBUG Searching for a compatible version of pytest (==7.2.0)
DEBUG Selecting: pytest==7.2.0 (pytest-7.2.0-py3-none-any.whl)
DEBUG Adding transitive dependency for pytest==7.2.0: attrs>=19.2.0
DEBUG Adding transitive dependency for pytest==7.2.0: iniconfig*
DEBUG Adding transitive dependency for pytest==7.2.0: packaging*
DEBUG Adding transitive dependency for pytest==7.2.0: pluggy>=0.12, <2.0
DEBUG Adding transitive dependency for pytest==7.2.0: exceptiongroup>=1.0.0rc8
DEBUG Adding transitive dependency for pytest==7.2.0: tomli>=1.0.0
DEBUG Searching for a compatible version of pytest-cov (==4.0.0)
DEBUG Selecting: pytest-cov==4.0.0 (pytest_cov-4.0.0-py3-none-any.whl)
DEBUG Adding transitive dependency for pytest-cov==4.0.0: pytest>=4.6
DEBUG Adding transitive dependency for pytest-cov==4.0.0: coverage>=5.2.1
DEBUG Adding transitive dependency for pytest-cov==4.0.0: coverage[toml]>=5.2.1
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1)
DEBUG Selecting: coverage[toml]==7.5.0 (coverage-7.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.4.4 (coverage-7.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.4.3 (coverage-7.4.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.4.2 (coverage-7.4.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.4.1 (coverage-7.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.4.0 (coverage-7.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.3.4 (coverage-7.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.3.3 (coverage-7.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.3.2 (coverage-7.3.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.3.1 (coverage-7.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.3.0 (coverage-7.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.7 (coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.6 (coverage-7.2.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.5 (coverage-7.2.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.4 (coverage-7.2.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.3 (coverage-7.2.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.2 (coverage-7.2.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.1 (coverage-7.2.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.2.0 (coverage-7.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.1.0 (coverage-7.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.0.5 (coverage-7.0.5-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.0.5 | >7.0.5, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.0.4 (coverage-7.0.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.0.4 | >7.0.4, <7.0.5 | >7.0.5, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.0.3 (coverage-7.0.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.0.3 | >7.0.3, <7.0.4 | >7.0.4, <7.0.5 | >7.0.5, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.0.2 (coverage-7.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.0.2 | >7.0.2, <7.0.3 | >7.0.3, <7.0.4 | >7.0.4, <7.0.5 | >7.0.5, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.0.1 (coverage-7.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.0.1 | >7.0.1, <7.0.2 | >7.0.2, <7.0.3 | >7.0.3, <7.0.4 | >7.0.4, <7.0.5 | >7.0.5, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==7.0.0 (coverage-7.0.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (>=5.2.1, <7.0.0 | >7.0.0, <7.0.1 | >7.0.1, <7.0.2 | >7.0.2, <7.0.3 | >7.0.3, <7.0.4 | >7.0.4, <7.0.5 | >7.0.5, <7.1.0 | >7.1.0, <7.2.0 | >7.2.0, <7.2.1 | >7.2.1, <7.2.2 | >7.2.2, <7.2.3 | >7.2.3, <7.2.4 | >7.2.4, <7.2.5 | >7.2.5, <7.2.6 | >7.2.6, <7.2.7 | >7.2.7, <7.3.0 | >7.3.0, <7.3.1 | >7.3.1, <7.3.2 | >7.3.2, <7.3.3 | >7.3.3, <7.3.4 | >7.3.4, <7.4.0 | >7.4.0, <7.4.1 | >7.4.1, <7.4.2 | >7.4.2, <7.4.3 | >7.4.3, <7.4.4 | >7.4.4, <7.5.0 | >7.5.0)
DEBUG Selecting: coverage[toml]==6.5.0 (coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Searching for a compatible version of coverage[toml] (==6.5.0)
DEBUG Selecting: coverage[toml]==6.5.0 (coverage-6.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl)
DEBUG Adding transitive dependency for coverage[toml]==6.5.0: tomli*
DEBUG Searching for a compatible version of tox (<3.0)
DEBUG Selecting: tox==2.9.1 (tox-2.9.1-py2.py3-none-any.whl)
DEBUG Adding transitive dependency for tox==2.9.1: py>=1.4.17
DEBUG Adding transitive dependency for tox==2.9.1: pluggy>=0.3.0, <1.0
DEBUG Adding transitive dependency for tox==2.9.1: six*
DEBUG Adding transitive dependency for tox==2.9.1: virtualenv>=1.11.2
DEBUG Found fresh response for: https://pypi.org/simple/iniconfig/
DEBUG Found fresh response for: https://pypi.org/simple/packaging/
DEBUG Found fresh response for: https://pypi.org/simple/attrs/
DEBUG Found fresh response for: https://pypi.org/simple/pluggy/
DEBUG Found fresh response for: https://pypi.org/simple/exceptiongroup/
DEBUG Found fresh response for: https://pypi.org/simple/six/
DEBUG Found fresh response for: https://pypi.org/simple/tomli/
DEBUG Found fresh response for: https://pypi.org/simple/virtualenv/
DEBUG Found fresh response for: https://pypi.org/simple/py/
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/49/df/1fceb2f8900f8639e278b056416d49134fb8d84c5942ffaa01ad34782422/packaging-24.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/e0/44/827b2a91a5816512fcaf3cc4ebc465ccd5d598c45cefa6703fcf4a79018f/attrs-23.2.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/a0/28/85c7aa31b80d150b772fbe4a229487bc6644da9ccb7e427dd8cc60cb8a62/pluggy-0.13.1-py2.py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/01/90/79fe92dd413a9cab314ef5c591b5aa9b9ba787ae4cadab75055b0ae00b33/exceptiongroup-1.2.1-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/fa/80/4230da6f5898d50c427591d81c4ca154c19ff3ea789266affcd9a770ed3d/virtualenv-20.26.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl.metadata
DEBUG Searching for a compatible version of attrs (>=19.2.0)
DEBUG Selecting: attrs==23.2.0 (attrs-23.2.0-py3-none-any.whl)
DEBUG Searching for a compatible version of iniconfig (*)
DEBUG Selecting: iniconfig==2.0.0 (iniconfig-2.0.0-py3-none-any.whl)
DEBUG Searching for a compatible version of packaging (*)
DEBUG Selecting: packaging==24.0 (packaging-24.0-py3-none-any.whl)
DEBUG Searching for a compatible version of pluggy (>=0.12, <1.0)
DEBUG Selecting: pluggy==0.13.1 (pluggy-0.13.1-py2.py3-none-any.whl)
DEBUG Searching for a compatible version of exceptiongroup (>=1.0.0rc8)
DEBUG Selecting: exceptiongroup==1.2.1 (exceptiongroup-1.2.1-py3-none-any.whl)
DEBUG Searching for a compatible version of tomli (>=1.0.0)
DEBUG Selecting: tomli==2.0.1 (tomli-2.0.1-py3-none-any.whl)
DEBUG Searching for a compatible version of py (>=1.4.17)
DEBUG Selecting: py==1.11.0 (py-1.11.0-py2.py3-none-any.whl)
DEBUG Searching for a compatible version of six (*)
DEBUG Selecting: six==1.16.0 (six-1.16.0-py2.py3-none-any.whl)
DEBUG Searching for a compatible version of virtualenv (>=1.11.2)
DEBUG Selecting: virtualenv==20.26.0 (virtualenv-20.26.0-py3-none-any.whl)
DEBUG Adding transitive dependency for virtualenv==20.26.0: distlib>=0.3.7, <1
DEBUG Adding transitive dependency for virtualenv==20.26.0: filelock>=3.12.2, <4
DEBUG Adding transitive dependency for virtualenv==20.26.0: platformdirs>=3.9.1, <5
DEBUG Found fresh response for: https://pypi.org/simple/distlib/
DEBUG Found fresh response for: https://pypi.org/simple/platformdirs/
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl.metadata
DEBUG Found fresh response for: https://pypi.org/simple/filelock/
DEBUG Searching for a compatible version of distlib (>=0.3.7, <1)
DEBUG Selecting: distlib==0.3.8 (distlib-0.3.8-py2.py3-none-any.whl)
DEBUG Searching for a compatible version of filelock (>=3.12.2, <4)
DEBUG Selecting: filelock==3.13.4 (filelock-3.13.4-py3-none-any.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/6e/b5/15b3b36f298bcbc0be82a371ac744f4f5a10309ade0b8bbde286598dd612/filelock-3.13.4-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/b0/15/1691fa5aaddc0c4ea4901c26f6137c29d5f6673596fe960a0340e8c308e1/platformdirs-4.2.1-py3-none-any.whl.metadata
DEBUG Searching for a compatible version of platformdirs (>=3.9.1, <5)
DEBUG Selecting: platformdirs==4.2.1 (platformdirs-4.2.1-py3-none-any.whl)
DEBUG Tried 44 versions: coverage[toml] 27, attrs 1, coverage 1, distlib 1, exceptiongroup 1, filelock 1, iniconfig 1, packaging 1, platformdirs 1, pluggy 1, py 1, pytest 1, pytest-cov 1, root 1, six 1, tomli 1, tox 1, virtualenv 1
Resolved 16 packages in 7ms
DEBUG Requirement already cached: attrs==23.2.0
DEBUG Requirement already cached: coverage==6.5.0
DEBUG Requirement already cached: distlib==0.3.8
DEBUG Requirement already cached: exceptiongroup==1.2.1
DEBUG Requirement already cached: filelock==3.13.4
DEBUG Requirement already cached: iniconfig==2.0.0
DEBUG Requirement already cached: packaging==24.0
DEBUG Requirement already cached: platformdirs==4.2.1
DEBUG Requirement already cached: pluggy==0.13.1
DEBUG Requirement already cached: py==1.11.0
DEBUG Requirement already cached: pytest==7.2.0
DEBUG Requirement already cached: pytest-cov==4.0.0
DEBUG Requirement already cached: six==1.16.0
DEBUG Requirement already cached: tomli==2.0.1
DEBUG Requirement already cached: tox==2.9.1
DEBUG Requirement already cached: virtualenv==20.26.0
Installed 16 packages in 3ms
 + attrs==23.2.0
 + coverage==6.5.0
 + distlib==0.3.8
 + exceptiongroup==1.2.1
 + filelock==3.13.4
 + iniconfig==2.0.0
 + packaging==24.0
 + platformdirs==4.2.1
 + pluggy==0.13.1
 + py==1.11.0
 + pytest==7.2.0
 + pytest-cov==4.0.0
 + six==1.16.0
 + tomli==2.0.1
 + tox==2.9.1
 + virtualenv==20.26.0
pypy3: 152 I exit 0 (0.02 seconds) /home/mahmoud/projects/boltons> venv/bin/uv pip install -r requirements-test.txt -v pid=182072 [tox/execute/api.py:286]
.pkg: 154 W venv> venv/bin/uv venv -p /home/mahmoud/projects/boltons/venv/bin/python -v /home/mahmoud/projects/boltons/.tox/.pkg/.venv [tox/tox_env/api.py:425]
DEBUG Starting interpreter discovery for Python @ `/home/mahmoud/projects/boltons/venv/bin/python`
DEBUG Cached interpreter info for Python 3.10.12, skipping probing: venv/bin/python
Using Python 3.10.12 interpreter at: venv/bin/python
Creating virtualenv at: .tox/.pkg/.venv
.pkg: 161 I exit 0 (0.01 seconds) /home/mahmoud/projects/boltons> venv/bin/uv venv -p /home/mahmoud/projects/boltons/venv/bin/python -v /home/mahmoud/projects/boltons/.tox/.pkg/.venv pid=182173 [tox/execute/api.py:286]
.pkg: 161 W install_requires> venv/bin/uv pip install 'setuptools>=40.8.0' wheel -v [tox/tox_env/api.py:425]
INFO Found a virtualenv through VIRTUAL_ENV at: /home/mahmoud/projects/boltons/.tox/.pkg/.venv
DEBUG Cached interpreter info for Python 3.10.12, skipping probing: .tox/.pkg/.venv/bin/python
DEBUG Using Python 3.10.12 environment at [36m.tox/.pkg/.venv/bin/python[39m
DEBUG Trying to lock if free: .tox/.pkg/.venv/.lock
DEBUG Using registry request timeout of 30s
DEBUG Solving with target Python version 3.10.12
DEBUG Adding direct dependency: setuptools>=40.8.0
DEBUG Adding direct dependency: wheel*
DEBUG Found fresh response for: https://pypi.org/simple/wheel/
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/7d/cd/d7460c9a869b16c3dd4e1e403cce337df165368c71d6af229a74699622ce/wheel-0.43.0-py3-none-any.whl.metadata
DEBUG Found fresh response for: https://pypi.org/simple/setuptools/
DEBUG Searching for a compatible version of setuptools (>=40.8.0)
DEBUG Selecting: setuptools==69.5.1 (setuptools-69.5.1-py3-none-any.whl)
DEBUG Found fresh response for: https://files.pythonhosted.org/packages/f7/29/13965af254e3373bceae8fb9a0e6ea0d0e571171b80d6646932131d6439b/setuptools-69.5.1-py3-none-any.whl.metadata
DEBUG Searching for a compatible version of wheel (*)
DEBUG Selecting: wheel==0.43.0 (wheel-0.43.0-py3-none-any.whl)
DEBUG Tried 3 versions: root 1, setuptools 1, wheel 1
Resolved 2 packages in 1ms
DEBUG Requirement already cached: setuptools==69.5.1
DEBUG Requirement already cached: wheel==0.43.0
Installed 2 packages in 2ms
 + setuptools==69.5.1
 + wheel==0.43.0
.pkg: 174 I exit 0 (0.01 seconds) /home/mahmoud/projects/boltons> venv/bin/uv pip install 'setuptools>=40.8.0' wheel -v pid=182196 [tox/execute/api.py:286]
.pkg: 175 W _optional_hooks> python /home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:425]
Backend: run command _optional_hooks with args {}
Backend: Wrote response {'return': {'get_requires_for_build_sdist': True, 'prepare_metadata_for_build_wheel': True, 'get_requires_for_build_wheel': True, 'build_editable': True, 'get_requires_for_build_editable': True, 'prepare_metadata_for_build_editable': True}} to /tmp/pep517__optional_hooks-ucmllkix.json
.pkg: 320 I exit None (0.14 seconds) /home/mahmoud/projects/boltons> python /home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=182252 [tox/execute/api.py:286]
.pkg: 346 W get_requires_for_build_wheel> python /home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:425]
/home/mahmoud/projects/boltons/.tox/.pkg/.venv/lib/python3.10/site-packages/setuptools/dist.py:318: InformationOnly: Normalizing '24.0.1dev' to '24.0.1.dev0'
  self.metadata.version = self._normalize_version(self.metadata.version)
Backend: run command get_requires_for_build_wheel with args {'config_settings': None}
running egg_info
writing boltons.egg-info/PKG-INFO
writing dependency_links to boltons.egg-info/dependency_links.txt
writing top-level names to boltons.egg-info/top_level.txt
reading manifest file 'boltons.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: manifest_maker: MANIFEST.in, line 6: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

warning: manifest_maker: MANIFEST.in, line 7: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

adding license file 'LICENSE'
no previously-included directories found matching 'docs/_build'
writing manifest file 'boltons.egg-info/SOURCES.txt'
Backend: Wrote response {'return': ['wheel']} to /tmp/pep517_get_requires_for_build_wheel-lvjkg5ju.json
.pkg: 444 I exit None (0.10 seconds) /home/mahmoud/projects/boltons> python /home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=182258 [tox/execute/api.py:286]
.pkg: 469 W install_requires_for_build_wheel> venv/bin/uv pip install wheel -v [tox/tox_env/api.py:425]
INFO Found a virtualenv through VIRTUAL_ENV at: /home/mahmoud/projects/boltons/.tox/.pkg/.venv
DEBUG Cached interpreter info for Python 3.10.12, skipping probing: .tox/.pkg/.venv/bin/python
DEBUG Using Python 3.10.12 environment at [36m.tox/.pkg/.venv/bin/python[39m
DEBUG Trying to lock if free: .tox/.pkg/.venv/.lock
Audited 1 package in 0.37ms
.pkg: 478 I exit 0 (0.01 seconds) /home/mahmoud/projects/boltons> venv/bin/uv pip install wheel -v pid=182275 [tox/execute/api.py:286]
.pkg: 478 W build_wheel> python /home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:425]
/home/mahmoud/projects/boltons/.tox/.pkg/.venv/lib/python3.10/site-packages/setuptools/dist.py:318: InformationOnly: Normalizing '24.0.1dev' to '24.0.1.dev0'
  self.metadata.version = self._normalize_version(self.metadata.version)
Backend: run command build_wheel with args {'wheel_directory': '/home/mahmoud/projects/boltons/.tox/.pkg/dist', 'config_settings': None, 'metadata_directory': None}
running bdist_wheel
running build
running build_py
copying boltons/mboxutils.py -> build/lib/boltons
copying boltons/urlutils.py -> build/lib/boltons
copying boltons/pathutils.py -> build/lib/boltons
copying boltons/excutils.py -> build/lib/boltons
copying boltons/ecoutils.py -> build/lib/boltons
copying boltons/setutils.py -> build/lib/boltons
copying boltons/statsutils.py -> build/lib/boltons
copying boltons/jsonutils.py -> build/lib/boltons
copying boltons/strutils.py -> build/lib/boltons
copying boltons/__init__.py -> build/lib/boltons
copying boltons/cacheutils.py -> build/lib/boltons
copying boltons/namedutils.py -> build/lib/boltons
copying boltons/deprutils.py -> build/lib/boltons
copying boltons/typeutils.py -> build/lib/boltons
copying boltons/queueutils.py -> build/lib/boltons
copying boltons/gcutils.py -> build/lib/boltons
copying boltons/formatutils.py -> build/lib/boltons
copying boltons/iterutils.py -> build/lib/boltons
copying boltons/ioutils.py -> build/lib/boltons
copying boltons/timeutils.py -> build/lib/boltons
copying boltons/easterutils.py -> build/lib/boltons
copying boltons/fileutils.py -> build/lib/boltons
copying boltons/debugutils.py -> build/lib/boltons
copying boltons/mathutils.py -> build/lib/boltons
copying boltons/tbutils.py -> build/lib/boltons
copying boltons/dictutils.py -> build/lib/boltons
copying boltons/listutils.py -> build/lib/boltons
copying boltons/tableutils.py -> build/lib/boltons
copying boltons/socketutils.py -> build/lib/boltons
copying boltons/funcutils.py -> build/lib/boltons
running egg_info
writing boltons.egg-info/PKG-INFO
writing dependency_links to boltons.egg-info/dependency_links.txt
writing top-level names to boltons.egg-info/top_level.txt
reading manifest file 'boltons.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: manifest_maker: MANIFEST.in, line 6: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

warning: manifest_maker: MANIFEST.in, line 7: 'recursive-include' expects <dir> <pattern1> <pattern2> ...

adding license file 'LICENSE'
no previously-included directories found matching 'docs/_build'
writing manifest file 'boltons.egg-info/SOURCES.txt'
installing to build/bdist.linux-x86_64/wheel
running install
running install_lib
creating build/bdist.linux-x86_64/wheel
creating build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/mboxutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/urlutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/pathutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/excutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/ecoutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/setutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/statsutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/jsonutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/strutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/__init__.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/cacheutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/namedutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/deprutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/typeutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/queueutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/gcutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/formatutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/iterutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/ioutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/timeutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/easterutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/fileutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/debugutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/mathutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/tbutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/dictutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/listutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/tableutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/socketutils.py -> build/bdist.linux-x86_64/wheel/boltons
copying build/lib/boltons/funcutils.py -> build/bdist.linux-x86_64/wheel/boltons
running install_egg_info
Copying boltons.egg-info to build/bdist.linux-x86_64/wheel/boltons-24.0.1.dev0-py3.10.egg-info
running install_scripts
creating build/bdist.linux-x86_64/wheel/boltons-24.0.1.dev0.dist-info/WHEEL
creating '/home/mahmoud/projects/boltons/.tox/.pkg/dist/.tmp-pkygmtep/boltons-24.0.1.dev0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it
adding 'boltons/__init__.py'
adding 'boltons/cacheutils.py'
adding 'boltons/debugutils.py'
adding 'boltons/deprutils.py'
adding 'boltons/dictutils.py'
adding 'boltons/easterutils.py'
adding 'boltons/ecoutils.py'
adding 'boltons/excutils.py'
adding 'boltons/fileutils.py'
adding 'boltons/formatutils.py'
adding 'boltons/funcutils.py'
adding 'boltons/gcutils.py'
adding 'boltons/ioutils.py'
adding 'boltons/iterutils.py'
adding 'boltons/jsonutils.py'
adding 'boltons/listutils.py'
adding 'boltons/mathutils.py'
adding 'boltons/mboxutils.py'
adding 'boltons/namedutils.py'
adding 'boltons/pathutils.py'
adding 'boltons/queueutils.py'
adding 'boltons/setutils.py'
adding 'boltons/socketutils.py'
adding 'boltons/statsutils.py'
adding 'boltons/strutils.py'
adding 'boltons/tableutils.py'
adding 'boltons/tbutils.py'
adding 'boltons/timeutils.py'
adding 'boltons/typeutils.py'
adding 'boltons/urlutils.py'
adding 'boltons-24.0.1.dev0.dist-info/LICENSE'
adding 'boltons-24.0.1.dev0.dist-info/METADATA'
adding 'boltons-24.0.1.dev0.dist-info/WHEEL'
adding 'boltons-24.0.1.dev0.dist-info/top_level.txt'
adding 'boltons-24.0.1.dev0.dist-info/RECORD'
removing build/bdist.linux-x86_64/wheel
Backend: Wrote response {'return': 'boltons-24.0.1.dev0-py3-none-any.whl'} to /tmp/pep517_build_wheel-kx_ppnu7.json
.pkg: 626 I exit None (0.15 seconds) /home/mahmoud/projects/boltons> python /home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=182299 [tox/execute/api.py:286]
.pkg: 671 D package .tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl links to .pkg/dist/boltons-24.0.1.dev0-py3-none-any.whl (/home/mahmoud/projects/boltons/.tox) [tox/util/file_view.py:39]
pypy3: 672 W install_package> venv/bin/uv pip install --reinstall --no-deps boltons@/home/mahmoud/projects/boltons/.tox/.tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl -v [tox/tox_env/api.py:425]
INFO Found a virtualenv through VIRTUAL_ENV at: /home/mahmoud/projects/boltons/.tox/pypy3/.venv
DEBUG Cached interpreter info for Python 3.10.12, skipping probing: .tox/pypy3/.venv/bin/python
DEBUG Using Python 3.10.12 environment at [36m.tox/pypy3/.venv/bin/python[39m
DEBUG Trying to lock if free: .tox/pypy3/.venv/.lock
DEBUG Using registry request timeout of 30s
DEBUG Solving with target Python version 3.10.12
DEBUG Adding direct dependency: boltons*
DEBUG Searching for a compatible version of boltons @ file:///home/mahmoud/projects/boltons/.tox/.tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl (*)
DEBUG Tried 2 versions: boltons 1, root 1
Resolved 1 package in 0.68ms
DEBUG Identified uncached requirement: boltons @ file:///home/mahmoud/projects/boltons/.tox/.tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl
DEBUG Unnecessary package: attrs==23.2.0
DEBUG Unnecessary package: coverage==6.5.0
DEBUG Unnecessary package: distlib==0.3.8
DEBUG Unnecessary package: exceptiongroup==1.2.1
DEBUG Unnecessary package: filelock==3.13.4
DEBUG Unnecessary package: iniconfig==2.0.0
DEBUG Unnecessary package: packaging==24.0
DEBUG Unnecessary package: platformdirs==4.2.1
DEBUG Unnecessary package: pluggy==0.13.1
DEBUG Unnecessary package: py==1.11.0
DEBUG Unnecessary package: pytest==7.2.0
DEBUG Unnecessary package: pytest-cov==4.0.0
DEBUG Unnecessary package: six==1.16.0
DEBUG Unnecessary package: tomli==2.0.1
DEBUG Unnecessary package: tox==2.9.1
DEBUG Unnecessary package: virtualenv==20.26.0
Downloaded 1 package in 2ms
Installed 1 package in 0.44ms
 + boltons==24.0.1.dev0 (from file:///home/mahmoud/projects/boltons/.tox/.tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl)
pypy3: 687 I exit 0 (0.01 seconds) /home/mahmoud/projects/boltons> venv/bin/uv pip install --reinstall --no-deps boltons@/home/mahmoud/projects/boltons/.tox/.tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl -v pid=182405 [tox/execute/api.py:286]
pypy3: 688 E internal error [tox/session/cmd/run/single.py:60]
Traceback (most recent call last):
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/__init__.py", line 75, in replacer
    replaced = replace(conf, self, raw_, args_)  # do replacements
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 58, in replace
    return Replacer(conf, loader, conf_args=args, depth=depth).join(find_replace_expr(value))
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 187, in join
    return "".join(self(value))
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 184, in __call__
    return [self._replace_match(me) if isinstance(me, MatchExpression) else str(me) for me in value]
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 184, in <listcomp>
    return [self._replace_match(me) if isinstance(me, MatchExpression) else str(me) for me in value]
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 206, in _replace_match
    replace_value = replace_reference(self.conf, self.loader, arg_value, conf_args)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 273, in replace_reference
    raise exception
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/replace.py", line 258, in replace_reference
    value = src.load(key, conf_args.chain)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/sets.py", line 127, in load
    return config_definition.__call__(self._conf, self.loaders, ConfigLoadArgs(chain, self.name, self.env_name))  # noqa: PLC2801
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/of_type.py", line 56, in __call__
    return self.value() if callable(self.value) else self.value
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox_uv/_venv.py", line 156, in env_site_package_dir
    assert self.base_python.version_info.minor is not None  # noqa: S101
AssertionError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/session/cmd/run/single.py", line 48, in _evaluate
    code, outcomes = run_commands(tox_env, no_test)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/session/cmd/run/single.py", line 85, in run_commands
    status_main = run_command_set(tox_env, "commands", chdir, ignore_errors, outcomes)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/session/cmd/run/single.py", line 104, in run_command_set
    command_set: list[Command] = tox_env.conf[key]
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/sets.py", line 116, in __getitem__
    return self.load(item)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/sets.py", line 127, in load
    return config_definition.__call__(self._conf, self.loaders, ConfigLoadArgs(chain, self.name, self.env_name))  # noqa: PLC2801
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/of_type.py", line 103, in __call__
    value = loader.load(key, self.of_type, self.factory, conf, args)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/api.py", line 144, in load
    converted = self.build(key, of_type, factory, conf, raw, args)
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/__init__.py", line 84, in build
    prepared = replacer(raw, args) if not delay_replace else raw
  File "/home/mahmoud/projects/boltons/venv/lib/python3.10/site-packages/tox/config/loader/ini/__init__.py", line 81, in replacer
    raise HandledError(msg) from exception
tox.report.HandledError: replace failed in pypy3.commands with AssertionError()
.pkg: 689 D delete package /home/mahmoud/projects/boltons/.tox/.tmp/package/31/boltons-24.0.1.dev0-py3-none-any.whl [tox/tox_env/python/virtual_env/package/pyproject.py:224]
  pypy3: FAIL code 2 (0.59 seconds)
  evaluation failed :( (0.62 seconds)
```
</details>

## Minimal example

All I've done is clone https://github.com/mahmoud/boltons, `pip install --upgrade tox tox-uv` (to tox 4.15.0 and tox-uv 1.7.0), and run `tox -r`. PyPy is the default version 3.8 for Ubuntu Jammy. 

<hr/>

Let me know if there's anything I should do (including just updating my local PyPy :) ). Thanks!


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 592bff2..a90f793 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -29,6 +29,11 @@ jobs:
           - ubuntu-latest
           - windows-latest
           - macos-latest
+        include:
+           - { os: ubuntu-latest, py: "pypy3.10" }
+           - { os: ubuntu-latest, py: "pypy3.8" }
+           - { os: windows-latest, py: "pypy3.10" }
+           - { os: windows-latest, py: "pypy3.8" }
     steps:
       - name: setup python for tox
         uses: actions/setup-python@v5
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 181d683..bc9f322 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -23,9 +23,9 @@ repos:
     rev: "1.8.0"
     hooks:
       - id: pyproject-fmt
-        additional_dependencies: ["tox>=4.14"]
+        additional_dependencies: ["tox>=4.15"]
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: "v0.4.1"
+    rev: "v0.4.2"
     hooks:
       - id: ruff-format
       - id: ruff
diff --git a/pyproject.toml b/pyproject.toml
index b0010fe..72643e1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,7 +2,7 @@
 build-backend = "hatchling.build"
 requires = [
   "hatch-vcs>=0.4",
-  "hatchling>=1.21.1",
+  "hatchling>=1.24.2",
 ]
 
 [project]
@@ -16,7 +16,9 @@ keywords = [
   "virtual",
 ]
 license = "MIT"
-maintainers = [{ name = "Bernát Gábor", email = "gaborjbernat@gmail.com" }]
+maintainers = [
+  { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" },
+]
 requires-python = ">=3.8"
 classifiers = [
   "Development Status :: 5 - Production/Stable",
@@ -38,17 +40,19 @@ dynamic = [
   "version",
 ]
 dependencies = [
-  "packaging>=23.2",
-  "tox<5,>=4.14",
-  "uv<1,>=0.1.15",
+  'importlib_resources>=6.4; python_version < "3.9"',
+  "packaging>=24",
+  "tox<5,>=4.15",
+  "uv<1,>=0.1.39",
 ]
 optional-dependencies.test = [
   "covdefaults>=2.3",
   "devpi-process>=1",
-  "pytest>=8.0.2",
-  "pytest-cov>=4.1",
-  "pytest-mock>=3.12",
+  "pytest>=8.2",
+  "pytest-cov>=5",
+  "pytest-mock>=3.14",
 ]
+urls.Changelog = "https://github.com/tox-dev/tox-uv/releases"
 urls.Documentation = "https://github.com/tox-dev/tox-uv#tox-uv"
 urls.Homepage = "https://github.com/tox-dev/tox-uv"
 urls.Source = "https://github.com/tox-dev/tox-uv"
@@ -57,7 +61,10 @@ entry-points.tox = {"tox-uv" = "tox_uv.plugin"}
 
 [tool.hatch]
 build.hooks.vcs.version-file = "src/tox_uv/version.py"
-build.targets.sdist.include = ["/src", "/tests"]
+build.targets.sdist.include = [
+  "/src",
+  "/tests",
+]
 version.source = "vcs"
 
 [tool.black]
@@ -66,8 +73,15 @@ line-length = 120
 [tool.ruff]
 line-length = 120
 target-version = "py38"
-lint.isort = { known-first-party = ["tox_uv", "tests"], required-imports = ["from __future__ import annotations"] }
-lint.select = ["ALL"]
+lint.isort = { known-first-party = [
+  "tox_uv",
+  "tests",
+], required-imports = [
+  "from __future__ import annotations",
+] }
+lint.select = [
+  "ALL",
+]
 lint.ignore = [
   "ANN101", # Missing type annotation for `self` in method
   "D301",   #  Use `r"""` if any backslashes in a docstring
@@ -103,14 +117,34 @@ count = true
 [tool.coverage]
 html.show_contexts = true
 html.skip_covered = false
-paths.source = ["src", ".tox/*/.venv/lib/*/site-packages", ".tox\\*\\.venv\\Lib\\site-packages", "**/src", "**\\src"]
-paths.other = [".", "*/tox_uv", "*\\tox_uv"]
+paths.source = [
+  "src",
+  ".tox/*/.venv/lib/*/site-packages",
+  ".tox\\*\\.venv\\Lib\\site-packages",
+  "**/src",
+  "**\\src",
+]
+paths.other = [
+  ".",
+  "*/tox_uv",
+  "*\\tox_uv",
+]
+report.omit = [
+  "src/tox_uv/_venv_query.py",
+]
 report.fail_under = 100
 run.parallel = true
-run.plugins = ["covdefaults"]
+run.plugins = [
+  "covdefaults",
+]
 
 [tool.mypy]
 python_version = "3.11"
 show_error_codes = true
 strict = true
-overrides = [{ module = ["virtualenv.*", "uv.*"], ignore_missing_imports = true }]
+overrides = [
+  { module = [
+    "virtualenv.*",
+    "uv.*",
+  ], ignore_missing_imports = true },
+]
diff --git a/src/tox_uv/_venv.py b/src/tox_uv/_venv.py
index 261d4f7..2822fd9 100644
--- a/src/tox_uv/_venv.py
+++ b/src/tox_uv/_venv.py
@@ -2,8 +2,17 @@
 
 from __future__ import annotations
 
+import json
 import sys
 from abc import ABC
+from functools import cached_property
+
+if sys.version_info >= (3, 9):  # pragma: no cover (py39+)
+    from importlib.resources import as_file, files
+else:  # pragma: no cover (py38+)
+    from importlib_resources import as_file, files
+
+
 from pathlib import Path
 from platform import python_implementation
 from typing import TYPE_CHECKING, Any, cast
@@ -26,6 +35,7 @@ class UvVenv(Python, ABC):
     def __init__(self, create_args: ToxEnvCreateArgs) -> None:
         self._executor: Execute | None = None
         self._installer: UvInstaller | None = None
+        self._created = False
         super().__init__(create_args)
 
     def register_config(self) -> None:
@@ -112,14 +122,12 @@ def _default_pass_env(self) -> list[str]:
         return env
 
     def create_python_env(self) -> None:
-        base = self.base_python.version_info
-        version_spec = (
-            sys.executable
-            if (base.major, base.minor) == sys.version_info[:2]
-            else f"{base.major}.{base.minor}"
-            if base.minor
-            else f"{base.major}"
-        )
+        base, imp = self.base_python.version_info, self.base_python.impl_lower
+        if (base.major, base.minor) == sys.version_info[:2] and (sys.implementation.name.lower() == imp):
+            version_spec = sys.executable
+        else:
+            uv_imp = "python" if (imp and imp == "cpython") else imp
+            version_spec = f"{uv_imp or ''}{base.major}.{base.minor}" if base.minor else f"{uv_imp or ''}{base.major}"
         cmd: list[str] = [self.uv, "venv", "-p", version_spec]
         if self.options.verbosity > 2:  # noqa: PLR2004
             cmd.append("-v")
@@ -128,6 +136,7 @@ def create_python_env(self) -> None:
         cmd.append(str(self.venv_dir))
         outcome = self.execute(cmd, stdin=StdinSource.OFF, run_id="venv", show=None)
         outcome.assert_success()
+        self._created = True
 
     @property
     def _allow_externals(self) -> list[str]:
@@ -152,9 +161,34 @@ def env_site_package_dir(self) -> Path:
         if sys.platform == "win32":  # pragma: win32 cover
             return self.venv_dir / "Lib" / "site-packages"
         else:  # pragma: win32 no cover # noqa: RET505
-            assert self.base_python.version_info.major is not None  # noqa: S101
-            assert self.base_python.version_info.minor is not None  # noqa: S101
-            return self.venv_dir / "lib" / f"python{self.base_python.version_dot}" / "site-packages"
+            py = self._py_info
+            impl = "pypy" if py.implementation == "pypy" else "python"
+            return self.venv_dir / "lib" / f"{impl}{py.version_dot}" / "site-packages"
+
+    @cached_property
+    def _py_info(self) -> PythonInfo:  # pragma: win32 no cover
+        if not (self._created or self.env_dir.exists()):  # called during config, no environment setup
+            self.create_python_env()
+            self._paths = self.prepend_env_var_path()
+        with as_file(files("tox_uv") / "_venv_query.py") as filename:
+            cmd = [str(self.env_python()), str(filename)]
+            outcome = self.execute(cmd, stdin=StdinSource.OFF, run_id="venv-query", show=False)
+        outcome.assert_success()
+        res = json.loads(outcome.out)
+        return PythonInfo(
+            implementation=res["implementation"],
+            version_info=VersionInfo(
+                major=res["version_info"][0],
+                minor=res["version_info"][1],
+                micro=res["version_info"][2],
+                releaselevel=res["version_info"][3],
+                serial=res["version_info"][4],
+            ),
+            version=res["version"],
+            is_64=res["is_64"],
+            platform=sys.platform,
+            extra={},
+        )
 
 
 __all__ = [
diff --git a/src/tox_uv/_venv_query.py b/src/tox_uv/_venv_query.py
new file mode 100644
index 0000000..4f709b3
--- /dev/null
+++ b/src/tox_uv/_venv_query.py
@@ -0,0 +1,14 @@
+from __future__ import annotations
+
+import json
+import sys
+from platform import python_implementation
+
+print(  # noqa: T201
+    json.dumps({
+        "implementation": python_implementation().lower(),
+        "version_info": sys.version_info,
+        "version": sys.version,
+        "is_64": sys.maxsize > 2**32,
+    })
+)
diff --git a/tox.ini b/tox.ini
index 1f0d2af..ca5baeb 100644
--- a/tox.ini
+++ b/tox.ini
@@ -32,7 +32,7 @@ commands =
 description = run static analysis and style check using flake8
 skip_install = true
 deps =
-    pre-commit>=3.6.2
+    pre-commit>=3.7
 pass_env =
     HOMEPATH
     PROGRAMDATA
@@ -42,7 +42,7 @@ commands =
 [testenv:type]
 description = run type check on code base
 deps =
-    mypy==1.8
+    mypy==1.10
 set_env =
     {tty:MYPY_FORCE_COLOR = 1}
 commands =
@@ -53,7 +53,7 @@ commands =
 description = check that the package metadata is correct
 skip_install = true
 deps =
-    build[virtualenv]>=1.1.1
+    build[virtualenv]>=1.2.1
     twine>=5
 set_env =
     {tty:FORCE_COLOR = 1}


Test patch:
diff --git a/tests/test_tox_uv_venv.py b/tests/test_tox_uv_venv.py
index 8a67432..131a890 100644
--- a/tests/test_tox_uv_venv.py
+++ b/tests/test_tox_uv_venv.py
@@ -79,7 +79,7 @@ def test_uv_env_python(tox_project: ToxProjectCreator) -> None:
     assert env_bin_dir in result.out
 
 
-def test_uv_env_site_package_dir(tox_project: ToxProjectCreator) -> None:
+def test_uv_env_site_package_dir_run(tox_project: ToxProjectCreator) -> None:
     project = tox_project({"tox.ini": "[testenv]\npackage=skip\ncommands=python -c 'print(\"{envsitepackagesdir}\")'"})
     result = project.run("-vv")
     result.assert_success()
@@ -89,7 +89,23 @@ def test_uv_env_site_package_dir(tox_project: ToxProjectCreator) -> None:
     if sys.platform == "win32":  # pragma: win32 cover
         path = str(env_dir / "Lib" / "site-packages")
     else:  # pragma: win32 no cover
-        path = str(env_dir / "lib" / f"python{ver.major}.{ver.minor}" / "site-packages")
+        impl = "pypy" if sys.implementation.name.lower() == "pypy" else "python"
+        path = str(env_dir / "lib" / f"{impl}{ver.major}.{ver.minor}" / "site-packages")
+    assert path in result.out
+
+
+def test_uv_env_site_package_dir_conf(tox_project: ToxProjectCreator) -> None:
+    project = tox_project({"tox.ini": "[testenv]\npackage=skip\ncommands={envsitepackagesdir}"})
+    result = project.run("c", "-e", "py", "-k", "commands")
+    result.assert_success()
+
+    env_dir = project.path / ".tox" / "py" / ".venv"
+    ver = sys.version_info
+    if sys.platform == "win32":  # pragma: win32 cover
+        path = str(env_dir / "Lib" / "site-packages")
+    else:  # pragma: win32 no cover
+        impl = "pypy" if sys.implementation.name.lower() == "pypy" else "python"
+        path = str(env_dir / "lib" / f"{impl}{ver.major}.{ver.minor}" / "site-packages")
     assert path in result.out