6.3.3: pytest is failing with INTERNALERROR

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
because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
install .whl file in </install/prefix>
run pytest with PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>

Here is pytest output:
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/_pytest/main.py", line 266, in wrap_session
INTERNALERROR>     config.hook.pytest_sessionstart(session=session)
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_hooks.py", line 265, in __call__
INTERNALERROR>     return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_manager.py", line 80, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_callers.py", line 60, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_result.py", line 60, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_callers.py", line 39, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.3.3/tests/conftest.py", line 89, in pytest_sessionstart
INTERNALERROR>     assert pth_dir
INTERNALERROR> AssertionError: assert None

List of module sinstalled in build env
Package                       Version
----------------------------- -----------------
alabaster                     0.7.12
attrs                         21.4.0
Babel                         2.10.1
Brlapi                        0.8.3
build                         0.7.0
charset-normalizer            2.0.12
codespell                     2.1.0
cycler                        0.11.0
distlib                       0.3.4
distro                        1.7.0
docutils                      0.17.1
execnet                       1.9.0
extras                        1.0.0
filelock                      3.6.0
fixtures                      4.0.0
flaky                         3.7.0
fonttools                     4.33.3
gpg                           1.17.1-unknown
idna                          3.3
imagesize                     1.3.0
importlib-metadata            4.11.3
importlib-resources           5.7.0
iniconfig                     1.1.1
Jinja2                        3.1.1
kiwisolver                    1.3.2
libcomps                      0.1.18
louis                         3.21.0
MarkupSafe                    2.1.1
matplotlib                    3.5.1
numpy                         1.22.3
olefile                       0.46
packaging                     21.3
pbr                           5.8.1
pep517                        0.12.0
Pillow                        9.1.0
pip                           22.0.4
platformdirs                  2.5.2
pluggy                        1.0.0
py                            1.11.0
pyenchant                     3.2.2
Pygments                      2.12.0
PyGObject                     3.42.1
pyparsing                     3.0.9
pytest                        7.1.2
pytest-forked                 1.4.0
pytest-xdist                  2.5.0
python-dateutil               2.8.2
pytz                          2022.1
requests                      2.27.1
rpm                           4.17.0
setuptools                    62.2.0
six                           1.16.0
snowballstemmer               2.2.0
Sphinx                        4.5.0
sphinx-rst-builder            0.0.3
sphinx-rtd-theme              1.0.0
sphinx-tabs                   3.3.1
sphinxcontrib-applehelp       1.0.2.dev20220410
sphinxcontrib-devhelp         1.0.2.dev20220410
sphinxcontrib-htmlhelp        2.0.0
sphinxcontrib-jsmath          1.0.1.dev20220410
sphinxcontrib-qthelp          1.0.3.dev20220410
sphinxcontrib-restbuilder     0.3
sphinxcontrib-serializinghtml 1.1.5
sphinxcontrib-spelling        7.3.2
testtools                     2.5.0
toml                          0.10.2
tomli                         2.0.1
typing_extensions             4.2.0
unittest-mixins               1.6
urllib3                       1.26.9
virtualenv                    20.13.4
wheel                         0.37.1
zipp                          3.8.0

It looks like coverage can't find a place to write a .pth file.  Are none of the directories in sys.path writable?

Just found new 6.4 version and tested that using strace

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ strace -fe trace=file /usr/bin/pytest -ra
execve("/usr/bin/pytest", ["/usr/bin/pytest", "-ra"], 0x7fff733e6328 /* 73 vars */) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib64/glibc-hwcaps/x86-64-v4/libpython3.8.so.1.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib64/glibc-hwcaps/x86-64-v4", 0x7ffe68d2e570, 0) = -1 ENOENT (No such file or directory)

[..]

readlink("/home", 0x7ffe68d2bec0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/tkloczko", 0x7ffe68d2bec0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/tkloczko/rpmbuild", 0x7ffe68d2bec0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/tkloczko/rpmbuild/BUILD", 0x7ffe68d2bec0, 4096) = -1 EINVAL (Invalid argument)
readlink("/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4", 0x7ffe68d2bec0, 4096) = -1 EINVAL (Invalid argument)
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4/tmp/tests_csv", 0x7ffe68d2d410, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4", {st_mode=S_IFDIR|0755, st_size=702, ...}, 0) = 0
openat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0755, st_size=702, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/bin", {st_mode=S_IFDIR|0555, st_size=66524, ...}, 0) = 0
openat(AT_FDCWD, "/usr/bin", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0555, st_size=66524, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib64/python3.8/site-packages", {st_mode=S_IFDIR|0755, st_size=60, ...}, 0) = 0
openat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib64/python3.8/site-packages", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0755, st_size=60, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib/python3.8/site-packages", 0x7ffe68d2cec0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib64/python38.zip", 0x7ffe68d2cec0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib64/python3.8", {st_mode=S_IFDIR|0755, st_size=4164, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib64/python3.8", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0755, st_size=4164, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8/lib-dynload", {st_mode=S_IFDIR|0755, st_size=5116, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib64/python3.8/lib-dynload", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0755, st_size=5116, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8/site-packages", {st_mode=S_IFDIR|0755, st_size=1184, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib64/python3.8/site-packages", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0755, st_size=1184, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/usr/lib64/python3.8/site-packages/touch_none.it", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = -1 EACCES (Permission denied)
newfstatat(AT_FDCWD, "/usr/lib/python3.8/site-packages", {st_mode=S_IFDIR|0755, st_size=5240, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 13
newfstatat(13, "", {st_mode=S_IFDIR|0755, st_size=5240, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/touch_none.it", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = -1 EACCES (Permission denied)
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4", {st_mode=S_IFDIR|0755, st_size=702, ...}, 0) = 0
newfstatat(AT_FDCWD, "/usr/bin", {st_mode=S_IFDIR|0555, st_size=66524, ...}, 0) = 0
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4-2.fc35.x86_64/usr/lib64/python3.8/site-packages", {st_mode=S_IFDIR|0755, st_size=60, ...}, 0) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8", {st_mode=S_IFDIR|0755, st_size=4164, ...}, 0) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8/_sysconfigdata__linux_x86_64-linux-gnu.py", {st_mode=S_IFREG|0644, st_size=41556, ...}, 0) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8/_sysconfigdata__linux_x86_64-linux-gnu.py", {st_mode=S_IFREG|0644, st_size=41556, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib64/python3.8/__pycache__/_sysconfigdata__linux_x86_64-linux-gnu.cpython-38.pyc", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=30703, ...}, AT_EMPTY_PATH) = 0
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=30703, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr", {st_mode=S_IFDIR|0755, st_size=106, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "/usr/lib64", {st_mode=S_IFDIR|0555, st_size=163562, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8", {st_mode=S_IFDIR|0755, st_size=4164, ...}, AT_SYMLINK_NOFOLLOW) = 0
newfstatat(AT_FDCWD, "/usr/lib64/python3.8/config-3.8-x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=194, ...}, AT_SYMLINK_NOFOLLOW) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/touch_none.it", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = -1 EACCES (Permission denied)
newfstatat(AT_FDCWD, "/usr/lib/python3.8/site-packages/_pytest/main.py", {st_mode=S_IFREG|0644, st_size=32281, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/_pytest/main.py", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=32281, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_hooks.py", {st_mode=S_IFREG|0644, st_size=11496, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_hooks.py", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=11496, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_manager.py", {st_mode=S_IFREG|0644, st_size=14752, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_manager.py", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=14752, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_callers.py", {st_mode=S_IFREG|0644, st_size=2097, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_callers.py", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=2097, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_result.py", {st_mode=S_IFREG|0644, st_size=1535, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/pluggy/_result.py", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=1535, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4/tests/conftest.py", {st_mode=S_IFREG|0644, st_size=4480, ...}, 0) = 0
openat(AT_FDCWD, "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4/tests/conftest.py", O_RDONLY|O_CLOEXEC) = 13
newfstatat(13, "", {st_mode=S_IFREG|0644, st_size=4480, ...}, AT_EMPTY_PATH) = 0
newfstatat(6, "", {st_mode=S_IFREG|0600, st_size=0, ...}, AT_EMPTY_PATH) = 0
newfstatat(8, "", {st_mode=S_IFREG|0600, st_size=0, ...}, AT_EMPTY_PATH) = 0
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/_pytest/main.py", line 266, in wrap_session
INTERNALERROR>     config.hook.pytest_sessionstart(session=session)
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_hooks.py", line 265, in __call__
INTERNALERROR>     return self._hookexec(self.name, self.get_hookimpls(), kwargs, firstresult)
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_manager.py", line 80, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_callers.py", line 60, in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_result.py", line 60, in get_result
INTERNALERROR>     raise ex[1].with_traceback(ex[2])
INTERNALERROR>   File "/usr/lib/python3.8/site-packages/pluggy/_callers.py", line 39, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4/tests/conftest.py", line 89, in pytest_sessionstart
INTERNALERROR>     assert pth_dir
INTERNALERROR> AssertionError: assert None
chdir("/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4") = 0
+++ exited with 3 +++

Question is why in this case pytest executed from non-root account is trying to write something in system image? 🤔
Extracted all Permission denied strace lines:
openat(AT_FDCWD, "/usr/lib64/python3.8/site-packages/touch_none.it", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/touch_none.it", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = -1 EACCES (Permission denied)
openat(AT_FDCWD, "/usr/lib/python3.8/site-packages/touch_none.it", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = -1 EACCES (Permission denied)

I have already +940 modules packaged as rpm packages and in 8/9 of those packaging procedures as part pf the packaging procedures pytest is used and cannot find in the logs similar case 🤔

Hmm just tested ..
[tkloczko@devel-g2v coveragepy-6.4]$ grep -r touch_none
[tkloczko@devel-g2v coveragepy-6.4]$ grep -r touch_none /usr/lib/python3.8/site-packages/ /usr/lib64/python3.8/
[tkloczko@devel-g2v coveragepy-6.4]$

Any update?
Just tested 6.4.1 and pytest is failing the same way.

"touch_none.it" is a file name I try to write to see if I can write a .pth file that is needed to run all the coverage.py tests.  Can you print the contents of sys.path, and also the "ls -l" for each of those directories?
As a drastic step, I suppose the coverage.py test suite could skip tests that need the .pth file if it couldn't be written.

"touch_none.it" is a file name I try to write to see if I can write a .pth file that is needed to run all the coverage.py tests. Can you print the contents of sys.path, and also the "ls -l" for each of those directories?

OK  .. but which one directories? 😋
sys.path is altersd by env variable
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib/python3.8/site-packages

As a drastic step, I suppose the coverage.py test suite could skip tests that need the .pth file if it couldn't be written.

Issue is that in this case pytest is failing on collecting units 😃
AFAIK skipping is only possible after finishing that stage.

Just tesated 6.4.2. Looks like it is better now becaus pytest is able to collect unit ad start testing.
However it shows fails and errors.
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra
bringing up nodes...
........................................................................................................................x....x........s..s............s............. [ 14%]
............................................................................................................................................F..........F...ssF....F. [ 28%]
sF...sFs.FF...ss.ss.......s....................................................F..................................................................................... [ 42%]
.............................................................................................F.........................................................s............ [ 56%]
................................................................s.sss......................s...................................ss.......................s........... [ 71%]
....................................................F..F.........F...............................F..F..F......F.........F............................s.............. [ 85%]
......................................F..........................F.E.....E...............E.F....E.F.F..F..EFE..E..F.........EE...E..........EE........sF............ [ 99%]
.....                                                                                [100%]
================================================================================== ERRORS ==================================================================================
__________________________________________________________________ ERROR collecting tests/test_numbits.py __________________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/test_numbits.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
/usr/lib64/python3.8/importlib/__init__.py:127: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
tests/test_numbits.py:9: in <module>
    from hypothesis import example, given, settings
E   ModuleNotFoundError: No module named 'hypothesis'
______________________________________________ ERROR at setup of VirtualenvTest.test_third_party_venv_isnt_measured[coverage] ______________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
-------------------------------------------------------------------------- Captured stdout setup ---------------------------------------------------------------------------
/bin/sh: line 1: venv/bin/python: No such file or directory

_________________________________________ ERROR at setup of VirtualenvTest.test_third_party_venv_isnt_measured[python -m coverage] _________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_________________________________________________ ERROR at setup of VirtualenvTest.test_us_in_venv_isnt_measured[coverage] _________________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________ ERROR at setup of VirtualenvTest.test_us_in_venv_isnt_measured[python -m coverage] ____________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________________ ERROR at setup of VirtualenvTest.test_venv_isnt_measured[coverage] ____________________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_______________________________________________ ERROR at setup of VirtualenvTest.test_venv_isnt_measured[python -m coverage] _______________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_________________________________________________ ERROR at setup of VirtualenvTest.test_venv_with_dynamic_plugin[coverage] _________________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________ ERROR at setup of VirtualenvTest.test_venv_with_dynamic_plugin[python -m coverage] ____________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_______________________________________________ ERROR at setup of VirtualenvTest.test_installed_namespace_packages[coverage] _______________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
__________________________________________ ERROR at setup of VirtualenvTest.test_installed_namespace_packages[python -m coverage] __________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_________________________________________________________ ERROR at setup of VirtualenvTest.test_bug_888[coverage] __________________________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________________ ERROR at setup of VirtualenvTest.test_bug_888[python -m coverage] _____________________________________________________
[gw45] linux -- Python 3.8.13 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f6f35848670>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-310/popen-gw45'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7f7de823c0a0>, bad_config = '[tool.coverage.report]\nprecision=1.23', msg = 'not an integer'

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern 'not an integer' does not match "Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7f8a1279ac70>, bad_config = '[tool.coverage.report]\npartial_branches_always = ["foo***"]\n'
msg = "Invalid \\[tool.coverage.report\\].partial_branches_always value 'foo\\*\\*\\*': multiple repeat"

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern "Invalid \\[tool.coverage.report\\].partial_branches_always value 'foo\\*\\*\\*': multiple repeat" does not match "Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7f9503ae56d0>, bad_config = '[tool.coverage.report]\nexclude_lines = ["foo("]\n'
msg = "Invalid \\[tool.coverage.report\\].exclude_lines value 'foo\\(': (unbalanced parenthesis|missing \\))"

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern "Invalid \\[tool.coverage.report\\].exclude_lines value 'foo\\(': (unbalanced parenthesis|missing \\))" does not match "Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7f93835c87f0>, bad_config = '[tool.coverage.report]\nfail_under="s"', msg = 'not a float'

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern 'not a float' does not match "Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7ff73fe3a670>, bad_config = '[tool.coverage.run]\nconcurrency="foo"', msg = 'not a list'

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern 'not a list' does not match "Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7fac72a407c0>, bad_config = '[tool.coverage.run]\ntimid = "maybe?"\n', msg = 'maybe[?]'

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern 'maybe[?]' does not match "Can't read 'pyproject.toml' without TOML support.   Parameters that are missing here
        will use values from the config file.

        `data_file` is the base name of the data file to use. The config value
        defaults to ".coverage".  None can be provided to prevent writing a data
        file.  `data_suffix` is appended (with a dot) to `data_file` to create
        the final file name.  If `data_suffix` is simply True, then a suffix is
        created with the machine and process identity included.

        `cover_pylib` is a boolean determining whether Python code installed
        with the Python interpreter is measured.  This includes the Python
        standard library and any packages installed with the interpreter.

        If `auto_data` is true, then any existing data file will be read when
        coverage measurement starts, and data will be saved automatically when
        measurement stops.

        If `timid` is true, then a slower and simpler trace function will be
        used.  This is important for some environments where manipulation of
        tracing functions breaks the faster trace function.

        If `branch` is true, then branch coverage will be measured in addition
        to the usual statement coverage.

        `config_file` determines what configuration file to read:

            * If it is ".coveragerc", it is interpreted as if it were True,
              for backward compatibility.

            * If it is a string, it is the name of the file to read.  If the
              file can't be read, it is an error.

            * If it is True, then a few standard files names are tried
              (".coveragerc", "setup.cfg", "tox.ini").  It is not an error for
              these files to not be found.

            * If it is False, then no configuration file is read.

        `source` is a list of file paths or package names.  Only code located
        in the trees indicated by the file paths or package names will be
        measured.

        `source_pkgs` is a list of package names. It works the same as
        `source`, but can be used to name packages where the name can also be
        interpreted as a file path.

        `include` and `omit` are lists of file name patterns. Files that match
        `include` will be measured, files that match `omit` will not.  Each
        will also accept a single string argument.

        `debug` is a list of strings indicating what debugging information is
        desired.

        `concurrency` is a string indicating the concurrency library being used
        in the measured code.  Without this, coverage.py will get incorrect
        results if these libraries are in use.  Valid strings are "greenlet",
        "eventlet", "gevent", "multiprocessing", or "thread" (the default).
        This can also be a list of these strings.

        If `check_preimported` is true, then when coverage is started, the
        already-imported files will be checked to see if they should be
        measured by coverage.  Importing measured files before coverage is
        started can mean that code is missed.

        `context` is a string to use as the :ref:`static context
        <static_contexts>` label for collected data.

        Arguments:
            config_file: a boolean or string, see the `Coverage` class for the
                tricky details.
            warn: a function to issue warnings.
            all others: keyword arguments from the `Coverage` class, used for
                setting values in the configuration.

        Returns:
            config:
                config is a CoverageConfig object read from the appropriate
                configuration file.

         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError

During handling of the above exception, another exception occurred:

self = <tests.test_config.ConfigTest object at 0x7f7615f535b0>, bad_config = '[tool.coverage.report]\npartial_branches = ["foo["]\n'
msg = "Invalid \\[tool.coverage.report\\].partial_branches value 'foo\\[': (unexpected end of regular expression|unterminated character set)"

    @pytest.mark.parametrize("bad_config, msg", [
        ("[tool.coverage.run]\ntimid = \"maybe?\"\n", r"maybe[?]"),
        ("[tool.coverage.run\n", None),
        ('[tool.coverage.report]\nexclude_lines = ["foo("]\n',
         r"Invalid \[tool.coverage.report\].exclude_lines value 'foo\(': " +
         r"(unbalanced parenthesis|missing \))"),
        ('[tool.coverage.report]\npartial_branches = ["foo["]\n',
         r"Invalid \[tool.coverage.report\].partial_branches value 'foo\[': " +
         r"(unexpected end of regular expression|unterminated character set)"),
        ('[tool.coverage.report]\npartial_branches_always = ["foo***"]\n',
         r"Invalid \[tool.coverage.report\].partial_branches_always value " +
         r"'foo\*\*\*': " +
         r"multiple repeat"),
        ('[tool.coverage.run]\nconcurrency="foo"', "not a list"),
        ("[tool.coverage.report]\nprecision=1.23", "not an integer"),
        ('[tool.coverage.report]\nfail_under="s"', "not a float"),
    ])
    def test_toml_parse_errors(self, bad_config, msg):
        # Im-parsable values raise ConfigError, with details.
        self.make_file("pyproject.toml", bad_config)
        with pytest.raises(ConfigError, match=msg):
>           coverage.Coverage()
E           AssertionError: Regex pattern "Invalid \\[tool.coverage.report\\].partial_branches value 'foo\\[': (unexpected end of regular expression|unterminated character set)" does not match "Can't read 'pyproject.toml' without TOML support.  Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] extra

/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages/coverage/tomlconfig.py:66: ConfigError
______________________________________________________________________ FileReporterTest.test_zipfile _______________________________________________________________________
[gw39] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_filereporter.FileReporterTest object at 0x7f07c6bb4e50>

    def test_zipfile(self):
        sys.path.append("tests/zip1.zip")

        # Test that we can get files out of zipfiles, and read their source files.
         Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support.  Install with [toml] extra"
>               raise ConfigError(msg.format(filename))
E               coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support.  Here we import os and
        # then check how many lines are measured.
        self.make_file("getenv.py", """\
            import os
            print("FOOEY == %s" % os.getenv("FOOEY"))
            """)

        fullcov = os.path.join(os.path.dirname(coverage.__file__), "fullcoverage")
        self.set_environ("FOOEY", "BOO")
        self.set_environ("PYTHONPATH", fullcov)
        out = self.run_command("python -X frozen_modules=off -m coverage run -L getenv.py")
>       assert out == "FOOEY == BOO\n"
E       assert 'Error proces...ed coverage\n' == 'FOOEY == BOO\n'
E         - FOOEY == BOO
E         + Error processing line 1 of /home/tkloczko/.local/lib/python3.8/site-packages/subcover.pth:
E         +
E         +   Traceback (most recent call last):
E         +     File "/usr/lib64/python3.8/site.py", line 169, in addpackage
E         +       exec(line)
E         +     File "<string>", line 1, in <module>...
E
E         ...Full output truncated (5 lines hidden), use '-vv' to show

/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/test_process.py:568: AssertionError
--------------------------------------------------------------------------- Captured stdout call ---------------------------------------------------------------------------
Error processing line 1 of /home/tkloczko/.local/lib/python3.8/site-packages/subcover.pth:

  Traceback (most recent call last):
    File "/usr/lib64/python3.8/site.py", line 169, in addpackage
      exec(line)
    File "<string>", line 1, in <module>
  ModuleNotFoundError: No module named 'coverage'

Remainder of file ignored
/usr/bin/python3: No module named coverage

_____________________________________________________________ EnvironmentTest.test_coverage_zip_is_like_python _____________________________________________________________
[gw47] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_process.EnvironmentTest object at 0x7fd4352444c0>

    def test_coverage_zip_is_like_python(self):
        # Test running coverage from a zip file itself.

        """
        # First, is this even credible try_execfile.py output?
>       assert '"DATA": "xyzzy"' in actual
E       assert '"DATA": "xyzzy"' in "python3: can't open file '/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/covmain.zip': [Errno 2] No such file or directory\n"

/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/test_process.py:669: AssertionError
--------------------------------------------------------------------------- Captured stdout call ---------------------------------------------------------------------------
{
    "DATA": "xyzzy",
    "FN_VAL": "my_fn('fooey')",
    "__builtins__.dir": [
        "ArithmeticError AssertionError AttributeError BaseException BlockingIOError BrokenPipeError BufferError BytesWarning ChildProcessError ConnectionAbortedError ConnectionError ConnectionRefusedError ConnectionResetError",
        "DeprecationWarning EOFError Ellipsis EnvironmentError Exception False FileExistsError FileNotFoundError FloatingPointError FutureWarning",
        "GeneratorExit IOError ImportError ImportWarning IndentationError IndexError InterruptedError IsADirectoryError",
        "KeyError KeyboardInterrupt LookupError MemoryError ModuleNotFoundError NameError None NotADirectoryError NotImplemented NotImplementedError",
        "OSError OverflowError PendingDeprecationWarning PermissionError ProcessLookupError RecursionError ReferenceError ResourceWarning RuntimeError RuntimeWarning",
        "StopAsyncIteration StopIteration SyntaxError SyntaxWarning SystemError SystemExit TabError TimeoutError True TypeError",
        "UnboundLocalError UnicodeDecodeError UnicodeEncodeError UnicodeError UnicodeTranslateError UnicodeWarning UserWarning",
        "ValueError Warning ZeroDivisionError __build_class__ __debug__ __doc__ __import__ __loader__ __name__ __package__ __spec__",
        "abs all any ascii bin bool breakpoint bytearray bytes",
        "callable chr classmethod compile complex copyright credits delattr dict dir divmod",
        "enumerate eval exec exit filter float format frozenset getattr globals",
        "hasattr hash help hex id input int isinstance issubclass iter",
        "len license list locals map max memoryview min next object oct open ord",
        "pow print property quit range repr reversed round",
        "set setattr slice sorted staticmethod str sum super tuple type vars zip"
    ],
    "__builtins__.has_open": true,
    "__doc__": "Test file for run_python_file.\n\nThis file is executed two ways::\n\n    $ coverage run try_execfile.py\n\nand::\n\n    $ python try_execfile.py\n\nThe output is compared to see that the program execution context is the same\nunder coverage and under Python.\n\nIt is not crucial that the execution be identical, there are some differences\nthat are OK.  This program canonicalizes the output to gloss over those\ndifferences and get a clean diff.\n\n",
    "__file__": "run_me.py",
    "__loader__ exists": true,
    "__loader__.fullname": "__main__",
    "__main__.DATA": "xyzzy",
    "__name__": "__main__",
    "__package__": null,
    "__spec__ exists": false,
    "argv0": "run_me.py",
    "argv1-n": [],
    "os.getcwd": "/tmp/pytest-of-tkloczko/pytest-310/popen-gw47/t9",
    "path": [
        "/tmp/pytest-of-tkloczko/pytest-310/popen-gw47/t9",
        "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages",
        "/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib/python3.8/site-packages",
        "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/modules",
        "/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/zipmods.zip",
        "/usr/lib64/python38.zip",
        "/usr/lib64/python3.8",
        "/usr/lib64/python3.8/lib-dynload",
        "/home/tkloczko/.local/lib/python3.8/site-packages",
        "/usr/lib64/python3.8/site-packages",
        "/usr/lib/python3.8/site-packages"
    ]
}

python3: can't open file '/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/covmain.zip': [Errno 2] No such file or directory

___________________________________________________________________________ test_without_module ____________________________________________________________________________
[gw9] linux -- Python 3.8.13 /usr/bin/python3

    def test_without_module():
        toml1 = tomlconfig.tomllib
        with without_module(tomlconfig, 'tomllib'):
            toml2 = tomlconfig.tomllib
        toml3 = tomlconfig.tomllib

>       assert toml1 is toml3 is not None
E       assert None is not None

tests/test_testing.py:365: AssertionError
____________________________________________________________ GetZipBytesTest.test_get_encoded_zip_files[utf-8] _____________________________________________________________
[gw13] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_python.GetZipBytesTest object at 0x7fa44b70fb80>, encoding = 'utf-8'

    @pytest.mark.parametrize(
        "encoding",
        ["utf-8", "gb2312", "hebrew", "shift_jis", "cp1252"],
    )
    def test_get_encoded_zip_files(self, encoding):
        # See igor.py, do_zipmods, for the text of these files.
        zip_file = "tests/zipmods.zip"
        sys.path.append(zip_file)       # So we can import the files.
        filename = zip_file + "/encoded_" + encoding + ".py"
        filename = os_sep(filename)
        zip_data = get_zip_bytes(filename)
>       zip_text = zip_data.decode(encoding)
E       AttributeError: 'NoneType' object has no attribute 'decode'

tests/test_python.py:33: AttributeError
____________________________________________________________ GetZipBytesTest.test_get_encoded_zip_files[gb2312] ____________________________________________________________
[gw13] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_python.GetZipBytesTest object at 0x7fa44b70f1f0>, encoding = 'gb2312'

    @pytest.mark.parametrize(
        "encoding",
        ["utf-8", "gb2312", "hebrew", "shift_jis", "cp1252"],
    )
    def test_get_encoded_zip_files(self, encoding):
        # See igor.py, do_zipmods, for the text of these files.
        zip_file = "tests/zipmods.zip"
        sys.path.append(zip_file)       # So we can import the files.
        filename = zip_file + "/encoded_" + encoding + ".py"
        filename = os_sep(filename)
        zip_data = get_zip_bytes(filename)
>       zip_text = zip_data.decode(encoding)
E       AttributeError: 'NoneType' object has no attribute 'decode'

tests/test_python.py:33: AttributeError
____________________________________________________________ GetZipBytesTest.test_get_encoded_zip_files[hebrew] ____________________________________________________________
[gw13] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_python.GetZipBytesTest object at 0x7fa44b70f5b0>, encoding = 'hebrew'

    @pytest.mark.parametrize(
        "encoding",
        ["utf-8", "gb2312", "hebrew", "shift_jis", "cp1252"],
    )
    def test_get_encoded_zip_files(self, encoding):
        # See igor.py, do_zipmods, for the text of these files.
        zip_file = "tests/zipmods.zip"
        sys.path.append(zip_file)       # So we can import the files.
        filename = zip_file + "/encoded_" + encoding + ".py"
        filename = os_sep(filename)
        zip_data = get_zip_bytes(filename)
>       zip_text = zip_data.decode(encoding)
E       AttributeError: 'NoneType' object has no attribute 'decode'

tests/test_python.py:33: AttributeError
_____________________________________________________________________ SummaryTest.test_report_wildcard _____________________________________________________________________
[gw16] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_summary.SummaryTest object at 0x7f7de9827a00>

    def test_report_wildcard(self):
        # Try reporting using wildcards to get the modules.
        self.make_mycode()
        # Wildcard is handled by shell or cmdline.py, so use real commands
        self.run_command("coverage run mycode.py")
        report = self.report_from_command("coverage report my*.py")

        # Name        Stmts   Miss  Cover
        # -------------------------------
        # mycode.py       4      0   100%
        # -------------------------------
        # TOTAL           4      0   100%

        assert self.line_count(report) == 5
        assert "/coverage/" not in report
        assert "/tests/modules/covmod1.py " not in report
        assert "/tests/zipmods.zip/covmodzip1.py " not in report
        assert "mycode.py " in report
>       assert self.last_line_squeezed(report) == "TOTAL 4 0 100%"
E       AssertionError: assert 'TOTAL 4 2 50%' == 'TOTAL 4 0 100%'
E         - TOTAL 4 0 100%
E         + TOTAL 4 2 50%

/home/tkloczko/rpmbuild/BUILD/coveragepy-6.4.2/tests/test_summary.py:99: AssertionError
--------------------------------------------------------------------------- Captured stdout call ---------------------------------------------------------------------------
Traceback (most recent call last):
  File "mycode.py", line 2, in <module>
    import covmodzip1
ModuleNotFoundError: No module named 'covmodzip1'

Name        Stmts   Miss  Cover
-------------------------------
mycode.py       4      2    50%
-------------------------------
TOTAL           4      2    50%

__________________________________________________________ GetZipBytesTest.test_get_encoded_zip_files[shift_jis] ___________________________________________________________
[gw13] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_python.GetZipBytesTest object at 0x7fa44b70fc70>, encoding = 'shift_jis'

    @pytest.mark.parametrize(
        "encoding",
        ["utf-8", "gb2312", "hebrew", "shift_jis", "cp1252"],
    )
    def test_get_encoded_zip_files(self, encoding):
        # See igor.py, do_zipmods, for the text of these files.
        zip_file = "tests/zipmods.zip"
        sys.path.append(zip_file)       # So we can import the files.
        filename = zip_file + "/encoded_" + encoding + ".py"
        filename = os_sep(filename)
        zip_data = get_zip_bytes(filename)
>       zip_text = zip_data.decode(encoding)
E       AttributeError: 'NoneType' object has no attribute 'decode'

tests/test_python.py:33: AttributeError
____________________________________________________________ GetZipBytesTest.test_get_encoded_zip_files[cp1252] ____________________________________________________________
[gw13] linux -- Python 3.8.13 /usr/bin/python3

self = <tests.test_python.GetZipBytesTest object at 0x7fa44b70f820>, encoding = 'cp1252'

    @pytest.mark.parametrize(
        "encoding",
        ["utf-8", "gb2312", "hebrew", "shift_jis", "cp1252"],
    )
    def test_get_encoded_zip_files(self, encoding):
        # See igor.py, do_zipmods, for the text of these files.
        zip_file = "tests/zipmods.zip"
        sys.path.append(zip_file)       # So we can import the files.
        filename = zip_file + "/encoded_" + encoding + ".py"
        filename = os_sep(filename)
        zip_data = get_zip_bytes(filename)
>       zip_text = zip_data.decode(encoding)
E       AttributeError: 'NoneType' object has no attribute 'decode'

tests/test_python.py:33: AttributeError
__________________________________________________________________ test_xdist_sys_path_nuttiness_is_fixed __________________________________________________________________
[gw36] linux -- Python 3.8.13 /usr/bin/python3

    def test_xdist_sys_path_nuttiness_is_fixed():
        # See conftest.py:fix_xdist_sys_path
        assert sys.path[1] != ''
>       assert os.environ.get('PYTHONPATH') is None
E       AssertionError: assert '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib/python3.8/site-packages' is None
E        +  where '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/lib/python3.8/site-packages' = <bound method Mapping.get of environ({'PATH': '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/u...T_WORKER_COUNT': '48', 'PYTEST_CURRENT_TEST': 'tests/test_testing.py::test_xdist_sys_path_nuttiness_is_fixed (call)'})>('PYTHONPATH')
E        +    where <bound method Mapping.get of environ({'PATH': '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/u...T_WORKER_COUNT': '48', 'PYTEST_CURRENT_TEST': 'tests/test_testing.py::test_xdist_sys_path_nuttiness_is_fixed (call)'})> = environ({'PATH': '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/bin:/usr/bin:/usr/sbin:/us...ST_WORKER_COUNT': '48', 'PYTEST_CURRENT_TEST': 'tests/test_testing.py::test_xdist_sys_path_nuttiness_is_fixed (call)'}).get
E        +      where environ({'PATH': '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/bin:/usr/bin:/usr/sbin:/us...ST_WORKER_COUNT': '48', 'PYTEST_CURRENT_TEST': 'tests/test_testing.py::test_xdist_sys_path_nuttiness_is_fixed (call)'}) = os.environ

tests/test_testing.py:29: AssertionError
========================================================================= short test summary info ==========================================================================
SKIPPED [1] tests/test_arcs.py:1318: Match-case is new in 3.10
SKIPPED [1] tests/test_arcs.py:1334: Match-case is new in 3.10
SKIPPED [1] tests/test_arcs.py:1350: Match-case is new in 3.10
SKIPPED [1] tests/test_concurrency.py:341: Can't run test without gevent installed.
SKIPPED [2] tests/test_concurrency.py:224: Can't test: Couldn't trace with concurrency=gevent, the module isn't installed.
SKIPPED [3] tests/test_concurrency.py:224: Can't test: Couldn't trace with concurrency=eventlet, the module isn't installed.
SKIPPED [2] tests/test_concurrency.py:224: Can't test: Couldn't trace with concurrency=greenlet, the module isn't installed.
SKIPPED [2] tests/test_concurrency.py:478: Can't test: Couldn't trace with concurrency=eventlet, the module isn't installed.
SKIPPED [1] tests/test_files.py:430: Only need to run Windows tests on Windows.
SKIPPED [1] tests/test_misc.py:109: Contracts are disabled, can't test them
SKIPPED [1] tests/test_misc.py:99: Contracts are disabled, can't test them
SKIPPED [1] tests/test_misc.py:122: Contracts are disabled, can't test them
SKIPPED [1] tests/test_misc.py:89: Contracts are disabled, can't test them
SKIPPED [1] tests/test_oddball.py:209: This is too expensive for now (30s)
SKIPPED [1] tests/test_parser.py:422: Match-case is new in 3.10
SKIPPED [1] tests/test_phystokens.py:120: Soft keywords are new in Python 3.10
SKIPPED [1] tests/test_plugins.py:267: This test is only about PyTracer.
SKIPPED [1] tests/test_python.py:50: not windows
SKIPPED [1] tests/test_summary.py:686: .pyw files are only on Windows.
XFAIL tests/test_arcs.py::LoopArcTest::test_incorrect_if_bug_1175
  <3.10 traced final pass incorrectly
XFAIL tests/test_arcs.py::LoopArcTest::test_incorrect_loop_exit_bug_1175
  <3.10 traced final pass incorrectly
ERROR tests/test_numbits.py
ERROR tests/test_venv.py::VirtualenvTest::test_third_party_venv_isnt_measured[coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_third_party_venv_isnt_measured[python -m coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_us_in_venv_isnt_measured[coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_us_in_venv_isnt_measured[python -m coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_venv_isnt_measured[coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_venv_isnt_measured[python -m coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_venv_with_dynamic_plugin[coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_venv_with_dynamic_plugin[python -m coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_installed_namespace_packages[coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_installed_namespace_packages[python -m coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_bug_888[coverage] - assert 127 == 0
ERROR tests/test_venv.py::VirtualenvTest::test_bug_888[python -m coverage] - assert 127 == 0
FAILED tests/test_config.py::ConfigTest::test_toml_config_file - coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml] e...
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.report]\nprecision=1.23-not an integer] - AssertionError: Regex pattern 'not an integer' d...
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.report]\npartial_branches_always = ["foo***"]\n-Invalid \\[tool.coverage.report\\].partial_branches_always value 'foo\\*\\*\\*': multiple repeat]
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.report]\nexclude_lines = ["foo("]\n-Invalid \\[tool.coverage.report\\].exclude_lines value 'foo\\(': (unbalanced parenthesis|missing \\))]
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.report]\nfail_under="s"-not a float] - AssertionError: Regex pattern 'not a float' does no...
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.run]\nconcurrency="foo"-not a list] - AssertionError: Regex pattern 'not a list' does not ...
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.run]\ntimid = "maybe?"\n-maybe[?]] - AssertionError: Regex pattern 'maybe[?]' does not mat...
FAILED tests/test_config.py::ConfigTest::test_toml_parse_errors[[tool.coverage.report]\npartial_branches = ["foo["]\n-Invalid \\[tool.coverage.report\\].partial_branches value 'foo\\[': (unexpected end of regular expression|unterminated character set)]
FAILED tests/test_config.py::ConfigTest::test_tilde_in_toml_config - coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [tom...
FAILED tests/test_filereporter.py::FileReporterTest::test_zipfile - ModuleNotFoundError: No module named 'zip1'
FAILED tests/test_config.py::ConfigTest::test_environment_vars_in_toml_config - coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Instal...
FAILED tests/test_config.py::ConfigTest::test_unknown_option_toml - coverage.exceptions.ConfigError: Can't read 'pyproject.toml' without TOML support. Install with [toml...
FAILED tests/test_process.py::ProcessTest::test_tests_dir_is_importable - assert "Traceback (m...covmodzip1'\n" == 'done\n'
FAILED tests/test_summary.py::SummaryTest::test_report_just_one - ModuleNotFoundError: No module named 'covmodzip1'
FAILED tests/test_summary.py::SummaryTest::test_report - ModuleNotFoundError: No module named 'covmodzip1'
FAILED tests/test_summary.py::SummaryTest::test_report_including - ModuleNotFoundError: No module named 'covmodzip1'
FAILED tests/test_summary.py::SummaryTest::test_report_omitting - ModuleNotFoundError: No module named 'covmodzip1'
FAILED tests/test_process.py::ProcessTest::test_fullcoverage - assert 'Error proces...ed coverage\n' == 'FOOEY == BOO\n'
FAILED tests/test_process.py::EnvironmentTest::test_coverage_zip_is_like_python - assert '"DATA": "xyzzy"' in "python3: can't open file '/home/tkloczko/rpmbuild/BUILD/co...
FAILED tests/test_testing.py::test_without_module - assert None is not None
FAILED tests/test_python.py::GetZipBytesTest::test_get_encoded_zip_files[utf-8] - AttributeError: 'NoneType' object has no attribute 'decode'
FAILED tests/test_python.py::GetZipBytesTest::test_get_encoded_zip_files[gb2312] - AttributeError: 'NoneType' object has no attribute 'decode'
FAILED tests/test_python.py::GetZipBytesTest::test_get_encoded_zip_files[hebrew] - AttributeError: 'NoneType' object has no attribute 'decode'
FAILED tests/test_summary.py::SummaryTest::test_report_wildcard - AssertionError: assert 'TOTAL 4 2 50%' == 'TOTAL 4 0 100%'
FAILED tests/test_python.py::GetZipBytesTest::test_get_encoded_zip_files[shift_jis] - AttributeError: 'NoneType' object has no attribute 'decode'
FAILED tests/test_python.py::GetZipBytesTest::test_get_encoded_zip_files[cp1252] - AttributeError: 'NoneType' object has no attribute 'decode'
FAILED tests/test_testing.py::test_xdist_sys_path_nuttiness_is_fixed - AssertionError: assert '/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.4.2-2.fc35.x86_64/usr/...
27 failed, 1089 passed, 24 skipped, 2 xfailed, 13 errors in 14.10s

Just FTR: tested 6.4.3 and result still is the same.

OK .. but which one directories? 😋
sys.path is altersd by env variable

I'm interested in the sys.path that coverage.py is using, so including the environment variable. Can you add some print statements to the code to see what directories it's considering, and what files are in them?
If we need to skip tests, we'd do it by changing the failure to a flag, and use the flag to skip. But it would be better to find a new place for the .pth file.

Can you drop patch with such instrumentation?

I added some quick verbose debugging in branch nedbat/debug-1373.  Install it like this:
pip install git+https://github.com/nedbat/coveragepy@nedbat/debug-1373

then /tmp/coverage_pth_files.txt has details.

Here is result or 7.0.1 + https://github.com/nedbat/coveragepy/commit/54ea97a3afb27a166a01021c3d2e1fecb8d83551

[tkloczko@pers-jacek tmp]$ cat coverage_pth_files.txt
pytest_sessionstart start
Looking for a pth directory in pid 235645

possible_pth_dirs:
pth files in pth_dir=PosixPath('/home/tkloczko/rpmbuild/BUILD/coveragepy-7.0.1'): []
pth files in pth_dir=PosixPath('/usr/bin'): []
pth files in pth_dir=PosixPath('/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-7.0.1-2.fc35.x86_64/usr/lib64/python3.8/site-packages'): []
pth files in pth_dir=PosixPath('/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-7.0.1-2.fc35.x86_64/usr/lib/python3.8/site-packages'): []
pth files in pth_dir=PosixPath('/usr/lib64/python38.zip'): []
pth files in pth_dir=PosixPath('/usr/lib64/python3.8'): []
pth files in pth_dir=PosixPath('/usr/lib64/python3.8/lib-dynload'): []
pth files in pth_dir=PosixPath('/usr/lib64/python3.8/site-packages'): [PosixPath('/usr/lib64/python3.8/site-packages/matplotlib-3.6.2-py3.8-nspkg.pth')]
Trying pth_dir=PosixPath('/usr/lib64/python3.8/site-packages')
pth_dir contains ['__pycache__', 'libdnf', 'hawkey', 'gpg', 'rpm', 'rpm-4.17.0-py3.8.egg-info', 'libcomps', 'backports', 'gi', 'PyGObject-3.42.2.egg-info', 'pypamtest.so', 'speechd', 'speechd_config', 'Brlapi-0.8.3-py3.8.egg-info', 'brlapi.cpython-38-x86_64-linux-gnu.so', 'numpy', 'numpy-1.23.1.dist-info', 'libcomps-0.1.19-py3.8.egg-info', '_tdb_text.py', 'tdb.cpython-38-x86_64-linux-gnu.so', '_ldb_text.py', 'ldb.cpython-38-x86_64-linux-gnu.so', 'talloc.cpython-38-x86_64-linux-gnu.so', '_tevent.cpython-38-x86_64-linux-gnu.so', 'tevent.py', 'samba', 'lxml', 'lxml-4.9.1.dist-info', 'matplotlib', 'zope', 'gpg-1.18.0_unknown-py3.8.egg-info', 'PIL', 'Pillow-9.3.0.dist-info', 'kiwisolver', 'kiwisolver-1.4.4.dist-info', 'fontTools', 'fonttools-4.38.0.dist-info', 'contourpy', 'contourpy-1.0.6.dist-info', 'matplotlib-3.6.2.dist-info', 'mpl_toolkits', 'matplotlib-3.6.2-py3.8-nspkg.pth', 'pylab.py', 'pyrsistent', 'pyrsistent-0.19.2.dist-info', '_pyrsistent_version.py', 'pvectorc.cpython-38-x86_64-linux-gnu.so', 'MarkupSafe-2.1.1.dist-info', 'markupsafe']
Couldn't use pth_dir=PosixPath('/usr/lib64/python3.8/site-packages'), exc=PermissionError(13, 'Permission denied')
pth files in pth_dir=PosixPath('/usr/lib/python3.8/site-packages'): [PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_serializinghtml-1.1.5-py3.8-nspkg.pth'), PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_qthelp-1.0.3.dev20221204-py3.8-nspkg.pth'), PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_jsmath-1.0.1.dev20221204-py3.8-nspkg.pth'), PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_htmlhelp-2.0.0-py3.8-nspkg.pth'), PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_devhelp-1.0.2.dev20221204-py3.8-nspkg.pth'), PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_applehelp-1.0.2.dev20221204-py3.8-nspkg.pth'), PosixPath('/usr/lib/python3.8/site-packages/distutils-precedence.pth'), PosixPath('/usr/lib/python3.8/site-packages/sphinxcontrib_restbuilder-0.3-py3.8-nspkg.pth')]
Trying pth_dir=PosixPath('/usr/lib/python3.8/site-packages')
pth_dir contains ['__pycache__', 'distro', 'six-1.16.0.dist-info', 'six.py', 'dateutil', 'python_dateutil-2.8.2.dist-info', 'dnf', 'dnf-plugins', 'dnfpluginscore', 'mesonbuild', 'pbr', 'pbr-5.9.0.dist-info', 'extras', 'extras-1.0.0.dist-info', 'fixtures', 'fixtures-4.0.0.dist-info', 'testtools', 'testtools-2.5.0.dist-info', 'zope', 'zc', 'gi', 'pygtkcompat', 'pyatspi', 'louis', 'orca', 'sphinxext', 'dns', 'dnspython-2.2.1.dist-info', 'sphinxcontrib', 'cssselect', 'cssselect-1.1.0.dist-info', 'scour', 'scour-0.38.2.dist-info', 'appdirs-1.4.4.dist-info', 'appdirs.py', 'distro-1.8.0.dist-info', 'lit', 'lit-15.0.6.dist-info', 'jaraco', 'xcbgen', 'pdm', 'louis-3.24.0-py3.8.egg-info', 'pyparsing', 'pyparsing-3.0.9.dist-info', 'packaging', 'packaging-21.3.dist-info', 'olefile', 'olefile-0.46.dist-info', 'cycler-0.11.0.dist-info', 'cycler.py', 'google', 'meson-1.0.0.dist-info', 'traitlets', 'traitlets-5.7.1.dist-info', 'attr', 'attrs', 'attrs-22.2.0.dist-info', 'zipp', 'zipp-3.11.0.dist-info', 'importlib_resources', 'importlib_resources-5.10.1.dist-info', 'ply', 'ply-3.11.dist-info', 'platformdirs', 'platformdirs-2.6.0.dist-info', 'pkgutil_resolve_name-1.3.10.dist-info', 'pkgutil_resolve_name.py', 'tomli', 'tomli-2.0.1.dist-info', 'docutils', 'docutils-0.19.dist-info', 'Pygments-2.13.0.dist-info', 'pygments', 'exceptiongroup', 'exceptiongroup-1.0.0.dist-info', 'pep517', 'pep517-0.13.0.dist-info', 'urllib3', 'urllib3-1.26.12.dist-info', 'sphinxcontrib_serializinghtml-1.1.5.dist-info', 'sphinxcontrib_serializinghtml-1.1.5-py3.8-nspkg.pth', 'sphinxcontrib_qthelp-1.0.3.dev20221204.dist-info', 'sphinxcontrib_qthelp-1.0.3.dev20221204-py3.8-nspkg.pth', 'sphinxcontrib_jsmath-1.0.1.dev20221204.dist-info', 'sphinxcontrib_jsmath-1.0.1.dev20221204-py3.8-nspkg.pth', 'sphinxcontrib_htmlhelp-2.0.0.dist-info', 'sphinxcontrib_htmlhelp-2.0.0-py3.8-nspkg.pth', 'sphinxcontrib_devhelp-1.0.2.dev20221204-py3.8.egg-info', 'sphinxcontrib_devhelp-1.0.2.dev20221204-py3.8-nspkg.pth', 'sphinxcontrib_applehelp-1.0.2.dev20221204.dist-info', 'sphinxcontrib_applehelp-1.0.2.dev20221204-py3.8-nspkg.pth', 'alabaster', 'alabaster-0.7.12.dist-info', 'sortedcontainers', 'sortedcontainers-2.4.0.dist-info', 'snowballstemmer', 'snowballstemmer-2.2.0.dist-info', '_distutils_hack', 'pkg_resources', 'setuptools', 'setuptools-65.6.3.dist-info', 'distutils-precedence.pth', 'pytz', 'pytz-2022.4.dist-info', 'Babel-2.11.0.dist-info', 'babel', 'pluggy', 'pluggy-1.0.0.dist-info', 'Jinja2-3.1.2.dist-info', 'jinja2', 'iniconfig', 'iniconfig-1.1.1.dist-info', '_pytest', 'pytest', 'pytest-7.2.0.dist-info', 'py.py', 'importlib_metadata', 'importlib_metadata-5.1.0.dist-info', 'imagesize', 'imagesize-1.4.1.dist-info', 'idna', 'idna-3.4.dist-info', 'execnet', 'execnet-1.9.0.dist-info', 'enchant', 'pyenchant-3.2.2.dist-info', 'charset_normalizer', 'charset_normalizer-3.0.1.dist-info', 'requests', 'requests-2.28.1.dist-info', 'sphinx', 'sphinx-5.3.0.dist-info', 'sphinx_rst_builder', 'sphinx_rst_builder-0.0.3.dist-info', 'sphinx_tabs', 'sphinx_tabs-3.4.1.dist-info', 'sphinx_rtd_theme', 'sphinx_rtd_theme-1.1.1.dist-info', 'sphinxcontrib_restbuilder-0.3.dist-info', 'sphinxcontrib_restbuilder-0.3-py3.8-nspkg.pth', 'sphinxcontrib_spelling-7.6.0.dist-info', 'pytest_xdist-3.1.0.dist-info', 'xdist', 'pip', 'pip-22.3.1.dist-info', 'hypothesis', 'hypothesis-6.61.0.dist-info', '_hypothesis_ftz_detector.py', '_hypothesis_pytestplugin.py', 'build', 'build-0.9.0.dist-info', 'wheel', 'wheel-0.38.4.dist-info', 'flaky', 'flaky-3.7.0.dist-info']
Couldn't use pth_dir=PosixPath('/usr/lib/python3.8/site-packages'), exc=PermissionError(13, 'Permission denied')
Last chance: sysconfig.get_path('purelib')='/usr/lib/python3.8/site-packages'
Trying pth_dir=PosixPath('/usr/lib/python3.8/site-packages')
pth_dir contains ['__pycache__', 'distro', 'six-1.16.0.dist-info', 'six.py', 'dateutil', 'python_dateutil-2.8.2.dist-info', 'dnf', 'dnf-plugins', 'dnfpluginscore', 'mesonbuild', 'pbr', 'pbr-5.9.0.dist-info', 'extras', 'extras-1.0.0.dist-info', 'fixtures', 'fixtures-4.0.0.dist-info', 'testtools', 'testtools-2.5.0.dist-info', 'zope', 'zc', 'gi', 'pygtkcompat', 'pyatspi', 'louis', 'orca', 'sphinxext', 'dns', 'dnspython-2.2.1.dist-info', 'sphinxcontrib', 'cssselect', 'cssselect-1.1.0.dist-info', 'scour', 'scour-0.38.2.dist-info', 'appdirs-1.4.4.dist-info', 'appdirs.py', 'distro-1.8.0.dist-info', 'lit', 'lit-15.0.6.dist-info', 'jaraco', 'xcbgen', 'pdm', 'louis-3.24.0-py3.8.egg-info', 'pyparsing', 'pyparsing-3.0.9.dist-info', 'packaging', 'packaging-21.3.dist-info', 'olefile', 'olefile-0.46.dist-info', 'cycler-0.11.0.dist-info', 'cycler.py', 'google', 'meson-1.0.0.dist-info', 'traitlets', 'traitlets-5.7.1.dist-info', 'attr', 'attrs', 'attrs-22.2.0.dist-info', 'zipp', 'zipp-3.11.0.dist-info', 'importlib_resources', 'importlib_resources-5.10.1.dist-info', 'ply', 'ply-3.11.dist-info', 'platformdirs', 'platformdirs-2.6.0.dist-info', 'pkgutil_resolve_name-1.3.10.dist-info', 'pkgutil_resolve_name.py', 'tomli', 'tomli-2.0.1.dist-info', 'docutils', 'docutils-0.19.dist-info', 'Pygments-2.13.0.dist-info', 'pygments', 'exceptiongroup', 'exceptiongroup-1.0.0.dist-info', 'pep517', 'pep517-0.13.0.dist-info', 'urllib3', 'urllib3-1.26.12.dist-info', 'sphinxcontrib_serializinghtml-1.1.5.dist-info', 'sphinxcontrib_serializinghtml-1.1.5-py3.8-nspkg.pth', 'sphinxcontrib_qthelp-1.0.3.dev20221204.dist-info', 'sphinxcontrib_qthelp-1.0.3.dev20221204-py3.8-nspkg.pth', 'sphinxcontrib_jsmath-1.0.1.dev20221204.dist-info', 'sphinxcontrib_jsmath-1.0.1.dev20221204-py3.8-nspkg.pth', 'sphinxcontrib_htmlhelp-2.0.0.dist-info', 'sphinxcontrib_htmlhelp-2.0.0-py3.8-nspkg.pth', 'sphinxcontrib_devhelp-1.0.2.dev20221204-py3.8.egg-info', 'sphinxcontrib_devhelp-1.0.2.dev20221204-py3.8-nspkg.pth', 'sphinxcontrib_applehelp-1.0.2.dev20221204.dist-info', 'sphinxcontrib_applehelp-1.0.2.dev20221204-py3.8-nspkg.pth', 'alabaster', 'alabaster-0.7.12.dist-info', 'sortedcontainers', 'sortedcontainers-2.4.0.dist-info', 'snowballstemmer', 'snowballstemmer-2.2.0.dist-info', '_distutils_hack', 'pkg_resources', 'setuptools', 'setuptools-65.6.3.dist-info', 'distutils-precedence.pth', 'pytz', 'pytz-2022.4.dist-info', 'Babel-2.11.0.dist-info', 'babel', 'pluggy', 'pluggy-1.0.0.dist-info', 'Jinja2-3.1.2.dist-info', 'jinja2', 'iniconfig', 'iniconfig-1.1.1.dist-info', '_pytest', 'pytest', 'pytest-7.2.0.dist-info', 'py.py', 'importlib_metadata', 'importlib_metadata-5.1.0.dist-info', 'imagesize', 'imagesize-1.4.1.dist-info', 'idna', 'idna-3.4.dist-info', 'execnet', 'execnet-1.9.0.dist-info', 'enchant', 'pyenchant-3.2.2.dist-info', 'charset_normalizer', 'charset_normalizer-3.0.1.dist-info', 'requests', 'requests-2.28.1.dist-info', 'sphinx', 'sphinx-5.3.0.dist-info', 'sphinx_rst_builder', 'sphinx_rst_builder-0.0.3.dist-info', 'sphinx_tabs', 'sphinx_tabs-3.4.1.dist-info', 'sphinx_rtd_theme', 'sphinx_rtd_theme-1.1.1.dist-info', 'sphinxcontrib_restbuilder-0.3.dist-info', 'sphinxcontrib_restbuilder-0.3-py3.8-nspkg.pth', 'sphinxcontrib_spelling-7.6.0.dist-info', 'pytest_xdist-3.1.0.dist-info', 'xdist', 'pip', 'pip-22.3.1.dist-info', 'hypothesis', 'hypothesis-6.61.0.dist-info', '_hypothesis_ftz_detector.py', '_hypothesis_pytestplugin.py', 'build', 'build-0.9.0.dist-info', 'wheel', 'wheel-0.38.4.dist-info', 'flaky', 'flaky-3.7.0.dist-info']
Couldn't use pth_dir=PosixPath('/usr/lib/python3.8/site-packages'), exc=PermissionError(13, 'Permission denied')
Couldn't find a pth directory to use

Hmm .. so looks like test suite is trint to write files in python sitelib drecory 🤔

May I ask why test suite is trying to write something in system sitelib directory? 🤔

May I ask why test suite is trying to write something in system sitelib directory? 🤔

The test suite is trying to write a .pth file somewhere in the path, because coverage.py supports using a .pth file to start coverage for subprocesses.  If I comment out the code that is causing this headache, these tests fail:
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[main---m] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[sub-pkg--m] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[sub--] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[main-pkg--m] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[sub-pkg-] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[sub---m] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupTest::test_subprocess_with_pth_files - assert 100 == 3
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[main-pkg-] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupWithSourceTest::test_pth_and_source_work_together[main--] - AssertionError: File '.coverage' should exist
FAILED tests/test_process.py::ProcessStartupTest::test_subprocess_with_pth_files_and_parallel - KeyError: 'sub.py'

May I ask why you don't have a writable directory in sys.path?

May I ask why you don't have a writable directory in sys.path?

Please have a look one more time on first two lines of the log which I've dropped oppening ticket
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra

In #PYTHONPATH is passed directory with write access however that directory should not be used to write anything else on testing beause it will affect final content of the rpm package generated out of </install/prefix>.

@kloczek I really appreciate that you are persisting with this.  Please keep i mind that I know nothing about how rpm packages are made.

Please have a look one more time on first two lines of the log...

What in those lines would tell me that the directories aren't writable?

In $PYTHONPATH is passed directory with write access however that directory should not be used to write anything else...

If it is writable, then what is making the test setup fail?  It seems the directory is not writable.

Trust me this issue has nothing to do with rpm .. don't worry about that I'm packaging 'coveragepy`😄

If it is writable, then what is making the test setup fail? It seems the directory is not writable.

Please have look one more time on the output of the pytest with instrumentation patch which you've prepared.
In the output it is clarly wisible that test suite is not trying to write anything in /home/tkloczko/rpmbuild/BUILDROOT/python-coverage-6.3.3-2.fc35.x86_64/usr/lib64/python3.8/site-packages

I forget exactly why, but coverage.py will only try writing a .pth file in a directory if there's already a .pth file there.  Can you try touching a .pth file in that writable directory?

Tested that and looks like first time ever pytest started without internal error however I see now a lot of failing units
Here is list of installed modules in build env

+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-7.0.1-2.fc35.x86_64/usr/lib64/python3.8/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-coverage-7.0.1-2.fc35.x86_64/usr/lib/python3.8/site-packages
+ /usr/bin/pytest -ra -m 'not network'
bringing up nodes...
..........................................................................................................................x......................s..s............x.......ss.......... [ 13%]
......................................................F......................................................................................s...........................sss........s [ 27%]
ss....s.................s........s................................................................................................................................................... [ 41%]
................F.....................................F.............................................................................................................................. [ 54%]
................................................................s......s.............................................................................s...ss.........s................ [ 68%]
..........s................s...............................s...s..............FF...FFFFFFFF.FFF.FFFFFFFFs.....F..F.............F........................F.....F.....F...FFF....F..... [ 82%]
F..F....F.....s.F.......F............F..F...F................................................................................F..........E.........E.........E..............E...F....E [ 96%]
E........E...F.E.F.F...E..EFE.E...F......F.......                                                                                [100%]
========================================================================================== ERRORS ===========================================================================================
______________________________________________________ ERROR at setup of VirtualenvTest.test_third_party_venv_isnt_measured[coverage] _______________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
----------------------------------------------------------------------------------- Captured stdout setup -----------------------------------------------------------------------------------
/bin/sh: line 1: venv/bin/python: No such file or directory

_________________________________________________ ERROR at setup of VirtualenvTest.test_third_party_venv_isnt_measured[python -m coverage] __________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_________________________________________________________ ERROR at setup of VirtualenvTest.test_us_in_venv_isnt_measured[coverage] __________________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________________ ERROR at setup of VirtualenvTest.test_us_in_venv_isnt_measured[python -m coverage] _____________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________________________ ERROR at setup of VirtualenvTest.test_venv_isnt_measured[coverage] _____________________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_______________________________________________________ ERROR at setup of VirtualenvTest.test_venv_isnt_measured[python -m coverage] ________________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_________________________________________________________ ERROR at setup of VirtualenvTest.test_venv_with_dynamic_plugin[coverage] __________________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
____________________________________________________ ERROR at setup of VirtualenvTest.test_venv_with_dynamic_plugin[python -m coverage] _____________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
_______________________________________________________ ERROR at setup of VirtualenvTest.test_installed_namespace_packages[coverage] ________________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
__________________________________________________ ERROR at setup of VirtualenvTest.test_installed_namespace_packages[python -m coverage] ___________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3

tmp_path_factory = TempPathFactory(_given_basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'), _trace=<pluggy._tracing.TagTracerSub object at 0x7f1aeb42f520>, _basetemp=PosixPath('/tmp/pytest-of-tkloczko/pytest-14/popen-gw30'))

    @pytest.fixture(scope="session", name="venv_world")
    def venv_world_fixture(tmp_path_factory):
        """Create a virtualenv with a few test packages for VirtualenvTest to use.

        The first word of the command will be adjusted to run it from the
        venv/bin or venv\Scripts directory.

        Returns the text output of the command.
        """
        words = cmd.split()
        if env.WINDOWS:
            words[0] = fr"venv\Scripts\{words[0]}.exe"
        else:
            words[0] = fr"venv/bin/{words[0]}"
        status, output = run_command(" ".join(words))
        # Print the output so if it fails, we can tell what happened.
        print(output)
>       assert status == 0
E       assert 127 == 0

tests/test_venv.py:36: AssertionError
__________________________________________________________________ ERROR at setup of VirtualenvTest.test_bug_888[coverage] __________________________________________________________________
[gw30] linux -- Python 3.8.16 /usr/bin/python3