Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

20.13.0: virtualenv is not setuptools > 60 ready? #2283

Closed
kloczek opened this issue Jan 7, 2022 · 1 comment
Closed

20.13.0: virtualenv is not setuptools > 60 ready? #2283

kloczek opened this issue Jan 7, 2022 · 1 comment

Comments

@kloczek
Copy link

kloczek commented Jan 7, 2022

Issue

I'm trying to package your module as an rpm package. So I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

  • python3 -sBm build -w --no-isolation
  • install .whl file in </install/prefix>
  • run pytest with PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>

As I'm using build with --no-isolation it meands that I'm usinng locally installed setuptools 60.1.0.
On first look lokks like virtualenv may be not ready for that version because `pytest is failing with deprecation warnings.
Here is pytest output:

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-virtualenv-20.13.0-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-virtualenv-20.13.0-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra tests/unit tests/integration
=========================================================================== test session starts ============================================================================
platform linux -- Python 3.8.12, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
Using --randomly-seed=2744815825
rootdir: /home/tkloczko/rpmbuild/BUILD/virtualenv-20.13.0, configfile: setup.cfg
plugins: freezegun-0.4.2, mock-3.6.1, randomly-3.10.3, timeout-2.0.2, flaky-3.7.0
collected 313 items

tests/unit/seed/embed/test_pip_invoke.py FFFF                                                                                                                        [  1%]
tests/unit/test_util.py .s                                                                                                                                           [  1%]
tests/integration/test_zipapp.py sss                                                                                                                                 [  2%]
tests/unit/config/test_ini.py .                                                                                                                                      [  3%]
tests/integration/test_run_int.py s                                                                                                                                  [  3%]
tests/unit/discovery/py_info/test_py_info_exe_based_of.py .........................                                                                                  [ 11%]
tests/unit/activation/test_activation_support.py ............                                                                                                        [ 15%]
tests/unit/config/test_env_var.py ........                                                                                                                           [ 17%]
tests/unit/seed/wheels/test_periodic_update.py .F...FF.F..FF..F..FFF.FFFFF                                                                                           [ 26%]
tests/unit/seed/wheels/test_acquire.py ...FFFF.                                                                                                                      [ 29%]
tests/unit/activation/test_activator.py .                                                                                                                            [ 29%]
tests/unit/config/test___main__.py ......                                                                                                                            [ 31%]
tests/unit/seed/embed/test_bootstrap_link_via_app_data.py .......FF.                                                                                                 [ 34%]
tests/unit/seed/embed/test_base_embed.py ....                                                                                                                        [ 35%]
tests/unit/test_run.py ....                                                                                                                                          [ 37%]
tests/unit/activation/test_activate_this.py s                                                                                                                        [ 37%]
tests/unit/discovery/test_py_spec.py ................................................                                                                                [ 52%]
tests/unit/activation/test_fish.py ..                                                                                                                                [ 53%]
tests/unit/create/via_global_ref/test_build_c_ext.py ..                                                                                                              [ 53%]
tests/unit/activation/test_powershell.py ss                                                                                                                          [ 54%]
tests/unit/activation/test_bash.py ..                                                                                                                                [ 55%]
tests/unit/seed/wheels/test_bundle.py EEEEE                                                                                                                          [ 56%]
tests/unit/create/test_creator.py .s..ss.s..............s...s.s...s.....sss........ssss..s                                                                           [ 74%]
tests/unit/create/via_global_ref/test_api.py .                                                                                                                       [ 75%]
tests/unit/activation/test_python_activator.py ..                                                                                                                    [ 75%]
tests/unit/activation/test_batch.py ss                                                                                                                               [ 76%]
tests/unit/discovery/py_info/test_py_info.py .......s........................................                                                                        [ 91%]
tests/unit/config/cli/test_parser.py ...                                                                                                                             [ 92%]
tests/unit/discovery/test_discovery.py .......                                                                                                                       [ 94%]
tests/unit/create/test_interpreters.py ..                                                                                                                            [ 95%]
tests/unit/seed/wheels/test_wheels_util.py F.FF                                                                                                                      [ 96%]
tests/unit/discovery/windows/test_windows_pep514.py ss                                                                                                               [ 97%]
tests/unit/seed/wheels/test_acquire_find_wheel.py F.FF                                                                                                               [ 98%]
tests/unit/activation/test_nushell.py ss                                                                                                                             [ 99%]
tests/unit/activation/test_csh.py ..                                                                                                                                 [100%]

================================================================================== ERRORS ==================================================================================
____________________________________________________________ ERROR at setup of test_version_pinned_in_app_data _____________________________________________________________

for_py_version = '3.8'

    @pytest.fixture(scope="module")
    def next_pip_wheel(for_py_version):
        wheel = get_embed_wheel("pip", for_py_version)
>       new_version = list(wheel.version_tuple)
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

for_py_version = '3.8'
wheel      = None

tests/unit/seed/wheels/test_bundle.py:19: AttributeError
_____________________________________________________________ ERROR at setup of test_version_pinned_not_found ______________________________________________________________

for_py_version = '3.8'

    @pytest.fixture(scope="module")
    def next_pip_wheel(for_py_version):
        wheel = get_embed_wheel("pip", for_py_version)
>       new_version = list(wheel.version_tuple)
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

for_py_version = '3.8'
wheel      = None

tests/unit/seed/wheels/test_bundle.py:19: AttributeError
______________________________________________________________ ERROR at setup of test_version_pinned_is_embed ______________________________________________________________

for_py_version = '3.8'

    @pytest.fixture(scope="module")
    def next_pip_wheel(for_py_version):
        wheel = get_embed_wheel("pip", for_py_version)
>       new_version = list(wheel.version_tuple)
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

for_py_version = '3.8'
wheel      = None

tests/unit/seed/wheels/test_bundle.py:19: AttributeError
__________________________________________________________________ ERROR at setup of test_version_bundle ___________________________________________________________________

for_py_version = '3.8'

    @pytest.fixture(scope="module")
    def next_pip_wheel(for_py_version):
        wheel = get_embed_wheel("pip", for_py_version)
>       new_version = list(wheel.version_tuple)
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

for_py_version = '3.8'
wheel      = None

tests/unit/seed/wheels/test_bundle.py:19: AttributeError
___________________________________________________________________ ERROR at setup of test_version_embed ___________________________________________________________________

for_py_version = '3.8'

    @pytest.fixture(scope="module")
    def next_pip_wheel(for_py_version):
        wheel = get_embed_wheel("pip", for_py_version)
>       new_version = list(wheel.version_tuple)
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

for_py_version = '3.8'
wheel      = None

tests/unit/seed/wheels/test_bundle.py:19: AttributeError
================================================================================= FAILURES =================================================================================
_________________________________________________________________ test_base_bootstrap_via_pip_invoke[pip] __________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in0'), coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e1bd940>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dfc0d00>, current_fastest = 'builtin', no = 'pip'

    @pytest.mark.slow
    @pytest.mark.parametrize("no", ["pip", "setuptools", "wheel", ""])
    def test_base_bootstrap_via_pip_invoke(tmp_path, coverage_env, mocker, current_fastest, no):
        extra_search_dir = tmp_path / "extra"
        extra_search_dir.mkdir()
        for_py_version = "{}.{}".format(*sys.version_info[0:2])
>       new = BUNDLE_SUPPORT[for_py_version]
E       TypeError: 'NoneType' object is not subscriptable

coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e1bd940>
current_fastest = 'builtin'
extra_search_dir = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in0/extra')
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dfc0d00>
no         = 'pip'
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in0')

tests/unit/seed/embed/test_pip_invoke.py:21: TypeError
______________________________________________________________ test_base_bootstrap_via_pip_invoke[setuptools] ______________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in1'), coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e0ad8b0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12e09a910>, current_fastest = 'builtin', no = 'setuptools'

    @pytest.mark.slow
    @pytest.mark.parametrize("no", ["pip", "setuptools", "wheel", ""])
    def test_base_bootstrap_via_pip_invoke(tmp_path, coverage_env, mocker, current_fastest, no):
        extra_search_dir = tmp_path / "extra"
        extra_search_dir.mkdir()
        for_py_version = "{}.{}".format(*sys.version_info[0:2])
>       new = BUNDLE_SUPPORT[for_py_version]
E       TypeError: 'NoneType' object is not subscriptable

coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e0ad8b0>
current_fastest = 'builtin'
extra_search_dir = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in1/extra')
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12e09a910>
no         = 'setuptools'
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in1')

tests/unit/seed/embed/test_pip_invoke.py:21: TypeError
________________________________________________________________ test_base_bootstrap_via_pip_invoke[wheel] _________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in2'), coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e0add30>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dffa2e0>, current_fastest = 'builtin', no = 'wheel'

    @pytest.mark.slow
    @pytest.mark.parametrize("no", ["pip", "setuptools", "wheel", ""])
    def test_base_bootstrap_via_pip_invoke(tmp_path, coverage_env, mocker, current_fastest, no):
        extra_search_dir = tmp_path / "extra"
        extra_search_dir.mkdir()
        for_py_version = "{}.{}".format(*sys.version_info[0:2])
>       new = BUNDLE_SUPPORT[for_py_version]
E       TypeError: 'NoneType' object is not subscriptable

coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e0add30>
current_fastest = 'builtin'
extra_search_dir = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in2/extra')
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dffa2e0>
no         = 'wheel'
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in2')

tests/unit/seed/embed/test_pip_invoke.py:21: TypeError
___________________________________________________________________ test_base_bootstrap_via_pip_invoke[] ___________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in3'), coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e0adaf0>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12e00c700>, current_fastest = 'builtin', no = ''

    @pytest.mark.slow
    @pytest.mark.parametrize("no", ["pip", "setuptools", "wheel", ""])
    def test_base_bootstrap_via_pip_invoke(tmp_path, coverage_env, mocker, current_fastest, no):
        extra_search_dir = tmp_path / "extra"
        extra_search_dir.mkdir()
        for_py_version = "{}.{}".format(*sys.version_info[0:2])
>       new = BUNDLE_SUPPORT[for_py_version]
E       TypeError: 'NoneType' object is not subscriptable

coverage_env = <function coverage_env.<locals>.finish at 0x7fb12e0adaf0>
current_fastest = 'builtin'
extra_search_dir = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in3/extra')
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12e00c700>
no         = ''
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_base_bootstrap_via_pip_in3')

tests/unit/seed/embed/test_pip_invoke.py:21: TypeError
_____________________________________________________ test_download_periodic_stop_at_first_usable_with_previous_minor ______________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_periodic_stop_at0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc0c8e0>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12dc0cbb0>

    def test_download_periodic_stop_at_first_usable_with_previous_minor(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW)
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
>       pip_version_remote = [wheel_path(wheel, (0, 1, 1)), wheel_path(wheel, (0, 1, 0)), wheel_path(wheel, (0, -1, 0))]

app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_download_periodic_stop_at0/app)
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12dc0cbb0>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc0c8e0>
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_periodic_stop_at0')
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:613:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 1, 1), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 1, 1)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
__________________________________________________________________ test_periodic_update_stops_at_current ___________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12db32340>, session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
for_py_version = '3.8'

    def test_periodic_update_stops_at_current(mocker, session_app_data, for_py_version):
        current = get_embed_wheel("setuptools", for_py_version)

        now, completed = datetime.now(), datetime.now() - timedelta(days=29)
        u_log = UpdateLog(
            started=completed,
            completed=completed,
            versions=[
>               NewVersion(wheel_path(current, (1,)), completed, now - timedelta(days=1), "periodic"),
                NewVersion(current.path, completed, now - timedelta(days=2), "periodic"),
                NewVersion(wheel_path(current, (-1,)), completed, now - timedelta(days=30), "periodic"),
            ],
            periodic=True,
        )

completed  = datetime.datetime(2021, 12, 9, 14, 55, 0, 675001)
current    = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12db32340>
now        = datetime.datetime(2022, 1, 7, 14, 55, 0, 674999)
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

tests/unit/seed/wheels/test_periodic_update.py:96:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (1,), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (1,)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
___________________________________________________________________________ test_manual_upgrade ____________________________________________________________________________

session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0), caplog = <_pytest.logging.LogCaptureFixture object at 0x7fb12dc02340>
mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc020d0>, for_py_version = '3.8'

    def test_manual_upgrade(session_app_data, caplog, mocker, for_py_version):
        wheel = get_embed_wheel("pip", for_py_version)
>       new_version = NewVersion(wheel.path, datetime.now(), datetime.now() - timedelta(days=20), "manual")
E       AttributeError: 'NoneType' object has no attribute 'path'

caplog     = <_pytest.logging.LogCaptureFixture object at 0x7fb12dc02340>
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc020d0>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:45: AttributeError
_____________________________________________________________________ test_do_update_skip_already_done _____________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_do_update_skip_already_do0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12db583a0>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12db584c0>

    def test_do_update_skip_already_done(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW + timedelta(hours=1))
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
        extra = tmp_path / "extra"
        extra.mkdir()

        def _download_wheel(distribution, version_spec, for_py_version, search_dirs, app_data, to_folder, env):  # noqa
            return wheel.path

        download_wheel = mocker.patch("virtualenv.seed.wheels.acquire.download_wheel", side_effect=_download_wheel)
        url_o = mocker.patch("virtualenv.seed.wheels.periodic_update.urlopen", side_effect=RuntimeError)

        released = _UP_NOW - timedelta(days=30)
        u_log = UpdateLog(
            started=_UP_NOW - timedelta(days=31),
            completed=released,
>           versions=[NewVersion(filename=wheel.path.name, found_date=released, release_date=released, source="periodic")],
            periodic=True,
        )
E       AttributeError: 'NoneType' object has no attribute 'path'

_download_wheel = <function test_do_update_skip_already_done.<locals>._download_wheel at 0x7fb12dc28dc0>
app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_do_update_skip_already_do0/app)
download_wheel = <MagicMock name='download_wheel' id='140398952810672'>
extra      = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_do_update_skip_already_do0/extra')
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12db584c0>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12db583a0>
released   = datetime.datetime(2021, 12, 8, 14, 54, 49, 583556)
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_do_update_skip_already_do0')
url_o      = <MagicMock name='urlopen' id='140398953479616'>
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:420: AttributeError
________________________________________________________________________ test_manual_update_honored ________________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9cf2e0>, session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
for_py_version = '3.8'

    def test_manual_update_honored(mocker, session_app_data, for_py_version):
        current = get_embed_wheel("setuptools", for_py_version)
>       expected_path = wheel_path(current, (0, 1, 1))

current    = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9cf2e0>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

tests/unit/seed/wheels/test_periodic_update.py:153:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 1, 1), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 1, 1)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
___________________________________________________________________________ test_do_update_first ___________________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_do_update_first0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc0b610>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12dc0b460>

    def test_do_update_first(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW)
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
        extra = tmp_path / "extra"
        extra.mkdir()

        pip_version_remote = [
>           (wheel_path(wheel, (1, 0, 0)), None),
            (wheel_path(wheel, (0, 1, 0)), _UP_NOW - timedelta(days=1)),
            (wheel_path(wheel, (0, 0, 1)), _UP_NOW - timedelta(days=2)),
            (wheel.path, _UP_NOW - timedelta(days=3)),
            (wheel_path(wheel, (-1, 0, 0)), _UP_NOW - timedelta(days=30)),
        ]

app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_do_update_first0/app)
extra      = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_do_update_first0/extra')
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12dc0b460>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc0b610>
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_do_update_first0')
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:341:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (1, 0, 0), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (1, 0, 0)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
_______________________________________________________________ test_download_periodic_stop_at_first_usable ________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_periodic_stop_at1'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9c23d0>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9c24c0>

    def test_download_periodic_stop_at_first_usable(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW)
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
>       pip_version_remote = [wheel_path(wheel, (0, 1, 1)), wheel_path(wheel, (0, 1, 0))]

app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_download_periodic_stop_at1/app)
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9c24c0>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9c23d0>
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_periodic_stop_at1')
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:585:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 1, 1), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 1, 1)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
_______________________________________________________________ test_download_manual_stop_after_one_download _______________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_manual_stop_afte0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9d8eb0>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9b40d0>

    def test_download_manual_stop_after_one_download(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW)
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
>       pip_version_remote = [wheel_path(wheel, (0, 1, 1))]

app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_download_manual_stop_afte0/app)
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9b40d0>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9d8eb0>
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_manual_stop_afte0')
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:530:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 1, 1), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 1, 1)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
______________________________________________________________________ test_download_stop_with_embed _______________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_stop_with_embed0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9cf310>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9c22e0>

    def test_download_stop_with_embed(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW)
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
>       pip_version_remote = [wheel_path(wheel, (0, 0, 2)), wheel_path(wheel, (0, 0, 1)), wheel_path(wheel, (-1, 0, 0))]

app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_download_stop_with_embed0/app)
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9c22e0>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9cf310>
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_stop_with_embed0')
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:507:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 0, 2), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 0, 2)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
__________________________________________________________________ test_periodic_update_latest_per_patch ___________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dbeeeb0>, session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
for_py_version = '3.8'

    def test_periodic_update_latest_per_patch(mocker, session_app_data, for_py_version):
        current = get_embed_wheel("setuptools", for_py_version)
>       expected_path = wheel_path(current, (0, 1, 2))

current    = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dbeeeb0>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

tests/unit/seed/wheels/test_periodic_update.py:110:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 1, 2), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 1, 2)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
________________________________________________________________________ test_trigger_update_debug _________________________________________________________________________

for_py_version = '3.8', session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_trigger_update_debug0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc0b700>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fb12dbf38b0>

    def test_trigger_update_debug(for_py_version, session_app_data, tmp_path, mocker, monkeypatch):
        monkeypatch.setenv(str("_VIRTUALENV_PERIODIC_UPDATE_INLINE"), str("1"))
        current = get_embed_wheel("pip", for_py_version)

        process = mocker.MagicMock()
        process.communicate.return_value = None, None
        Popen = mocker.patch("virtualenv.seed.wheels.periodic_update.Popen", return_value=process)

        trigger_update(
            "pip", for_py_version, current, [tmp_path / "a", tmp_path / "b"], session_app_data, os.environ, False
        )

        assert Popen.call_count == 1
        args, kwargs = Popen.call_args
        cmd = (
            dedent(
                """
            from virtualenv.report import setup_report, MAX_LEVEL
            from virtualenv.seed.wheels.periodic_update import do_update
            setup_report(MAX_LEVEL, show_pid=True)
            do_update({!r}, {!r}, {!r}, {!r}, {!r}, {!r})
            """,
            )
            .strip()
            .format(
                "pip",
                for_py_version,
>               str(current.path),
                str(session_app_data),
                [str(tmp_path / "a"), str(tmp_path / "b")],
                False,
            )
        )
E       AttributeError: 'NoneType' object has no attribute 'path'

Popen      = <MagicMock name='Popen' id='140398953834336'>
args       = (['/usr/bin/python3', '-c', "from virtualenv.report import setup_report, MAX_LEVEL\nfrom virtualenv.seed.wheels.period...ytest-668/test_trigger_update_debug0/a', '/tmp/pytest-of-tkloczko/pytest-668/test_trigger_update_debug0/b'], False)"],)
current    = None
for_py_version = '3.8'
kwargs     = {'stderr': None, 'stdout': None}
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dc0b700>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fb12dbf38b0>
process    = <MagicMock id='140398955383200'>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_trigger_update_debug0')

tests/unit/seed/wheels/test_periodic_update.py:321: AttributeError
_________________________________________________________________ test_download_manual_ignores_pre_release _________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_manual_ignores_p0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9bb1c0>
freezer = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9bb340>

    def test_download_manual_ignores_pre_release(tmp_path, mocker, freezer):
        freezer.move_to(_UP_NOW)
        wheel = get_embed_wheel("pip", "3.9")
        app_data_outer = AppDataDiskFolder(str(tmp_path / "app"))
>       pip_version_remote = [wheel_path(wheel, (0, 0, 1))]

app_data_outer = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/test_download_manual_ignores_p0/app)
freezer    = <freezegun.api.FrozenDateTimeFactory object at 0x7fb12d9bb340>
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d9bb1c0>
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_download_manual_ignores_p0')
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:552:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 0, 1), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 0, 1)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
________________________________________________________________________ test_pick_periodic_update _________________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_pick_periodic_update0')
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12db3d070>
for_py_version = '3.8'

    def test_pick_periodic_update(tmp_path, session_app_data, mocker, for_py_version):
        embed, current = get_embed_wheel("setuptools", "3.5"), get_embed_wheel("setuptools", for_py_version)
        mocker.patch("virtualenv.seed.wheels.bundle.load_embed_wheel", return_value=embed)
        completed = datetime.now() - timedelta(days=29)
        u_log = UpdateLog(
            started=datetime.now() - timedelta(days=30),
            completed=completed,
>           versions=[NewVersion(filename=current.path, found_date=completed, release_date=completed, source="periodic")],
            periodic=True,
        )
E       AttributeError: 'NoneType' object has no attribute 'path'

completed  = datetime.datetime(2021, 12, 9, 14, 55, 1, 281847)
current    = None
embed      = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12db3d070>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_pick_periodic_update0')

tests/unit/seed/wheels/test_periodic_update.py:76: AttributeError
_______________________________________________________________________ test_trigger_update_no_debug _______________________________________________________________________

for_py_version = '3.8', session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_trigger_update_no_debug0'), mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12db973a0>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fb12dbee760>

    def test_trigger_update_no_debug(for_py_version, session_app_data, tmp_path, mocker, monkeypatch):
        monkeypatch.delenv(str("_VIRTUALENV_PERIODIC_UPDATE_INLINE"), raising=False)
        current = get_embed_wheel("setuptools", for_py_version)
        process = mocker.MagicMock()
        process.communicate.return_value = None, None
        Popen = mocker.patch("virtualenv.seed.wheels.periodic_update.Popen", return_value=process)

        trigger_update(
            "setuptools", for_py_version, current, [tmp_path / "a", tmp_path / "b"], session_app_data, os.environ, True
        )

        assert Popen.call_count == 1
        args, kwargs = Popen.call_args
        cmd = (
            dedent(
                """
            from virtualenv.report import setup_report, MAX_LEVEL
            from virtualenv.seed.wheels.periodic_update import do_update
            setup_report(MAX_LEVEL, show_pid=True)
            do_update({!r}, {!r}, {!r}, {!r}, {!r}, {!r})
            """,
            )
            .strip()
            .format(
                "setuptools",
                for_py_version,
>               str(current.path),
                str(session_app_data),
                [str(tmp_path / "a"), str(tmp_path / "b")],
                True,
            )
        )
E       AttributeError: 'NoneType' object has no attribute 'path'

Popen      = <MagicMock name='Popen' id='140398951603456'>
args       = (['/usr/bin/python3', '-c', "from virtualenv.report import setup_report, MAX_LEVEL\nfrom virtualenv.seed.wheels.period...-668/test_trigger_update_no_debug0/a', '/tmp/pytest-of-tkloczko/pytest-668/test_trigger_update_no_debug0/b'], True)"],)
current    = None
for_py_version = '3.8'
kwargs     = {'stderr': -1, 'stdout': -1}
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12db973a0>
monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7fb12dbee760>
process    = <MagicMock id='140398953066992'>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_trigger_update_no_debug0')

tests/unit/seed/wheels/test_periodic_update.py:279: AttributeError
___________________________________________________________ test_periodic_update_latest_per_patch_prev_is_manual ___________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12db72b20>, session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
for_py_version = '3.8'

    def test_periodic_update_latest_per_patch_prev_is_manual(mocker, session_app_data, for_py_version):
        current = get_embed_wheel("setuptools", for_py_version)
>       expected_path = wheel_path(current, (0, 1, 2))

current    = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12db72b20>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

tests/unit/seed/wheels/test_periodic_update.py:131:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

wheel = None, of = (0, 1, 2), pre_release = ''

    def wheel_path(wheel, of, pre_release=""):
>       new_version = ".".join(str(i) for i in (tuple(sum(x) for x in zip_longest(wheel.version_tuple, of, fillvalue=0))))
E       AttributeError: 'NoneType' object has no attribute 'version_tuple'

of         = (0, 1, 2)
pre_release = ''
wheel      = None

tests/unit/seed/wheels/test_periodic_update.py:174: AttributeError
___________________________________________________________________________ test_download_fails ____________________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d99e340>, for_py_version = '3.8'
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

    def test_download_fails(mocker, for_py_version, session_app_data):
        p_open = mocker.MagicMock()
        mocker.patch("virtualenv.seed.wheels.acquire.Popen", return_value=p_open)
        p_open.communicate.return_value = "out", "err"
        p_open.returncode = 1

        as_path = mocker.MagicMock()
        with pytest.raises(CalledProcessError) as context:
>           download_wheel("pip", "==1", for_py_version, [], session_app_data, as_path, os.environ),

as_path    = <MagicMock id='140398953226192'>
context    = <ExceptionInfo for raises contextmanager>
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d99e340>
p_open     = <MagicMock id='140398951007856'>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

tests/unit/seed/wheels/test_acquire.py:57:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../../BUILDROOT/python-virtualenv-20.13.0-2.fc35.x86_64/usr/lib/python3.8/site-packages/virtualenv/seed/wheels/acquire.py:65: in download_wheel
    env = pip_wheel_env_run(search_dirs, app_data, env)
        app_data   = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
        cmd        = ['/usr/bin/python3', '-m', 'pip', 'download', '--progress-bar', 'off', ...]
        distribution = 'pip'
        env        = environ({'PATH': '/home/tkloczko/rpmbuild/BUILDROOT/python-virtualenv-20.13.0-2.fc35.x86_64/usr/bin:/home/tkloczko/rpm...els/test_acquire.py::test_download_fails (call)', 'VIRTUALENV_NO_PERIODIC_UPDATE': '1', 'VIRTUALENV_NO_DOWNLOAD': '1'})
        for_py_version = '3.8'
        search_dirs = []
        to_download = 'pip==1'
        to_folder  = <MagicMock id='140398953226192'>
        version_spec = '==1'
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

search_dirs = [], app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
env = {'AR': '/usr/bin/gcc-ar', 'BASH_FUNC_which%%': '() {  ( alias;\n eval ${which_declare} ) | /usr/bin/which --tty-only -...les -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections -flto=auto -flto-partition=none', ...}

    def pip_wheel_env_run(search_dirs, app_data, env):
        for_py_version = "{}.{}".format(*sys.version_info[0:2])
        env = env.copy()
        env.update(
            {
                ensure_str(k): str(v)  # python 2 requires these to be string only (non-unicode)
                for k, v in {"PIP_USE_WHEEL": "1", "PIP_USER": "0", "PIP_NO_INPUT": "1"}.items()
            },
        )
        wheel = get_wheel(
            distribution="pip",
            version=None,
            for_py_version=for_py_version,
            search_dirs=search_dirs,
            download=False,
            app_data=app_data,
            do_periodic_update=False,
            env=env,
        )
        if wheel is None:
>           raise RuntimeError("could not find the embedded pip")
E           RuntimeError: could not find the embedded pip

app_data   = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
env        = {'AR': '/usr/bin/gcc-ar', 'BASH_FUNC_which%%': '() {  ( alias;\n eval ${which_declare} ) | /usr/bin/which --tty-only -...les -fstack-clash-protection -fcf-protection -fdata-sections -ffunction-sections -flto=auto -flto-partition=none', ...}
for_py_version = '3.8'
search_dirs = []
wheel      = None

../../BUILDROOT/python-virtualenv-20.13.0-2.fc35.x86_64/usr/lib/python3.8/site-packages/virtualenv/seed/wheels/acquire.py:126: RuntimeError
________________________________________________________________ test_get_wheel_download_not_called[pinned] ________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d97f130>, for_py_version = '3.8'
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
downloaded_wheel = (Wheel(setuptools-0.0.0-py2.py3-none-any.whl), <MagicMock name='download_wheel' id='140398950853408'>), version = 'pinned'

    @pytest.mark.parametrize("version", ["embed", "pinned"])
    def test_get_wheel_download_not_called(mocker, for_py_version, session_app_data, downloaded_wheel, version):
        distribution = "setuptools"
        expected = get_embed_wheel(distribution, for_py_version)
        if version == "pinned":
>           version = expected.version
E           AttributeError: 'NoneType' object has no attribute 'version'

distribution = 'setuptools'
downloaded_wheel = (Wheel(setuptools-0.0.0-py2.py3-none-any.whl), <MagicMock name='download_wheel' id='140398950853408'>)
expected   = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d97f130>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
version    = 'pinned'

tests/unit/seed/wheels/test_acquire.py:105: AttributeError
________________________________________________________________ test_get_wheel_download_not_called[embed] _________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12dbaba90>, for_py_version = '3.8'
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
downloaded_wheel = (Wheel(setuptools-0.0.0-py2.py3-none-any.whl), <MagicMock name='download_wheel' id='140398952971376'>), version = 'embed'

    @pytest.mark.parametrize("version", ["embed", "pinned"])
    def test_get_wheel_download_not_called(mocker, for_py_version, session_app_data, downloaded_wheel, version):
        distribution = "setuptools"
        expected = get_embed_wheel(distribution, for_py_version)
        if version == "pinned":
            version = expected.version
        write = mocker.patch("virtualenv.app_data.via_disk_folder.JSONStoreDisk.write")
        wheel = get_wheel(distribution, version, for_py_version, [], True, session_app_data, False, os.environ)
>       assert wheel is not None
E       assert None is not None

distribution = 'setuptools'
downloaded_wheel = (Wheel(setuptools-0.0.0-py2.py3-none-any.whl), <MagicMock name='download_wheel' id='140398952971376'>)
expected   = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12dbaba90>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)
version    = 'embed'
wheel      = None
write      = <MagicMock name='write' id='140398950920784'>

tests/unit/seed/wheels/test_acquire.py:108: AssertionError
______________________________________________________________________ test_download_wheel_bad_output ______________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb12d985970>, for_py_version = '3.8'
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

    def test_download_wheel_bad_output(mocker, for_py_version, session_app_data):
        """if the download contains no match for what wheel was downloaded, pick one that matches from target"""
        distribution = "setuptools"
        p_open = mocker.MagicMock()
        mocker.patch("virtualenv.seed.wheels.acquire.Popen", return_value=p_open)
        p_open.communicate.return_value = "", ""
        p_open.returncode = 0

        embed = get_embed_wheel(distribution, for_py_version)
        as_path = mocker.MagicMock()
        available = discover_wheels(BUNDLE_FOLDER, "setuptools", None, for_py_version)
        as_path.iterdir.return_value = [i.path for i in available]

        result = download_wheel(
>           distribution, "=={}".format(embed.version), for_py_version, [], session_app_data, as_path, os.environ
        )
E       AttributeError: 'NoneType' object has no attribute 'version'

as_path    = <MagicMock id='140398951846144'>
available  = []
distribution = 'setuptools'
embed      = None
for_py_version = '3.8'
mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb12d985970>
p_open     = <MagicMock id='140398953294048'>
session_app_data = AppDataDiskFolder(/tmp/pytest-of-tkloczko/pytest-668/session-app-data0)

tests/unit/seed/wheels/test_acquire.py:44: AttributeError
____________________________________________________________________ test_seed_link_via_app_data[False] ____________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_seed_link_via_app_data_Fa0'), coverage_env = <function coverage_env.<locals>.finish at 0x7fb12dbe0940>
current_fastest = 'builtin', copies = False

    @pytest.mark.slow
    @pytest.mark.parametrize("copies", [False, True] if fs_supports_symlink() else [True])
    def test_seed_link_via_app_data(tmp_path, coverage_env, current_fastest, copies):
        current = PythonInfo.current_system()
>       bundle_ver = BUNDLE_SUPPORT[current.version_release_str]
E       TypeError: 'NoneType' object is not subscriptable

copies     = False
coverage_env = <function coverage_env.<locals>.finish at 0x7fb12dbe0940>
current    = PythonInfo({'platform': 'linux', 'implementation': 'CPython', 'version_info': VersionInfo(major=3, minor=8, micro=12, ...em_stdlib': '/usr/lib64/python3.8', 'system_stdlib_platform': '/usr/lib64/python3.8', 'max_size': 9223372036854775807})
current_fastest = 'builtin'
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_seed_link_via_app_data_Fa0')

tests/unit/seed/embed/test_bootstrap_link_via_app_data.py:26: TypeError
____________________________________________________________________ test_seed_link_via_app_data[True] _____________________________________________________________________

tmp_path = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_seed_link_via_app_data_Tr0'), coverage_env = <function coverage_env.<locals>.finish at 0x7fb12dbe0ee0>
current_fastest = 'builtin', copies = True

    @pytest.mark.slow
    @pytest.mark.parametrize("copies", [False, True] if fs_supports_symlink() else [True])
    def test_seed_link_via_app_data(tmp_path, coverage_env, current_fastest, copies):
        current = PythonInfo.current_system()
>       bundle_ver = BUNDLE_SUPPORT[current.version_release_str]
E       TypeError: 'NoneType' object is not subscriptable

copies     = True
coverage_env = <function coverage_env.<locals>.finish at 0x7fb12dbe0ee0>
current    = PythonInfo({'platform': 'linux', 'implementation': 'CPython', 'version_info': VersionInfo(major=3, minor=8, micro=12, ...em_stdlib': '/usr/lib64/python3.8', 'system_stdlib_platform': '/usr/lib64/python3.8', 'max_size': 9223372036854775807})
current_fastest = 'builtin'
tmp_path   = PosixPath('/tmp/pytest-of-tkloczko/pytest-668/test_seed_link_via_app_data_Tr0')

tests/unit/seed/embed/test_bootstrap_link_via_app_data.py:26: TypeError
__________________________________________________________________ test_wheel_support_no_python_requires ___________________________________________________________________

mocker = <pytest_mock.plugin.MockerFixture object at 0x7fb11f54c7f0>

    def test_wheel_support_no_python_requires(mocker):
        wheel = get_embed_wheel("setuptools", for_py_version=None)
        zip_mock = mocker.MagicMock()
        mocker.patch("virtualenv.seed.wheels.util.ZipFile", new=zip_mock)
        zip_mock.return_value.__enter__.return_value.read = lambda name: b""

>       supports = wheel.support_py("3.8")
E       AttributeError: 'NoneType' object has no attribute 'support_py'

mocker     = <pytest_mock.plugin.MockerFixture object at 0x7fb11f54c7f0>
wheel      = None
zip_mock   = <MagicMock id='140398711589568'>

tests/unit/seed/wheels/test_wheels_util.py:15: AttributeError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
78511 Attempting to acquire lock 140398711589136 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78511 Lock 140398711589136 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78511 Attempting to release lock 140398711589136 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78511 Lock 140398711589136 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
---------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398711589136 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398711589136 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398711589136 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398711589136 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
78519 Attempting to acquire lock 140398711605664 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78519 Lock 140398711605664 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78520 Attempting to release lock 140398711605664 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78520 Lock 140398711605664 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
-------------------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398711605664 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398711605664 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398711605664 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398711605664 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
__________________________________________________________________________ test_wheel_not_support __________________________________________________________________________

    def test_wheel_not_support():
        wheel = get_embed_wheel("setuptools", MAX)
>       assert wheel.support_py("3.3") is False
E       AttributeError: 'NoneType' object has no attribute 'support_py'

wheel      = None

tests/unit/seed/wheels/test_wheels_util.py:26: AttributeError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
78528 Attempting to acquire lock 140398712207728 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78528 Lock 140398712207728 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78529 Attempting to release lock 140398712207728 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78529 Lock 140398712207728 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
---------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398712207728 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398712207728 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398712207728 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398712207728 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
78532 Attempting to acquire lock 140398713182048 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78532 Lock 140398713182048 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78532 Attempting to release lock 140398713182048 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78532 Lock 140398713182048 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
-------------------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398713182048 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398713182048 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398713182048 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398713182048 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
_____________________________________________________________________________ test_wheel_repr ______________________________________________________________________________

    def test_wheel_repr():
        wheel = get_embed_wheel("setuptools", MAX)
>       assert str(wheel.path) in repr(wheel)
E       AttributeError: 'NoneType' object has no attribute 'path'

wheel      = None

tests/unit/seed/wheels/test_wheels_util.py:31: AttributeError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
78535 Attempting to acquire lock 140398713184208 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78536 Lock 140398713184208 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78536 Attempting to release lock 140398713184208 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78536 Lock 140398713184208 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
---------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398713184208 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398713184208 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398713184208 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398713184208 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
78539 Attempting to acquire lock 140398712855424 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78539 Lock 140398712855424 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78540 Attempting to release lock 140398712855424 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78540 Lock 140398712855424 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
-------------------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398712855424 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398712855424 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398712855424 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398712855424 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
_____________________________________________________________________________ test_find_exact ______________________________________________________________________________

for_py_version = '3.8'

    def test_find_exact(for_py_version):
        expected = get_embed_wheel("setuptools", for_py_version)
>       result = find_compatible_in_house("setuptools", "=={}".format(expected.version), for_py_version, BUNDLE_FOLDER)
E       AttributeError: 'NoneType' object has no attribute 'version'

expected   = None
for_py_version = '3.8'

tests/unit/seed/wheels/test_acquire_find_wheel.py:17: AttributeError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
78545 Attempting to acquire lock 140398712139104 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78545 Lock 140398712139104 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78546 Attempting to release lock 140398712139104 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78546 Lock 140398712139104 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
---------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398712139104 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398712139104 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398712139104 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398712139104 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
78549 Attempting to acquire lock 140398713184112 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78549 Lock 140398713184112 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78549 Attempting to release lock 140398713184112 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78550 Lock 140398713184112 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
-------------------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398713184112 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398713184112 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398713184112 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398713184112 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
___________________________________________________________________________ test_find_less_than ____________________________________________________________________________

for_py_version = '3.8'

    def test_find_less_than(for_py_version):
        latest = get_embed_wheel("setuptools", MAX)
>       result = find_compatible_in_house("setuptools", "<{}".format(latest.version), MAX, BUNDLE_FOLDER)
E       AttributeError: 'NoneType' object has no attribute 'version'

for_py_version = '3.8'
latest     = None

tests/unit/seed/wheels/test_acquire_find_wheel.py:23: AttributeError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
78558 Attempting to acquire lock 140398714091264 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78558 Lock 140398714091264 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78558 Attempting to release lock 140398714091264 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78559 Lock 140398714091264 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
---------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398714091264 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398714091264 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398714091264 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398714091264 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
78562 Attempting to acquire lock 140398713766144 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78562 Lock 140398713766144 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78562 Attempting to release lock 140398713766144 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78562 Lock 140398713766144 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
-------------------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398713766144 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398713766144 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398713766144 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398713766144 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
_____________________________________________________________________________ test_find_latest _____________________________________________________________________________

for_py_version = '3.8'

    def test_find_latest(for_py_version):
        result = find_compatible_in_house("setuptools", None, for_py_version, BUNDLE_FOLDER)
        expected = get_embed_wheel("setuptools", for_py_version)
>       assert result.path == expected.path
E       AttributeError: 'NoneType' object has no attribute 'path'

expected   = None
for_py_version = '3.8'
result     = None

tests/unit/seed/wheels/test_acquire_find_wheel.py:12: AttributeError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
78565 Attempting to acquire lock 140398952594544 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78565 Lock 140398952594544 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78566 Attempting to release lock 140398952594544 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78566 Lock 140398952594544 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
---------------------------------------------------------------------------- Captured log setup ----------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398952594544 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398952594544 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398952594544 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398952594544 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
------------------------------------------------------------------------- Captured stdout teardown -------------------------------------------------------------------------
78569 Attempting to acquire lock 140398712138528 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:168]
78569 Lock 140398712138528 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:172]
78570 Attempting to release lock 140398712138528 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:202]
78570 Lock 140398712138528 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock [DEBUG _api:205]
-------------------------------------------------------------------------- Captured log teardown ---------------------------------------------------------------------------
DEBUG    filelock:_api.py:168 Attempting to acquire lock 140398712138528 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:172 Lock 140398712138528 acquired on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:202 Attempting to release lock 140398712138528 on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
DEBUG    filelock:_api.py:205 Lock 140398712138528 released on /tmp/pytest-of-tkloczko/pytest-668/session-app-data0/py_info/1/.lock
============================================================================= warnings summary =============================================================================
../../../../../usr/lib/python3.8/site-packages/_pytest/config/__init__.py:1233
  /usr/lib/python3.8/site-packages/_pytest/config/__init__.py:1233: PytestConfigWarning: Unknown config option: env

    self._warn_or_fail_if_strict(f"Unknown config option: {key}\n")

../../../../../usr/lib/python3.8/site-packages/pytest_freezegun.py:17: 626 warnings
tests/unit/seed/wheels/test_periodic_update.py: 30 warnings
tests/unit/seed/wheels/test_acquire.py: 2 warnings
  /usr/lib/python3.8/site-packages/pytest_freezegun.py:17: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    if LooseVersion(pytest.__version__) < LooseVersion('3.6.0'):

tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke[pip]
  /usr/lib/python3.8/site-packages/_distutils_hack/__init__.py:36: UserWarning: Setuptools is replacing distutils.
    warnings.warn("Setuptools is replacing distutils.")

-- Docs: https://docs.pytest.org/en/stable/warnings.html
========================================================================= short test summary info ==========================================================================
SKIPPED [1] tests/unit/test_util.py:19: subprocess patch only applied on Windows python2
SKIPPED [2] tests/integration/test_zipapp.py:95: need --int option to run
SKIPPED [1] tests/integration/test_zipapp.py: need --int option to run
SKIPPED [1] tests/integration/test_run_int.py:13: need --int option to run
SKIPPED [2] tests/conftest.py:377: could not find 2
SKIPPED [1] tests/unit/activation/conftest.py:258: PowerShell(
version=FileNotFoundError(2, 'No such file or directory'),
creator=CPython3Posix(dest=/tmp/pytest-of-tkloczko/pytest-668/activation-tester-env2/e-$ èрт🚒♞中片-j, clear=False, no_vcs_ignore=False, global=False),
interpreter=PythonInfo(spec=CPython3.8.12.final.0-64, exe=/usr/bin/python3, platform=linux, version='3.8.12 (default, Dec 17 2021, 08:35:49) \n[GCC 11.2.1 20211203 (Red Hat 11.2.1-7)]', encoding_fs_io=utf-8-utf-8)) is not available due [Errno 2] No such file or directory: 'pwsh'
SKIPPED [1] tests/unit/activation/conftest.py:258: PowerShell(
version=FileNotFoundError(2, 'No such file or directory'),
creator=CPython3Posix(dest=/tmp/pytest-of-tkloczko/pytest-668/activation-tester-env3/e-$ èрт🚒♞中片-j, clear=False, no_vcs_ignore=False, global=False),
interpreter=PythonInfo(spec=CPython3.8.12.final.0-64, exe=/usr/bin/python3, platform=linux, version='3.8.12 (default, Dec 17 2021, 08:35:49) \n[GCC 11.2.1 20211203 (Red Hat 11.2.1-7)]', encoding_fs_io=utf-8-utf-8)) is not available due [Errno 2] No such file or directory: 'pwsh'
SKIPPED [1] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb12d973340>.returncode
SKIPPED [2] tests/unit/create/test_creator.py:467: we rewrite sys.path only on PY2
SKIPPED [1] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb11f7af9a0>.returncode
SKIPPED [1] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb11f792340>.returncode
SKIPPED [1] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb11f792d00>.returncode
SKIPPED [1] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb12dba1580>.returncode
SKIPPED [1] tests/unit/create/test_creator.py:389: OS does not have an altsep
SKIPPED [1] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb11f798160>.returncode
SKIPPED [1] tests/unit/create/test_creator.py:315: venv without clear might fail
SKIPPED [2] tests/unit/create/test_creator.py:523: stdlib components without py files only possible on CPython2
SKIPPED [1] tests/unit/create/test_creator.py:294: python 2 only tests
SKIPPED [2] tests/unit/create/conftest.py:101: could not resolve interpreter based on old_virtualenv because failed to create old virtualenv assert not 1
 +  where 1 = <subprocess.Popen object at 0x7fb12dba1160>.returncode
SKIPPED [2] tests/unit/activation/conftest.py:255: BatchActivator not supported
SKIPPED [1] tests/conftest.py:390: test not valid if run under system
SKIPPED [1] tests/unit/discovery/windows/test_windows_pep514.py:33: no Windows registry
SKIPPED [1] tests/unit/discovery/windows/test_windows_pep514.py:14: no Windows registry
SKIPPED [1] tests/unit/activation/conftest.py:258: Nushell(
version=TypeError('expected str, bytes or os.PathLike object, not NoneType'),
creator=CPython3Posix(dest=/tmp/pytest-of-tkloczko/pytest-668/activation-tester-env10/e-$ èрт🚒♞中片-j, clear=False, no_vcs_ignore=False, global=False),
interpreter=PythonInfo(spec=CPython3.8.12.final.0-64, exe=/usr/bin/python3, platform=linux, version='3.8.12 (default, Dec 17 2021, 08:35:49) \n[GCC 11.2.1 20211203 (Red Hat 11.2.1-7)]', encoding_fs_io=utf-8-utf-8)) is not available due expected str, bytes or os.PathLike object, not NoneType
SKIPPED [1] tests/unit/activation/conftest.py:258: Nushell(
version=TypeError('expected str, bytes or os.PathLike object, not NoneType'),
creator=CPython3Posix(dest=/tmp/pytest-of-tkloczko/pytest-668/activation-tester-env11/e-$ èрт🚒♞中片-j, clear=False, no_vcs_ignore=False, global=False),
interpreter=PythonInfo(spec=CPython3.8.12.final.0-64, exe=/usr/bin/python3, platform=linux, version='3.8.12 (default, Dec 17 2021, 08:35:49) \n[GCC 11.2.1 20211203 (Red Hat 11.2.1-7)]', encoding_fs_io=utf-8-utf-8)) is not available due expected str, bytes or os.PathLike object, not NoneType
ERROR tests/unit/seed/wheels/test_bundle.py::test_version_pinned_in_app_data - AttributeError: 'NoneType' object has no attribute 'version_tuple'
ERROR tests/unit/seed/wheels/test_bundle.py::test_version_pinned_not_found - AttributeError: 'NoneType' object has no attribute 'version_tuple'
ERROR tests/unit/seed/wheels/test_bundle.py::test_version_pinned_is_embed - AttributeError: 'NoneType' object has no attribute 'version_tuple'
ERROR tests/unit/seed/wheels/test_bundle.py::test_version_bundle - AttributeError: 'NoneType' object has no attribute 'version_tuple'
ERROR tests/unit/seed/wheels/test_bundle.py::test_version_embed - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke[pip] - TypeError: 'NoneType' object is not subscriptable
FAILED tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke[setuptools] - TypeError: 'NoneType' object is not subscriptable
FAILED tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke[wheel] - TypeError: 'NoneType' object is not subscriptable
FAILED tests/unit/seed/embed/test_pip_invoke.py::test_base_bootstrap_via_pip_invoke[] - TypeError: 'NoneType' object is not subscriptable
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_download_periodic_stop_at_first_usable_with_previous_minor - AttributeError: 'NoneType' object has no attribu...
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_periodic_update_stops_at_current - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_manual_upgrade - AttributeError: 'NoneType' object has no attribute 'path'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_do_update_skip_already_done - AttributeError: 'NoneType' object has no attribute 'path'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_manual_update_honored - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_do_update_first - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_download_periodic_stop_at_first_usable - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_download_manual_stop_after_one_download - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_download_stop_with_embed - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_periodic_update_latest_per_patch - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_trigger_update_debug - AttributeError: 'NoneType' object has no attribute 'path'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_download_manual_ignores_pre_release - AttributeError: 'NoneType' object has no attribute 'version_tuple'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_pick_periodic_update - AttributeError: 'NoneType' object has no attribute 'path'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_trigger_update_no_debug - AttributeError: 'NoneType' object has no attribute 'path'
FAILED tests/unit/seed/wheels/test_periodic_update.py::test_periodic_update_latest_per_patch_prev_is_manual - AttributeError: 'NoneType' object has no attribute 'version...
FAILED tests/unit/seed/wheels/test_acquire.py::test_download_fails - RuntimeError: could not find the embedded pip
FAILED tests/unit/seed/wheels/test_acquire.py::test_get_wheel_download_not_called[pinned] - AttributeError: 'NoneType' object has no attribute 'version'
FAILED tests/unit/seed/wheels/test_acquire.py::test_get_wheel_download_not_called[embed] - assert None is not None
FAILED tests/unit/seed/wheels/test_acquire.py::test_download_wheel_bad_output - AttributeError: 'NoneType' object has no attribute 'version'
FAILED tests/unit/seed/embed/test_bootstrap_link_via_app_data.py::test_seed_link_via_app_data[False] - TypeError: 'NoneType' object is not subscriptable
FAILED tests/unit/seed/embed/test_bootstrap_link_via_app_data.py::test_seed_link_via_app_data[True] - TypeError: 'NoneType' object is not subscriptable
FAILED tests/unit/seed/wheels/test_wheels_util.py::test_wheel_support_no_python_requires - AttributeError: 'NoneType' object has no attribute 'support_py'
FAILED tests/unit/seed/wheels/test_wheels_util.py::test_wheel_not_support - AttributeError: 'NoneType' object has no attribute 'support_py'
FAILED tests/unit/seed/wheels/test_wheels_util.py::test_wheel_repr - AttributeError: 'NoneType' object has no attribute 'path'
FAILED tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_exact - AttributeError: 'NoneType' object has no attribute 'version'
FAILED tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_less_than - AttributeError: 'NoneType' object has no attribute 'version'
FAILED tests/unit/seed/wheels/test_acquire_find_wheel.py::test_find_latest - AttributeError: 'NoneType' object has no attribute 'path'
============================================== 31 failed, 246 passed, 31 skipped, 660 warnings, 5 errors in 80.79s (0:01:20) ===============================================

Environment

  • OS: Linux x86/64
  • pip list of the host python where virtualenv is build:
Package                           Version
--------------------------------- -------------------
alabaster                         0.7.12
appdirs                           1.4.4
attrs                             21.4.0
Babel                             2.9.1
backports.entry-points-selectable 1.1.1
build                             0.7.0
chardet                           4.0.0
charset-normalizer                2.0.10
click                             8.0.3
click-default-group               1.2.2
coverage                          6.2
cycler                            0.11.0
dbus-python                       1.2.18
distlib                           0.3.4
distro                            1.6.0
docutils                          0.17.1
extras                            1.0.0
filelock                          3.4.2
fixtures                          3.0.0
flaky                             3.7.0
fonttools                         4.28.5
freezegun                         1.0.0
gpg                               1.16.0-unknown
idna                              3.3
imagesize                         1.3.0
importlib-metadata                4.10.0
incremental                       21.3.0
iniconfig                         1.1.1
Jinja2                            3.0.3
kiwisolver                        1.3.2
libcomps                          0.1.18
lit                               13.0.0
lxml                              4.7.1
Mako                              1.1.6.dev0
Markdown                          3.3.6
MarkupSafe                        2.0.1
matplotlib                        3.5.1
meson                             0.60.3
numpy                             1.22.0
olefile                           0.46
packaging                         21.3
pbr                               5.8.0
pep517                            0.12.0
Pillow                            9.0.0
pip                               21.3.1
platformdirs                      2.4.1
pluggy                            1.0.0
py                                1.11.0
Pygments                          2.11.2
PyGObject                         3.42.0
pyparsing                         3.0.6
pytest                            6.2.5
pytest-freezegun                  0.4.2
pytest-mock                       3.6.1
pytest-randomly                   3.10.3
pytest-timeout                    2.0.2
python-dateutil                   2.8.2
pytz                              2021.1
requests                          2.27.1
rpm                               4.17.0
scour                             0.38.2
setuptools                        60.1.0.post20211225
setuptools-scm                    6.3.2
six                               1.16.0
smartypants                       2.0.1
snowballstemmer                   2.2.0
Sphinx                            4.3.2.dev20220106
sphinx-argparse                   0.3.1
sphinx-rtd-theme                  1.0.0
sphinxcontrib-applehelp           1.0.2.dev20211227
sphinxcontrib-devhelp             1.0.2.dev20211228
sphinxcontrib-htmlhelp            2.0.0
sphinxcontrib-jsmath              1.0.1.dev20211227
sphinxcontrib-qthelp              1.0.3.dev20211227
sphinxcontrib-serializinghtml     1.1.5
testtools                         2.5.0
toml                              0.10.2
tomli                             2.0.0
towncrier                         21.3.0
typogrify                         2.0.7
urllib3                           1.26.7
wheel                             0.37.1
zipp                              3.7.0
@gaborbernat
Copy link
Contributor

Seems you have some weird patching there as the reason for failure is missing wheel files.

@pypa pypa locked as resolved and limited conversation to collaborators Jan 8, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants