Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Allow backends to be called in fresh subprocesses #2712

Closed
stephenfin opened this issue Dec 14, 2022 · 19 comments · Fixed by #3233
Closed

Allow backends to be called in fresh subprocesses #2712

stephenfin opened this issue Dec 14, 2022 · 19 comments · Fixed by #3233
Labels
feature:new something does not exist yet, but should help:wanted Issues that have been acknowledged, a solution determined and a PR might likely be accepted.

Comments

@stephenfin
Copy link
Contributor

stephenfin commented Dec 14, 2022

Issue

I'm using pbr for a number of projects. I've observed that when using this with tox 4.x, the package fails to build with the following error message being emitted:

py311: packaging backend failed (code=error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].                                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                                                                                                                                            
To avoid accidental inclusion of unwanted files or directories,                                                                                                                                                                                                                                                                                                                                                                             
setuptools will not proceed with this build.                                                                                                                                                                                                                                                                                                                                                                                                
                                                                                                                                                                                                                                                                                                                                                                                                                                            
If you are trying to create a single distribution with multiple packages                                                                                                                                                                                                                                                                                                                                                                    
on purpose, you should not rely on automatic discovery.                                                                                                                                                                                                                                                                                                                                                                                     
Instead, consider the following options:                                                                                                                                                                                                                                                                                                                                                                                                    
                                                                                                                                                                                                                                                                                                                                                                                                                                            
1. set up custom discovery (`find` directive with `include` or `exclude`)                                                                                                                                                                                                                                                                                                                                                                   
2. use a `src-layout`                                                                                                                                                                                                                                                                                                                                                                                                                       
3. explicitly set `py_modules` or `packages` with a list of names                                                                                                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                                                                                                                                                                                                                            
To find more information, look for "package discovery" on setuptools docs.), with SystemExit: error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                                                                                                                                                            
To avoid accidental inclusion of unwanted files or directories,                                                                                                                                                                                                                                                                                                                                                                             
setuptools will not proceed with this build.

... lots more below here ...

However, I'm already defining packages in my setup.cfg:

[metadata]
name = foo
description = A demo project
license = MIT License
license_file = LICENSE
author = Stephen Finucane
author_email = stephen@that.guru
python_requires = >=3.7

[files]
packages =
    foo

(Note that [files] is the correct section for pbr)

From reading the traceback, it feels like tox is not detecting that I am using pbr and is attempting to use plain-old setuptools. However, tools like build (i.e. python -m build) manage to detect pbr just fine so I don't know what's going on here.

This process also doesn't quietly die. Instead, it hangs around forever. I've seen CI failures on some packages where the build finally timed out after 3 hours. Attempting to kill the process locally with Ctrl + C fails and I need to issue a kill to the parent process.

ps aux | grep python
...
stephen+  181923  137  0.1 772888 34684 pts/6    Sl+  13:16   0:28 /tmp/test/.venv/bin/python /tmp/test/.venv/bin/tox -e py311
stephen+  181939  3.0  0.0      0     0 pts/6    Z+   13:16   0:00 [python] <defunct>
...kill 181923

Environment

Provide at least:

  • OS: Fedora 37
  • pip list of the host Python where tox is installed:
consolepip list
Package       Version
------------- -------
cachetools    5.2.0
chardet       5.1.0
colorama      0.4.6
distlib       0.3.6
filelock      3.8.2
packaging     22.0
pip           22.2.2
platformdirs  2.6.0
pluggy        1.0.0
pyproject_api 1.2.1
setuptools    62.6.0
tox           4.0.9
virtualenv    20.17.1
wheel         0.37.1

[notice] A new release of pip available: 22.2.2 -> 22.3.1
[notice] To update, run: pip install --upgrade pip

Output of running tox

Provide the output of tox -rvv:

.pkg: 123 W remove tox env folder /tmp/test/.tox/.pkg [tox/tox_env/api.py:311]
py37: 127 I find interpreter for spec PythonSpec(major=3) [virtualenv/discovery/builtin.py:56]
py37: 127 D got python info of /usr/bin/python3.11 from /home/stephenfin/.local/share/virtualenv/py_info/1/ca3ed784184f1b3bb7c3539bfb45e71710cd27667424f92c2d5bb4df9c107c23.json [virtualenv/app_data/via_disk_folder.py:129]
py37: 127 I proposed PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:63]
py37: 127 D accepted PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:65]
py37: 128 D filesystem is case-sensitive [virtualenv/info.py:24]
py37: 145 I create virtual environment via CPython3Posix(dest=/tmp/test/.tox/py37, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:48]
py37: 146 D create folder /tmp/test/.tox/py37/bin [virtualenv/util/path/_sync.py:9]
py37: 146 D create folder /tmp/test/.tox/py37/lib/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py37: 146 D create folder /tmp/test/.tox/py37/lib64/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py37: 146 D write /tmp/test/.tox/py37/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py37: 146 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py37: 146 D symlink /usr/bin/python3.11 to /tmp/test/.tox/py37/bin/python [virtualenv/util/path/_sync.py:28]
py37: 146 D create virtualenv import hook file /tmp/test/.tox/py37/lib/python3.11/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:89]
py37: 146 D create /tmp/test/.tox/py37/lib/python3.11/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:92]
py37: 147 D ============================== target debug ============================== [virtualenv/run/session.py:50]
py37: 147 D debug via /tmp/test/.tox/py37/bin/python /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:197]
py37: 147 D {
  "sys": {
    "executable": "/tmp/test/.tox/py37/bin/python",
    "_base_executable": "/usr/bin/python3.11",
    "prefix": "/tmp/test/.tox/py37",
    "base_prefix": "/usr",
    "real_prefix": null,
    "exec_prefix": "/tmp/test/.tox/py37",
    "base_exec_prefix": "/usr",
    "path": [
      "/usr/lib64/python311.zip",
      "/usr/lib64/python3.11",
      "/usr/lib64/python3.11/lib-dynload",
      "/tmp/test/.tox/py37/lib64/python3.11/site-packages",
      "/tmp/test/.tox/py37/lib/python3.11/site-packages"
    ],
    "meta_path": [
      "<class '_virtualenv._Finder'>",
      "<class '_frozen_importlib.BuiltinImporter'>",
      "<class '_frozen_importlib.FrozenImporter'>",
      "<class '_frozen_importlib_external.PathFinder'>"
    ],
    "fs_encoding": "utf-8",
    "io_encoding": "utf-8"
  },
  "version": "3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]",
  "makefile_filename": "/usr/lib64/python3.11/config-3.11-x86_64-linux-gnu/Makefile",
  "os": "<module 'os' (frozen)>",
  "site": "<module 'site' (frozen)>",
  "datetime": "<module 'datetime' from '/usr/lib64/python3.11/datetime.py'>",
  "math": "<module 'math' from '/usr/lib64/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so'>",
  "json": "<module 'json' from '/usr/lib64/python3.11/json/__init__.py'>"
} [virtualenv/run/session.py:51]
py37: 166 I add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stephenfin/.local/share/virtualenv) [virtualenv/run/session.py:55]
py37: 167 D install pip from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/pip-22.3.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py37: 167 D install setuptools from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/setuptools-65.6.3-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py37: 168 D install wheel from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/wheel-0.38.4-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py37: 168 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.virtualenv to /tmp/test/.tox/py37/lib/python3.11/site-packages/wheel-0.38.4.virtualenv [virtualenv/util/path/_sync.py:36]
py37: 168 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.virtualenv to /tmp/test/.tox/py37/lib/python3.11/site-packages/pip-22.3.1.virtualenv [virtualenv/util/path/_sync.py:36]
py37: 169 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/_distutils_hack to /tmp/test/.tox/py37/lib/python3.11/site-packages/_distutils_hack [virtualenv/util/path/_sync.py:36]
py37: 169 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.dist-info to /tmp/test/.tox/py37/lib/python3.11/site-packages/wheel-0.38.4.dist-info [virtualenv/util/path/_sync.py:36]
py37: 169 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip to /tmp/test/.tox/py37/lib/python3.11/site-packages/pip [virtualenv/util/path/_sync.py:36]
py37: 170 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools to /tmp/test/.tox/py37/lib/python3.11/site-packages/setuptools [virtualenv/util/path/_sync.py:36]
py37: 171 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel to /tmp/test/.tox/py37/lib/python3.11/site-packages/wheel [virtualenv/util/path/_sync.py:36]
py37: 176 D generated console scripts wheel wheel-3.11 wheel3.11 wheel3 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py37: 196 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.dist-info to /tmp/test/.tox/py37/lib/python3.11/site-packages/setuptools-65.6.3.dist-info [virtualenv/util/path/_sync.py:36]
py37: 197 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/pkg_resources to /tmp/test/.tox/py37/lib/python3.11/site-packages/pkg_resources [virtualenv/util/path/_sync.py:36]
py37: 202 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.virtualenv to /tmp/test/.tox/py37/lib/python3.11/site-packages/setuptools-65.6.3.virtualenv [virtualenv/util/path/_sync.py:36]
py37: 203 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/distutils-precedence.pth to /tmp/test/.tox/py37/lib/python3.11/site-packages/distutils-precedence.pth [virtualenv/util/path/_sync.py:36]
py37: 203 D generated console scripts  [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py37: 218 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.dist-info to /tmp/test/.tox/py37/lib/python3.11/site-packages/pip-22.3.1.dist-info [virtualenv/util/path/_sync.py:36]
py37: 219 D generated console scripts pip pip3 pip-3.11 pip3.11 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py37: 219 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:61]
py37: 220 D write /tmp/test/.tox/py37/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py37: 221 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py37: 221 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py37: 223 W install_deps> python -I -m pip install -r /tmp/test/test-requirements.txt [tox/tox_env/api.py:417]
Collecting pytest
  Using cached pytest-7.2.0-py3-none-any.whl (316 kB)
Collecting attrs>=19.2.0
  Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB)
Collecting iniconfig
  Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting packaging
  Using cached packaging-22.0-py3-none-any.whl (42 kB)
Collecting pluggy<2.0,>=0.12
  Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Installing collected packages: iniconfig, pluggy, packaging, attrs, pytest
Successfully installed attrs-22.1.0 iniconfig-1.1.1 packaging-22.0 pluggy-1.0.0 pytest-7.2.0
py37: 1577 I exit 0 (1.35 seconds) /tmp/test> python -I -m pip install -r /tmp/test/test-requirements.txt pid=180662 [tox/execute/api.py:275]
.pkg: 1580 I find interpreter for spec PythonSpec(path=/tmp/test/.venv/bin/python) [virtualenv/discovery/builtin.py:56]
.pkg: 1580 I proposed PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:63]
.pkg: 1580 D accepted PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:65]
.pkg: 1581 I create virtual environment via CPython3Posix(dest=/tmp/test/.tox/.pkg, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:48]
.pkg: 1582 D create folder /tmp/test/.tox/.pkg/bin [virtualenv/util/path/_sync.py:9]
.pkg: 1582 D create folder /tmp/test/.tox/.pkg/lib/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
.pkg: 1582 D create folder /tmp/test/.tox/.pkg/lib64/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
.pkg: 1582 D write /tmp/test/.tox/.pkg/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
.pkg: 1582 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1582 D symlink /usr/bin/python3.11 to /tmp/test/.tox/.pkg/bin/python [virtualenv/util/path/_sync.py:28]
.pkg: 1583 D create virtualenv import hook file /tmp/test/.tox/.pkg/lib/python3.11/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:89]
.pkg: 1583 D create /tmp/test/.tox/.pkg/lib/python3.11/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:92]
.pkg: 1583 D ============================== target debug ============================== [virtualenv/run/session.py:50]
.pkg: 1583 D debug via /tmp/test/.tox/.pkg/bin/python /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:197]
.pkg: 1583 D {
  "sys": {
    "executable": "/tmp/test/.tox/.pkg/bin/python",
    "_base_executable": "/usr/bin/python3.11",
    "prefix": "/tmp/test/.tox/.pkg",
    "base_prefix": "/usr",
    "real_prefix": null,
    "exec_prefix": "/tmp/test/.tox/.pkg",
    "base_exec_prefix": "/usr",
    "path": [
      "/usr/lib64/python311.zip",
      "/usr/lib64/python3.11",
      "/usr/lib64/python3.11/lib-dynload",
      "/tmp/test/.tox/.pkg/lib64/python3.11/site-packages",
      "/tmp/test/.tox/.pkg/lib/python3.11/site-packages"
    ],
    "meta_path": [
      "<class '_virtualenv._Finder'>",
      "<class '_frozen_importlib.BuiltinImporter'>",
      "<class '_frozen_importlib.FrozenImporter'>",
      "<class '_frozen_importlib_external.PathFinder'>"
    ],
    "fs_encoding": "utf-8",
    "io_encoding": "utf-8"
  },
  "version": "3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]",
  "makefile_filename": "/usr/lib64/python3.11/config-3.11-x86_64-linux-gnu/Makefile",
  "os": "<module 'os' (frozen)>",
  "site": "<module 'site' (frozen)>",
  "datetime": "<module 'datetime' from '/usr/lib64/python3.11/datetime.py'>",
  "math": "<module 'math' from '/usr/lib64/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so'>",
  "json": "<module 'json' from '/usr/lib64/python3.11/json/__init__.py'>"
} [virtualenv/run/session.py:51]
.pkg: 1611 I add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stephenfin/.local/share/virtualenv) [virtualenv/run/session.py:55]
.pkg: 1613 D install setuptools from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/setuptools-65.6.3-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
.pkg: 1613 D install pip from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/pip-22.3.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
.pkg: 1613 D install wheel from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/wheel-0.38.4-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
.pkg: 1614 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.virtualenv to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/pip-22.3.1.virtualenv [virtualenv/util/path/_sync.py:36]
.pkg: 1614 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/_distutils_hack to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/_distutils_hack [virtualenv/util/path/_sync.py:36]
.pkg: 1615 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/pip [virtualenv/util/path/_sync.py:36]
.pkg: 1615 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.virtualenv to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/wheel-0.38.4.virtualenv [virtualenv/util/path/_sync.py:36]
.pkg: 1615 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.dist-info to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/wheel-0.38.4.dist-info [virtualenv/util/path/_sync.py:36]
.pkg: 1616 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools [virtualenv/util/path/_sync.py:36]
.pkg: 1617 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/wheel [virtualenv/util/path/_sync.py:36]
.pkg: 1623 D generated console scripts wheel3 wheel wheel-3.11 wheel3.11 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
.pkg: 1644 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.dist-info to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools-65.6.3.dist-info [virtualenv/util/path/_sync.py:36]
.pkg: 1645 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/pkg_resources to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/pkg_resources [virtualenv/util/path/_sync.py:36]
.pkg: 1651 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.virtualenv to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools-65.6.3.virtualenv [virtualenv/util/path/_sync.py:36]
.pkg: 1651 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/distutils-precedence.pth to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/distutils-precedence.pth [virtualenv/util/path/_sync.py:36]
.pkg: 1652 D generated console scripts  [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
.pkg: 1666 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.dist-info to /tmp/test/.tox/.pkg/lib/python3.11/site-packages/pip-22.3.1.dist-info [virtualenv/util/path/_sync.py:36]
.pkg: 1667 D generated console scripts pip3.11 pip pip3 pip-3.11 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
.pkg: 1667 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:61]
.pkg: 1668 D write /tmp/test/.tox/.pkg/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
.pkg: 1668 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
.pkg: 1668 W install_requires> python -I -m pip install 'setuptools>=40.8.0' wheel [tox/tox_env/api.py:417]
Requirement already satisfied: setuptools>=40.8.0 in ./.tox/.pkg/lib/python3.11/site-packages (65.6.3)
Requirement already satisfied: wheel in ./.tox/.pkg/lib/python3.11/site-packages (0.38.4)
.pkg: 2474 I exit 0 (0.81 seconds) /tmp/test> python -I -m pip install 'setuptools>=40.8.0' wheel pid=180688 [tox/execute/api.py:275]
.pkg: 2474 W _optional_hooks> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
Backend: run command _optional_hooks with args {}
Backend: Wrote response {'return': {'get_requires_for_build_sdist': True, 'prepare_metadata_for_build_wheel': True, 'get_requires_for_build_wheel': True, 'build_editable': True, 'get_requires_for_build_editable': True, 'prepare_metadata_for_build_editable': True}} to /tmp/pep517__optional_hooks-8dlt64az.json
.pkg: 2780 I exit None (0.31 seconds) /tmp/test> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=180699 [tox/execute/api.py:275]
.pkg: 2780 W get_requires_for_build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
  warnings.warn(msg, warning_class)
Backend: run command get_requires_for_build_sdist with args {'config_settings': None}
Backend: Wrote response {'return': ['pbr']} to /tmp/pep517_get_requires_for_build_sdist-5j40bh4z.json
.pkg: 2786 I exit None (0.01 seconds) /tmp/test> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=180699 [tox/execute/api.py:275]
.pkg: 2786 W install_requires_for_build_sdist> python -I -m pip install pbr [tox/tox_env/api.py:417]
Collecting pbr
  Using cached pbr-5.11.0-py2.py3-none-any.whl (112 kB)
Installing collected packages: pbr
Successfully installed pbr-5.11.0
.pkg: 3304 I exit 0 (0.52 seconds) /tmp/test> python -I -m pip install pbr pid=180709 [tox/execute/api.py:275]
.pkg: 3304 W prepare_metadata_for_build_wheel> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
Backend: run command prepare_metadata_for_build_wheel with args {'metadata_directory': '/tmp/test/.tox/.pkg/.meta', 'config_settings': {'--build-option': []}}
[pbr] Generating ChangeLog
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/command/easy_install.py:144: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
  warnings.warn(msg, warning_class)
running dist_info
creating /tmp/test/.tox/.pkg/.meta/foo.egg-info
writing pbr to /tmp/test/.tox/.pkg/.meta/foo.egg-info/pbr.json
writing /tmp/test/.tox/.pkg/.meta/foo.egg-info/PKG-INFO
writing dependency_links to /tmp/test/.tox/.pkg/.meta/foo.egg-info/dependency_links.txt
writing requirements to /tmp/test/.tox/.pkg/.meta/foo.egg-info/requires.txt
writing top-level names to /tmp/test/.tox/.pkg/.meta/foo.egg-info/top_level.txt
[pbr] Processing SOURCES.txt
writing manifest file '/tmp/test/.tox/.pkg/.meta/foo.egg-info/SOURCES.txt'
[pbr] In git context, generating filelist from git
warning: no files found matching 'AUTHORS'
warning: no files found matching 'ChangeLog'
warning: no previously-included files found matching '.gitreview'
warning: no previously-included files matching '*.pyc' found anywhere in distribution
writing manifest file '/tmp/test/.tox/.pkg/.meta/foo.egg-info/SOURCES.txt'
creating '/tmp/test/.tox/.pkg/.meta/foo-0.0.1.dev3.dist-info'
Backend: Wrote response {'return': 'foo-0.0.1.dev3.dist-info'} to /tmp/pep517_prepare_metadata_for_build_wheel-52_mezca.json
.pkg: 3497 I exit None (0.19 seconds) /tmp/test> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=180699 [tox/execute/api.py:275]
.pkg: 3498 W build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
  warnings.warn(msg, warning_class)
Traceback (most recent call last):
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
    dist.run_commands()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
    self.run_command(cmd)
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/dist.py", line 1204, in run_command
    self.set_defaults()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 340, in __call__
    self._analyse_package_layout(ignore_ext_modules)
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 373, in _analyse_package_layout
    or self._analyse_flat_layout()
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 430, in _analyse_flat_layout
    return self._analyse_flat_packages() or self._analyse_flat_modules()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 436, in _analyse_flat_packages
    self._ensure_no_accidental_inclusion(top_level, "packages")
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 466, in _ensure_no_accidental_inclusion
    raise PackageDiscoveryError(cleandoc(msg))
setuptools.errors.PackageDiscoveryError: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py", line 90, in run
    outcome = backend_proxy(parsed_message["cmd"], **parsed_message["kwargs"])
Backend: run command build_sdist with args {'sdist_directory': '/tmp/test/.tox/.pkg/dist', 'config_settings': None}
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py", line 32, in __call__
    return getattr(on_object, name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 417, in build_sdist
    return self._build_with_temp_dir(['sdist', '--formats', 'gztar'],
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 398, in _build_with_temp_dir
    self.run_setup()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 485, in run_setup
    self).run_setup(setup_script=setup_script)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 335, in run_setup
    exec(code, locals())
  File "<string>", line 5, in <module>
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/__init__.py", line 87, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in setup
    return run_commands(dist)
           ^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 215, in run_commands
    raise SystemExit("error: " + str(msg))
SystemExit: error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

Backend: Wrote response {'code': 'error: Multiple top-level packages discovered in a flat-layout: [\'man\', \'foo\'].\n\nTo avoid accidental inclusion of unwanted files or directories,\nsetuptools will not proceed with this build.\n\nIf you are trying to create a single distribution with multiple packages\non purpose, you should not rely on automatic discovery.\nInstead, consider the following options:\n\n1. set up custom discovery (`find` directive with `include` or `exclude`)\n2. use a `src-layout`\n3. explicitly set `py_modules` or `packages` with a list of names\n\nTo find more information, look for "package discovery" on setuptools docs.', 'exc_type': 'SystemExit', 'exc_msg': 'error: Multiple top-level packages discovered in a flat-layout: [\'man\', \'foo\'].\n\nTo avoid accidental inclusion of unwanted files or directories,\nsetuptools will not proceed with this build.\n\nIf you are trying to create a single distribution with multiple packages\non purpose, you should not rely on automatic discovery.\nInstead, consider the following options:\n\n1. set up custom discovery (`find` directive with `include` or `exclude`)\n2. use a `src-layout`\n3. explicitly set `py_modules` or `packages` with a list of names\n\nTo find more information, look for "package discovery" on setuptools docs.'} to /tmp/pep517_build_sdist-88gm_hhj.json
To find more information, look for "package discovery" on setuptools docs.
error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
.pkg: 3510 I exit None (0.01 seconds) /tmp/test> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ pid=180699 [tox/execute/api.py:275]
py37: 3511 E packaging backend failed (code=error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.), with SystemExit: error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
  warnings.warn(msg, warning_class)
Traceback (most recent call last):
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
    dist.run_commands()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
    self.run_command(cmd)
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/dist.py", line 1204, in run_command
    self.set_defaults()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 340, in __call__
    self._analyse_package_layout(ignore_ext_modules)
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 373, in _analyse_package_layout
    or self._analyse_flat_layout()
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 430, in _analyse_flat_layout
    return self._analyse_flat_packages() or self._analyse_flat_modules()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 436, in _analyse_flat_packages
    self._ensure_no_accidental_inclusion(top_level, "packages")
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 466, in _ensure_no_accidental_inclusion
    raise PackageDiscoveryError(cleandoc(msg))
setuptools.errors.PackageDiscoveryError: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py", line 90, in run
    outcome = backend_proxy(parsed_message["cmd"], **parsed_message["kwargs"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py", line 32, in __call__
    return getattr(on_object, name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 417, in build_sdist
    return self._build_with_temp_dir(['sdist', '--formats', 'gztar'],
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 398, in _build_with_temp_dir
    self.run_setup()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 485, in run_setup
    self).run_setup(setup_script=setup_script)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 335, in run_setup
    exec(code, locals())
  File "<string>", line 5, in <module>
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/__init__.py", line 87, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in setup
    return run_commands(dist)
           ^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 215, in run_commands
    raise SystemExit("error: " + str(msg))
SystemExit: error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
Backend: run command build_sdist with args {'sdist_directory': '/tmp/test/.tox/.pkg/dist', 'config_settings': None}
Backend: Wrote response {'code': 'error: Multiple top-level packages discovered in a flat-layout: [\'man\', \'foo\'].\n\nTo avoid accidental inclusion of unwanted files or directories,\nsetuptools will not proceed with this build.\n\nIf you are trying to create a single distribution with multiple packages\non purpose, you should not rely on automatic discovery.\nInstead, consider the following options:\n\n1. set up custom discovery (`find` directive with `include` or `exclude`)\n2. use a `src-layout`\n3. explicitly set `py_modules` or `packages` with a list of names\n\nTo find more information, look for "package discovery" on setuptools docs.', 'exc_type': 'SystemExit', 'exc_msg': 'error: Multiple top-level packages discovered in a flat-layout: [\'man\', \'foo\'].\n\nTo avoid accidental inclusion of unwanted files or directories,\nsetuptools will not proceed with this build.\n\nIf you are trying to create a single distribution with multiple packages\non purpose, you should not rely on automatic discovery.\nInstead, consider the following options:\n\n1. set up custom discovery (`find` directive with `include` or `exclude`)\n2. use a `src-layout`\n3. explicitly set `py_modules` or `packages` with a list of names\n\nTo find more information, look for "package discovery" on setuptools docs.'} to /tmp/pep517_build_sdist-88gm_hhj.json [tox/session/cmd/run/single.py:51]
py37: FAIL ✖ in 3.39 seconds
py38: 3513 I find interpreter for spec PythonSpec(major=3) [virtualenv/discovery/builtin.py:56]
py38: 3513 I proposed PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:63]
py38: 3513 D accepted PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:65]
py38: 3514 I create virtual environment via CPython3Posix(dest=/tmp/test/.tox/py38, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:48]
py38: 3514 D create folder /tmp/test/.tox/py38/bin [virtualenv/util/path/_sync.py:9]
py38: 3514 D create folder /tmp/test/.tox/py38/lib/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py38: 3514 D create folder /tmp/test/.tox/py38/lib64/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py38: 3514 D write /tmp/test/.tox/py38/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py38: 3514 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py38: 3514 D symlink /usr/bin/python3.11 to /tmp/test/.tox/py38/bin/python [virtualenv/util/path/_sync.py:28]
py38: 3514 D create virtualenv import hook file /tmp/test/.tox/py38/lib/python3.11/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:89]
py38: 3515 D create /tmp/test/.tox/py38/lib/python3.11/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:92]
py38: 3515 D ============================== target debug ============================== [virtualenv/run/session.py:50]
py38: 3515 D debug via /tmp/test/.tox/py38/bin/python /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:197]
py38: 3515 D {
  "sys": {
    "executable": "/tmp/test/.tox/py38/bin/python",
    "_base_executable": "/usr/bin/python3.11",
    "prefix": "/tmp/test/.tox/py38",
    "base_prefix": "/usr",
    "real_prefix": null,
    "exec_prefix": "/tmp/test/.tox/py38",
    "base_exec_prefix": "/usr",
    "path": [
      "/usr/lib64/python311.zip",
      "/usr/lib64/python3.11",
      "/usr/lib64/python3.11/lib-dynload",
      "/tmp/test/.tox/py38/lib64/python3.11/site-packages",
      "/tmp/test/.tox/py38/lib/python3.11/site-packages"
    ],
    "meta_path": [
      "<class '_virtualenv._Finder'>",
      "<class '_frozen_importlib.BuiltinImporter'>",
      "<class '_frozen_importlib.FrozenImporter'>",
      "<class '_frozen_importlib_external.PathFinder'>"
    ],
    "fs_encoding": "utf-8",
    "io_encoding": "utf-8"
  },
  "version": "3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]",
  "makefile_filename": "/usr/lib64/python3.11/config-3.11-x86_64-linux-gnu/Makefile",
  "os": "<module 'os' (frozen)>",
  "site": "<module 'site' (frozen)>",
  "datetime": "<module 'datetime' from '/usr/lib64/python3.11/datetime.py'>",
  "math": "<module 'math' from '/usr/lib64/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so'>",
  "json": "<module 'json' from '/usr/lib64/python3.11/json/__init__.py'>"
} [virtualenv/run/session.py:51]
py38: 3538 I add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stephenfin/.local/share/virtualenv) [virtualenv/run/session.py:55]
py38: 3540 D install pip from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/pip-22.3.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py38: 3540 D install setuptools from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/setuptools-65.6.3-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py38: 3540 D install wheel from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/wheel-0.38.4-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py38: 3542 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.virtualenv to /tmp/test/.tox/py38/lib/python3.11/site-packages/wheel-0.38.4.virtualenv [virtualenv/util/path/_sync.py:36]
py38: 3542 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/_distutils_hack to /tmp/test/.tox/py38/lib/python3.11/site-packages/_distutils_hack [virtualenv/util/path/_sync.py:36]
py38: 3542 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.virtualenv to /tmp/test/.tox/py38/lib/python3.11/site-packages/pip-22.3.1.virtualenv [virtualenv/util/path/_sync.py:36]
py38: 3542 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.dist-info to /tmp/test/.tox/py38/lib/python3.11/site-packages/wheel-0.38.4.dist-info [virtualenv/util/path/_sync.py:36]
py38: 3542 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip to /tmp/test/.tox/py38/lib/python3.11/site-packages/pip [virtualenv/util/path/_sync.py:36]
py38: 3543 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools to /tmp/test/.tox/py38/lib/python3.11/site-packages/setuptools [virtualenv/util/path/_sync.py:36]
py38: 3545 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel to /tmp/test/.tox/py38/lib/python3.11/site-packages/wheel [virtualenv/util/path/_sync.py:36]
py38: 3552 D generated console scripts wheel-3.11 wheel3.11 wheel3 wheel [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py38: 3603 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.dist-info to /tmp/test/.tox/py38/lib/python3.11/site-packages/setuptools-65.6.3.dist-info [virtualenv/util/path/_sync.py:36]
py38: 3605 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/pkg_resources to /tmp/test/.tox/py38/lib/python3.11/site-packages/pkg_resources [virtualenv/util/path/_sync.py:36]
py38: 3621 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.virtualenv to /tmp/test/.tox/py38/lib/python3.11/site-packages/setuptools-65.6.3.virtualenv [virtualenv/util/path/_sync.py:36]
py38: 3621 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/distutils-precedence.pth to /tmp/test/.tox/py38/lib/python3.11/site-packages/distutils-precedence.pth [virtualenv/util/path/_sync.py:36]
py38: 3622 D generated console scripts  [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py38: 3692 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.dist-info to /tmp/test/.tox/py38/lib/python3.11/site-packages/pip-22.3.1.dist-info [virtualenv/util/path/_sync.py:36]
py38: 3695 D generated console scripts pip3 pip-3.11 pip3.11 pip [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py38: 3695 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:61]
py38: 3696 D write /tmp/test/.tox/py38/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py38: 3696 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py38: 3696 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py38: 3698 W install_deps> python -I -m pip install -r /tmp/test/test-requirements.txt [tox/tox_env/api.py:417]
Collecting pytest
  Using cached pytest-7.2.0-py3-none-any.whl (316 kB)
Collecting attrs>=19.2.0
  Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB)
Collecting iniconfig
  Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting packaging
  Using cached packaging-22.0-py3-none-any.whl (42 kB)
Collecting pluggy<2.0,>=0.12
  Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Installing collected packages: iniconfig, pluggy, packaging, attrs, pytest
Successfully installed attrs-22.1.0 iniconfig-1.1.1 packaging-22.0 pluggy-1.0.0 pytest-7.2.0
py38: 5232 I exit 0 (1.53 seconds) /tmp/test> python -I -m pip install -r /tmp/test/test-requirements.txt pid=180771 [tox/execute/api.py:275]
.pkg: 5233 W build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
py38: 5233 E internal error [tox/session/cmd/run/single.py:57]
Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 45, in _evaluate
    tox_env.setup()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/api.py", line 243, in setup
    self._setup_with_env()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 149, in _setup_with_env
    self._setup_pkg()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 172, in _setup_pkg
    self._packages = self._build_packages()
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/runner.py", line 110, in _build_packages
    packages = package_env.perform_packaging(self.conf)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 198, in perform_packaging
    sdist = self._frontend.build_sdist(sdist_directory=self.pkg_dir).sdist
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/cachetools/__init__.py", line 641, in wrapper
    v = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 386, in build_sdist
    basename, out, err = self._send(
                         ^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 333, in _send
    return super()._send(cmd, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 489, in _send
    with self._send_msg(cmd, result_file, msg) as status:
  File "/usr/lib64/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 352, in _send_msg
    execute_status.write_stdin(f"{msg}{os.linesep}")
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/execute/local_sub_process/__init__.py", line 115, in write_stdin
    stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
py38: FAIL ✖ in 1.73 seconds
py39: 5239 I find interpreter for spec PythonSpec(major=3) [virtualenv/discovery/builtin.py:56]
py39: 5240 I proposed PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:63]
py39: 5240 D accepted PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:65]
py39: 5242 I create virtual environment via CPython3Posix(dest=/tmp/test/.tox/py39, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:48]
py39: 5242 D create folder /tmp/test/.tox/py39/bin [virtualenv/util/path/_sync.py:9]
py39: 5243 D create folder /tmp/test/.tox/py39/lib/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py39: 5243 D create folder /tmp/test/.tox/py39/lib64/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py39: 5243 D write /tmp/test/.tox/py39/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py39: 5243 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py39: 5243 D symlink /usr/bin/python3.11 to /tmp/test/.tox/py39/bin/python [virtualenv/util/path/_sync.py:28]
py39: 5244 D create virtualenv import hook file /tmp/test/.tox/py39/lib/python3.11/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:89]
py39: 5244 D create /tmp/test/.tox/py39/lib/python3.11/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:92]
py39: 5244 D ============================== target debug ============================== [virtualenv/run/session.py:50]
py39: 5244 D debug via /tmp/test/.tox/py39/bin/python /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:197]
py39: 5244 D {
  "sys": {
    "executable": "/tmp/test/.tox/py39/bin/python",
    "_base_executable": "/usr/bin/python3.11",
    "prefix": "/tmp/test/.tox/py39",
    "base_prefix": "/usr",
    "real_prefix": null,
    "exec_prefix": "/tmp/test/.tox/py39",
    "base_exec_prefix": "/usr",
    "path": [
      "/usr/lib64/python311.zip",
      "/usr/lib64/python3.11",
      "/usr/lib64/python3.11/lib-dynload",
      "/tmp/test/.tox/py39/lib64/python3.11/site-packages",
      "/tmp/test/.tox/py39/lib/python3.11/site-packages"
    ],
    "meta_path": [
      "<class '_virtualenv._Finder'>",
      "<class '_frozen_importlib.BuiltinImporter'>",
      "<class '_frozen_importlib.FrozenImporter'>",
      "<class '_frozen_importlib_external.PathFinder'>"
    ],
    "fs_encoding": "utf-8",
    "io_encoding": "utf-8"
  },
  "version": "3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]",
  "makefile_filename": "/usr/lib64/python3.11/config-3.11-x86_64-linux-gnu/Makefile",
  "os": "<module 'os' (frozen)>",
  "site": "<module 'site' (frozen)>",
  "datetime": "<module 'datetime' from '/usr/lib64/python3.11/datetime.py'>",
  "math": "<module 'math' from '/usr/lib64/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so'>",
  "json": "<module 'json' from '/usr/lib64/python3.11/json/__init__.py'>"
} [virtualenv/run/session.py:51]
py39: 5270 I add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stephenfin/.local/share/virtualenv) [virtualenv/run/session.py:55]
py39: 5271 D install pip from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/pip-22.3.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py39: 5272 D install setuptools from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/setuptools-65.6.3-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py39: 5272 D install wheel from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/wheel-0.38.4-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py39: 5274 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/_distutils_hack to /tmp/test/.tox/py39/lib/python3.11/site-packages/_distutils_hack [virtualenv/util/path/_sync.py:36]
py39: 5274 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.virtualenv to /tmp/test/.tox/py39/lib/python3.11/site-packages/wheel-0.38.4.virtualenv [virtualenv/util/path/_sync.py:36]
py39: 5274 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.virtualenv to /tmp/test/.tox/py39/lib/python3.11/site-packages/pip-22.3.1.virtualenv [virtualenv/util/path/_sync.py:36]
py39: 5275 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.dist-info to /tmp/test/.tox/py39/lib/python3.11/site-packages/wheel-0.38.4.dist-info [virtualenv/util/path/_sync.py:36]
py39: 5275 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip to /tmp/test/.tox/py39/lib/python3.11/site-packages/pip [virtualenv/util/path/_sync.py:36]
py39: 5276 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools to /tmp/test/.tox/py39/lib/python3.11/site-packages/setuptools [virtualenv/util/path/_sync.py:36]
py39: 5279 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel to /tmp/test/.tox/py39/lib/python3.11/site-packages/wheel [virtualenv/util/path/_sync.py:36]
py39: 5290 D generated console scripts wheel3 wheel wheel-3.11 wheel3.11 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py39: 5368 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.dist-info to /tmp/test/.tox/py39/lib/python3.11/site-packages/setuptools-65.6.3.dist-info [virtualenv/util/path/_sync.py:36]
py39: 5372 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/pkg_resources to /tmp/test/.tox/py39/lib/python3.11/site-packages/pkg_resources [virtualenv/util/path/_sync.py:36]
py39: 5392 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.virtualenv to /tmp/test/.tox/py39/lib/python3.11/site-packages/setuptools-65.6.3.virtualenv [virtualenv/util/path/_sync.py:36]
py39: 5393 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/distutils-precedence.pth to /tmp/test/.tox/py39/lib/python3.11/site-packages/distutils-precedence.pth [virtualenv/util/path/_sync.py:36]
py39: 5394 D generated console scripts  [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py39: 5476 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.dist-info to /tmp/test/.tox/py39/lib/python3.11/site-packages/pip-22.3.1.dist-info [virtualenv/util/path/_sync.py:36]
py39: 5480 D generated console scripts pip3.11 pip pip3 pip-3.11 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py39: 5480 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:61]
py39: 5482 D write /tmp/test/.tox/py39/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py39: 5482 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py39: 5482 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py39: 5484 W install_deps> python -I -m pip install -r /tmp/test/test-requirements.txt [tox/tox_env/api.py:417]
Collecting pytest
  Using cached pytest-7.2.0-py3-none-any.whl (316 kB)
Collecting attrs>=19.2.0
  Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB)
Collecting iniconfig
  Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting packaging
  Using cached packaging-22.0-py3-none-any.whl (42 kB)
Collecting pluggy<2.0,>=0.12
  Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Installing collected packages: iniconfig, pluggy, packaging, attrs, pytest
Successfully installed attrs-22.1.0 iniconfig-1.1.1 packaging-22.0 pluggy-1.0.0 pytest-7.2.0
py39: 7015 I exit 0 (1.53 seconds) /tmp/test> python -I -m pip install -r /tmp/test/test-requirements.txt pid=180825 [tox/execute/api.py:275]
.pkg: 7016 W build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
py39: 7017 E internal error [tox/session/cmd/run/single.py:57]
Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 45, in _evaluate
    tox_env.setup()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/api.py", line 243, in setup
    self._setup_with_env()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 149, in _setup_with_env
    self._setup_pkg()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 172, in _setup_pkg
    self._packages = self._build_packages()
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/runner.py", line 110, in _build_packages
    packages = package_env.perform_packaging(self.conf)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 198, in perform_packaging
    sdist = self._frontend.build_sdist(sdist_directory=self.pkg_dir).sdist
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/cachetools/__init__.py", line 641, in wrapper
    v = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 386, in build_sdist
    basename, out, err = self._send(
                         ^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 333, in _send
    return super()._send(cmd, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 489, in _send
    with self._send_msg(cmd, result_file, msg) as status:
  File "/usr/lib64/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 352, in _send_msg
    execute_status.write_stdin(f"{msg}{os.linesep}")
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/execute/local_sub_process/__init__.py", line 115, in write_stdin
    stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
py39: FAIL ✖ in 1.78 seconds
py310: 7020 I find interpreter for spec PythonSpec(major=3) [virtualenv/discovery/builtin.py:56]
py310: 7020 I proposed PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:63]
py310: 7020 D accepted PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:65]
py310: 7021 I create virtual environment via CPython3Posix(dest=/tmp/test/.tox/py310, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:48]
py310: 7022 D create folder /tmp/test/.tox/py310/bin [virtualenv/util/path/_sync.py:9]
py310: 7022 D create folder /tmp/test/.tox/py310/lib/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py310: 7022 D create folder /tmp/test/.tox/py310/lib64/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py310: 7022 D write /tmp/test/.tox/py310/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py310: 7022 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py310: 7022 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py310: 7023 D symlink /usr/bin/python3.11 to /tmp/test/.tox/py310/bin/python [virtualenv/util/path/_sync.py:28]
py310: 7023 D create virtualenv import hook file /tmp/test/.tox/py310/lib/python3.11/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:89]
py310: 7023 D create /tmp/test/.tox/py310/lib/python3.11/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:92]
py310: 7023 D ============================== target debug ============================== [virtualenv/run/session.py:50]
py310: 7023 D debug via /tmp/test/.tox/py310/bin/python /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:197]
py310: 7023 D {
  "sys": {
    "executable": "/tmp/test/.tox/py310/bin/python",
    "_base_executable": "/usr/bin/python3.11",
    "prefix": "/tmp/test/.tox/py310",
    "base_prefix": "/usr",
    "real_prefix": null,
    "exec_prefix": "/tmp/test/.tox/py310",
    "base_exec_prefix": "/usr",
    "path": [
      "/usr/lib64/python311.zip",
      "/usr/lib64/python3.11",
      "/usr/lib64/python3.11/lib-dynload",
      "/tmp/test/.tox/py310/lib64/python3.11/site-packages",
      "/tmp/test/.tox/py310/lib/python3.11/site-packages"
    ],
    "meta_path": [
      "<class '_virtualenv._Finder'>",
      "<class '_frozen_importlib.BuiltinImporter'>",
      "<class '_frozen_importlib.FrozenImporter'>",
      "<class '_frozen_importlib_external.PathFinder'>"
    ],
    "fs_encoding": "utf-8",
    "io_encoding": "utf-8"
  },
  "version": "3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]",
  "makefile_filename": "/usr/lib64/python3.11/config-3.11-x86_64-linux-gnu/Makefile",
  "os": "<module 'os' (frozen)>",
  "site": "<module 'site' (frozen)>",
  "datetime": "<module 'datetime' from '/usr/lib64/python3.11/datetime.py'>",
  "math": "<module 'math' from '/usr/lib64/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so'>",
  "json": "<module 'json' from '/usr/lib64/python3.11/json/__init__.py'>"
} [virtualenv/run/session.py:51]
py310: 7046 I add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stephenfin/.local/share/virtualenv) [virtualenv/run/session.py:55]
py310: 7047 D install pip from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/pip-22.3.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py310: 7048 D install wheel from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/wheel-0.38.4-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py310: 7048 D install setuptools from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/setuptools-65.6.3-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py310: 7049 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.virtualenv to /tmp/test/.tox/py310/lib/python3.11/site-packages/pip-22.3.1.virtualenv [virtualenv/util/path/_sync.py:36]
py310: 7049 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/_distutils_hack to /tmp/test/.tox/py310/lib/python3.11/site-packages/_distutils_hack [virtualenv/util/path/_sync.py:36]
py310: 7050 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip to /tmp/test/.tox/py310/lib/python3.11/site-packages/pip [virtualenv/util/path/_sync.py:36]
py310: 7051 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.virtualenv to /tmp/test/.tox/py310/lib/python3.11/site-packages/wheel-0.38.4.virtualenv [virtualenv/util/path/_sync.py:36]
py310: 7051 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools to /tmp/test/.tox/py310/lib/python3.11/site-packages/setuptools [virtualenv/util/path/_sync.py:36]
py310: 7051 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.dist-info to /tmp/test/.tox/py310/lib/python3.11/site-packages/wheel-0.38.4.dist-info [virtualenv/util/path/_sync.py:36]
py310: 7055 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel to /tmp/test/.tox/py310/lib/python3.11/site-packages/wheel [virtualenv/util/path/_sync.py:36]
py310: 7065 D generated console scripts wheel3.11 wheel3 wheel wheel-3.11 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py310: 7130 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.dist-info to /tmp/test/.tox/py310/lib/python3.11/site-packages/setuptools-65.6.3.dist-info [virtualenv/util/path/_sync.py:36]
py310: 7133 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/pkg_resources to /tmp/test/.tox/py310/lib/python3.11/site-packages/pkg_resources [virtualenv/util/path/_sync.py:36]
py310: 7154 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.virtualenv to /tmp/test/.tox/py310/lib/python3.11/site-packages/setuptools-65.6.3.virtualenv [virtualenv/util/path/_sync.py:36]
py310: 7154 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/distutils-precedence.pth to /tmp/test/.tox/py310/lib/python3.11/site-packages/distutils-precedence.pth [virtualenv/util/path/_sync.py:36]
py310: 7155 D generated console scripts  [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py310: 7242 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.dist-info to /tmp/test/.tox/py310/lib/python3.11/site-packages/pip-22.3.1.dist-info [virtualenv/util/path/_sync.py:36]
py310: 7245 D generated console scripts pip-3.11 pip3.11 pip pip3 [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py310: 7246 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:61]
py310: 7247 D write /tmp/test/.tox/py310/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py310: 7247 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py310: 7247 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py310: 7250 W install_deps> python -I -m pip install -r /tmp/test/test-requirements.txt [tox/tox_env/api.py:417]
Collecting pytest
  Using cached pytest-7.2.0-py3-none-any.whl (316 kB)
Collecting attrs>=19.2.0
  Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB)
Collecting iniconfig
  Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting packaging
  Using cached packaging-22.0-py3-none-any.whl (42 kB)
Collecting pluggy<2.0,>=0.12
  Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Installing collected packages: iniconfig, pluggy, packaging, attrs, pytest
Successfully installed attrs-22.1.0 iniconfig-1.1.1 packaging-22.0 pluggy-1.0.0 pytest-7.2.0
py310: 8795 I exit 0 (1.55 seconds) /tmp/test> python -I -m pip install -r /tmp/test/test-requirements.txt pid=180856 [tox/execute/api.py:275]
.pkg: 8796 W build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
py310: 8797 E internal error [tox/session/cmd/run/single.py:57]
Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 45, in _evaluate
    tox_env.setup()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/api.py", line 243, in setup
    self._setup_with_env()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 149, in _setup_with_env
    self._setup_pkg()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 172, in _setup_pkg
    self._packages = self._build_packages()
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/runner.py", line 110, in _build_packages
    packages = package_env.perform_packaging(self.conf)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 198, in perform_packaging
    sdist = self._frontend.build_sdist(sdist_directory=self.pkg_dir).sdist
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/cachetools/__init__.py", line 641, in wrapper
    v = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 386, in build_sdist
    basename, out, err = self._send(
                         ^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 333, in _send
    return super()._send(cmd, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 489, in _send
    with self._send_msg(cmd, result_file, msg) as status:
  File "/usr/lib64/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 352, in _send_msg
    execute_status.write_stdin(f"{msg}{os.linesep}")
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/execute/local_sub_process/__init__.py", line 115, in write_stdin
    stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
py310: FAIL ✖ in 1.78 seconds
py311: 8800 I find interpreter for spec PythonSpec(major=3) [virtualenv/discovery/builtin.py:56]
py311: 8800 I proposed PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:63]
py311: 8800 D accepted PythonInfo(spec=CPython3.11.0.final.0-64, system=/usr/bin/python3.11, exe=/tmp/test/.venv/bin/python, platform=linux, version='3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:65]
py311: 8801 I create virtual environment via CPython3Posix(dest=/tmp/test/.tox/py311, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:48]
py311: 8802 D create folder /tmp/test/.tox/py311/bin [virtualenv/util/path/_sync.py:9]
py311: 8802 D create folder /tmp/test/.tox/py311/lib/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py311: 8802 D create folder /tmp/test/.tox/py311/lib64/python3.11/site-packages [virtualenv/util/path/_sync.py:9]
py311: 8802 D write /tmp/test/.tox/py311/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py311: 8802 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py311: 8802 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py311: 8802 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py311: 8802 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py311: 8802 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py311: 8802 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py311: 8802 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py311: 8803 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py311: 8803 D symlink /usr/bin/python3.11 to /tmp/test/.tox/py311/bin/python [virtualenv/util/path/_sync.py:28]
py311: 8803 D create virtualenv import hook file /tmp/test/.tox/py311/lib/python3.11/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:89]
py311: 8803 D create /tmp/test/.tox/py311/lib/python3.11/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:92]
py311: 8804 D ============================== target debug ============================== [virtualenv/run/session.py:50]
py311: 8804 D debug via /tmp/test/.tox/py311/bin/python /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:197]
py311: 8804 D {
  "sys": {
    "executable": "/tmp/test/.tox/py311/bin/python",
    "_base_executable": "/usr/bin/python3.11",
    "prefix": "/tmp/test/.tox/py311",
    "base_prefix": "/usr",
    "real_prefix": null,
    "exec_prefix": "/tmp/test/.tox/py311",
    "base_exec_prefix": "/usr",
    "path": [
      "/usr/lib64/python311.zip",
      "/usr/lib64/python3.11",
      "/usr/lib64/python3.11/lib-dynload",
      "/tmp/test/.tox/py311/lib64/python3.11/site-packages",
      "/tmp/test/.tox/py311/lib/python3.11/site-packages"
    ],
    "meta_path": [
      "<class '_virtualenv._Finder'>",
      "<class '_frozen_importlib.BuiltinImporter'>",
      "<class '_frozen_importlib.FrozenImporter'>",
      "<class '_frozen_importlib_external.PathFinder'>"
    ],
    "fs_encoding": "utf-8",
    "io_encoding": "utf-8"
  },
  "version": "3.11.0 (main, Oct 24 2022, 00:00:00) [GCC 12.2.1 20220819 (Red Hat 12.2.1-2)]",
  "makefile_filename": "/usr/lib64/python3.11/config-3.11-x86_64-linux-gnu/Makefile",
  "os": "<module 'os' (frozen)>",
  "site": "<module 'site' (frozen)>",
  "datetime": "<module 'datetime' from '/usr/lib64/python3.11/datetime.py'>",
  "math": "<module 'math' from '/usr/lib64/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so'>",
  "json": "<module 'json' from '/usr/lib64/python3.11/json/__init__.py'>"
} [virtualenv/run/session.py:51]
py311: 8827 I add seed packages via FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stephenfin/.local/share/virtualenv) [virtualenv/run/session.py:55]
py311: 8828 D install pip from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/pip-22.3.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py311: 8829 D install setuptools from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/setuptools-65.6.3-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py311: 8829 D install wheel from wheel /tmp/test/.venv/lib/python3.11/site-packages/virtualenv/seed/wheels/embed/wheel-0.38.4-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:47]
py311: 8830 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.virtualenv to /tmp/test/.tox/py311/lib/python3.11/site-packages/pip-22.3.1.virtualenv [virtualenv/util/path/_sync.py:36]
py311: 8831 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip to /tmp/test/.tox/py311/lib/python3.11/site-packages/pip [virtualenv/util/path/_sync.py:36]
py311: 8831 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/_distutils_hack to /tmp/test/.tox/py311/lib/python3.11/site-packages/_distutils_hack [virtualenv/util/path/_sync.py:36]
py311: 8831 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.virtualenv to /tmp/test/.tox/py311/lib/python3.11/site-packages/wheel-0.38.4.virtualenv [virtualenv/util/path/_sync.py:36]
py311: 8833 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel-0.38.4.dist-info to /tmp/test/.tox/py311/lib/python3.11/site-packages/wheel-0.38.4.dist-info [virtualenv/util/path/_sync.py:36]
py311: 8834 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools to /tmp/test/.tox/py311/lib/python3.11/site-packages/setuptools [virtualenv/util/path/_sync.py:36]
py311: 8837 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/wheel-0.38.4-py3-none-any/wheel to /tmp/test/.tox/py311/lib/python3.11/site-packages/wheel [virtualenv/util/path/_sync.py:36]
py311: 8849 D generated console scripts wheel-3.11 wheel3.11 wheel3 wheel [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py311: 8913 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.dist-info to /tmp/test/.tox/py311/lib/python3.11/site-packages/setuptools-65.6.3.dist-info [virtualenv/util/path/_sync.py:36]
py311: 8915 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/pkg_resources to /tmp/test/.tox/py311/lib/python3.11/site-packages/pkg_resources [virtualenv/util/path/_sync.py:36]
py311: 8934 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/setuptools-65.6.3.virtualenv to /tmp/test/.tox/py311/lib/python3.11/site-packages/setuptools-65.6.3.virtualenv [virtualenv/util/path/_sync.py:36]
py311: 8935 D copy /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/setuptools-65.6.3-py3-none-any/distutils-precedence.pth to /tmp/test/.tox/py311/lib/python3.11/site-packages/distutils-precedence.pth [virtualenv/util/path/_sync.py:36]
py311: 8936 D generated console scripts  [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py311: 9021 D copy directory /home/stephenfin/.local/share/virtualenv/wheel/3.11/image/1/CopyPipInstall/pip-22.3.1-py3-none-any/pip-22.3.1.dist-info to /tmp/test/.tox/py311/lib/python3.11/site-packages/pip-22.3.1.dist-info [virtualenv/util/path/_sync.py:36]
py311: 9024 D generated console scripts pip3 pip-3.11 pip3.11 pip [virtualenv/seed/embed/via_app_data/pip_install/base.py:41]
py311: 9024 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:61]
py311: 9026 D write /tmp/test/.tox/py311/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:30]
py311: 9026 D 	home = /usr/bin [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	implementation = CPython [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	version_info = 3.11.0.final.0 [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	virtualenv = 20.17.1 [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	base-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	base-exec-prefix = /usr [virtualenv/create/pyenv_cfg.py:34]
py311: 9026 D 	base-executable = /usr/bin/python3.11 [virtualenv/create/pyenv_cfg.py:34]
py311: 9028 W install_deps> python -I -m pip install -r /tmp/test/test-requirements.txt [tox/tox_env/api.py:417]
Collecting pytest
  Using cached pytest-7.2.0-py3-none-any.whl (316 kB)
Collecting attrs>=19.2.0
  Using cached attrs-22.1.0-py2.py3-none-any.whl (58 kB)
Collecting iniconfig
  Using cached iniconfig-1.1.1-py2.py3-none-any.whl (5.0 kB)
Collecting packaging
  Using cached packaging-22.0-py3-none-any.whl (42 kB)
Collecting pluggy<2.0,>=0.12
  Using cached pluggy-1.0.0-py2.py3-none-any.whl (13 kB)
Installing collected packages: iniconfig, pluggy, packaging, attrs, pytest
Successfully installed attrs-22.1.0 iniconfig-1.1.1 packaging-22.0 pluggy-1.0.0 pytest-7.2.0
py311: 10643 I exit 0 (1.61 seconds) /tmp/test> python -I -m pip install -r /tmp/test/test-requirements.txt pid=180884 [tox/execute/api.py:275]
.pkg: 10644 W build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
py311: 10645 E internal error [tox/session/cmd/run/single.py:57]
Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 45, in _evaluate
    tox_env.setup()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/api.py", line 243, in setup
    self._setup_with_env()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 149, in _setup_with_env
    self._setup_pkg()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 172, in _setup_pkg
    self._packages = self._build_packages()
                     ^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/runner.py", line 110, in _build_packages
    packages = package_env.perform_packaging(self.conf)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 198, in perform_packaging
    sdist = self._frontend.build_sdist(sdist_directory=self.pkg_dir).sdist
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/cachetools/__init__.py", line 641, in wrapper
    v = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 386, in build_sdist
    basename, out, err = self._send(
                         ^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 333, in _send
    return super()._send(cmd, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 489, in _send
    with self._send_msg(cmd, result_file, msg) as status:
  File "/usr/lib64/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 352, in _send_msg
    execute_status.write_stdin(f"{msg}{os.linesep}")
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/execute/local_sub_process/__init__.py", line 115, in write_stdin
    stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
.pkg: 10646 W _exit> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]
.pkg: 10647 W error while trying to close <_io.BufferedWriter name=6> with BrokenPipeError(32, 'Broken pipe') [tox/execute/local_sub_process/__init__.py:239]
ROOT: 10647 E Internal Error [tox/session/cmd/run/common.py:321]
Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/common.py", line 296, in _queue_and_wait
    result = future.result()
             ^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/usr/lib64/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/common.py", line 273, in _run
    return run_one(tox_env, options.parsed.no_test, suspend_display=live is False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 34, in run_one
    skipped, code, outcomes = _evaluate(tox_env, no_test)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 60, in _evaluate
    tox_env.teardown()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/api.py", line 258, in teardown
    self._teardown()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 88, in _teardown
    self._call_pkg_envs("teardown_env", self.conf)
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 122, in _call_pkg_envs
    getattr(package_env, method_name)(*args)
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 103, in teardown_env
    self._teardown()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 164, in _teardown
    self._frontend._send("_exit")  # try first on amicable shutdown
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 333, in _send
    return super()._send(cmd, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 489, in _send
    with self._send_msg(cmd, result_file, msg) as status:
  File "/usr/lib64/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 352, in _send_msg
    execute_status.write_stdin(f"{msg}{os.linesep}")
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/execute/local_sub_process/__init__.py", line 115, in write_stdin
    stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
Exception in thread tox-interrupt:
Traceback (most recent call last):
  File "/usr/lib64/python3.11/threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "/usr/lib64/python3.11/threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/common.py", line 296, in _queue_and_wait
    result = future.result()
             ^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/usr/lib64/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/common.py", line 273, in _run
    return run_one(tox_env, options.parsed.no_test, suspend_display=live is False)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 34, in run_one
    skipped, code, outcomes = _evaluate(tox_env, no_test)
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/single.py", line 60, in _evaluate
    tox_env.teardown()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/api.py", line 258, in teardown
    self._teardown()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 88, in _teardown
    self._call_pkg_envs("teardown_env", self.conf)
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/runner.py", line 122, in _call_pkg_envs
    getattr(package_env, method_name)(*args)
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 103, in teardown_env
    self._teardown()
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/package.py", line 47, in _func
    return meth(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 164, in _teardown
    self._frontend._send("_exit")  # try first on amicable shutdown
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 333, in _send
    return super()._send(cmd, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_frontend.py", line 489, in _send
    with self._send_msg(cmd, result_file, msg) as status:
  File "/usr/lib64/python3.11/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/tox_env/python/virtual_env/package/pyproject.py", line 352, in _send_msg
    execute_status.write_stdin(f"{msg}{os.linesep}")
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/execute/local_sub_process/__init__.py", line 115, in write_stdin
    stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe
Traceback (most recent call last):
  File "/tmp/test/.venv/bin/tox", line 8, in <module>
    sys.exit(run())
             ^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/run.py", line 19, in run
    result = main(sys.argv[1:] if args is None else args)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/run.py", line 45, in main
    result = handler(state)
             ^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/legacy.py", line 107, in legacy
    return run_sequential(state)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/sequential.py", line 22, in run_sequential
    return execute(state, max_workers=1, has_spinner=False, live=True)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/tox/session/cmd/run/common.py", line 226, in execute
    ordered_results.append(name_to_run[env])
                           ~~~~~~~~~~~^^^^^
KeyError: 'py311'

Minimal example

You can find a minimal reproducer here.

The full output given when running tox -e py311 is:

❯ tox -e py311
py311: install_deps> python -I -m pip install -r /tmp/test/test-requirements.txt
.pkg: install_requires> python -I -m pip install 'setuptools>=40.8.0' wheel
.pkg: _optional_hooks> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: get_requires_for_build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: install_requires_for_build_sdist> python -I -m pip install pbr
.pkg: prepare_metadata_for_build_wheel> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: build_sdist> python /tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__
py311: packaging backend failed (code=error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.), with SystemExit: error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead.
  warnings.warn(msg, warning_class)
Traceback (most recent call last):
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 201, in run_commands
    dist.run_commands()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
    self.run_command(cmd)
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/dist.py", line 1204, in run_command
    self.set_defaults()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 340, in __call__
    self._analyse_package_layout(ignore_ext_modules)
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 373, in _analyse_package_layout
    or self._analyse_flat_layout()
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 430, in _analyse_flat_layout
    return self._analyse_flat_packages() or self._analyse_flat_modules()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 436, in _analyse_flat_packages
    self._ensure_no_accidental_inclusion(top_level, "packages")
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/discovery.py", line 466, in _ensure_no_accidental_inclusion
    raise PackageDiscoveryError(cleandoc(msg))
setuptools.errors.PackageDiscoveryError: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py", line 90, in run
    outcome = backend_proxy(parsed_message["cmd"], **parsed_message["kwargs"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.venv/lib/python3.11/site-packages/pyproject_api/_backend.py", line 32, in __call__
    return getattr(on_object, name)(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 417, in build_sdist
    return self._build_with_temp_dir(['sdist', '--formats', 'gztar'],
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 398, in _build_with_temp_dir
    self.run_setup()
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 485, in run_setup
    self).run_setup(setup_script=setup_script)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/build_meta.py", line 335, in run_setup
    exec(code, locals())
  File "<string>", line 5, in <module>
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/__init__.py", line 87, in setup
    return distutils.core.setup(**attrs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 185, in setup
    return run_commands(dist)
           ^^^^^^^^^^^^^^^^^^
  File "/tmp/test/.tox/.pkg/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 215, in run_commands
    raise SystemExit("error: " + str(msg))
SystemExit: error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
error: Multiple top-level packages discovered in a flat-layout: ['man', 'foo'].

To avoid accidental inclusion of unwanted files or directories,
setuptools will not proceed with this build.

If you are trying to create a single distribution with multiple packages
on purpose, you should not rely on automatic discovery.
Instead, consider the following options:

1. set up custom discovery (`find` directive with `include` or `exclude`)
2. use a `src-layout`
3. explicitly set `py_modules` or `packages` with a list of names

To find more information, look for "package discovery" on setuptools docs.
Backend: run command build_sdist with args {'sdist_directory': '/tmp/test/.tox/.pkg/dist', 'config_settings': None}
Backend: Wrote response {'code': 'error: Multiple top-level packages discovered in a flat-layout: [\'man\', \'foo\'].\n\nTo avoid accidental inclusion of unwanted files or directories,\nsetuptools will not proceed with this build.\n\nIf you are trying to create a single distribution with multiple packages\non purpose, you should not rely on automatic discovery.\nInstead, consider the following options:\n\n1. set up custom discovery (`find` directive with `include` or `exclude`)\n2. use a `src-layout`\n3. explicitly set `py_modules` or `packages` with a list of names\n\nTo find more information, look for "package discovery" on setuptools docs.', 'exc_type': 'SystemExit', 'exc_msg': 'error: Multiple top-level packages discovered in a flat-layout: [\'man\', \'foo\'].\n\nTo avoid accidental inclusion of unwanted files or directories,\nsetuptools will not proceed with this build.\n\nIf you are trying to create a single distribution with multiple packages\non purpose, you should not rely on automatic discovery.\nInstead, consider the following options:\n\n1. set up custom discovery (`find` directive with `include` or `exclude`)\n2. use a `src-layout`\n3. explicitly set `py_modules` or `packages` with a list of names\n\nTo find more information, look for "package discovery" on setuptools docs.'} to /tmp/pep517_build_sdist-eq__ngmi.json
@gaborbernat
Copy link
Member

Your package seems to be violating https://peps.python.org/pep-0518. No, you cannot use setup_requires https://github.com/stephenfin/tox-issue-2717/blob/main/setup.py#L6 to specify your dependencies; it must be within pyproject.toml, see https://docs.openstack.org/pbr/latest/user/using.html

@stephenfin
Copy link
Contributor Author

stephenfin commented Dec 14, 2022

Hi @gaborbernat, I'd already tested this but didn't push it as I thought it would confuse matters. I've now pushed a follow-up that configures the build-time dependencies but the exact same thing happens.

I've contributed to tox before and I'm happy to help here but I'll likely need some guidance and I'd like to make sure this isn't a dupe of an existing issue.

@stephenfin
Copy link
Contributor Author

Also, as an aside, I don't think the pyproject.toml file should be necessary since pbr is an extension of setuptools and PEP-518 explicitly says:

Because the use of setuptools and wheel are so expansive in the community at the moment, build tools are expected to use the example configuration file above as their default semantics when a pyproject.toml file is not present.

Given tox is defaulting to calling setuptools, which can read setup_requires, I think I've done enough for now. This would obviously change if setuptools dropped support for setup_requires in the future but that hasn't happened yet.

@gaborbernat gaborbernat reopened this Dec 14, 2022
@gaborbernat
Copy link
Member

PR welcome 👍

I've contributed to tox before and I'm happy to help here but I'll likely need some guidance and I'd like to make sure this isn't a dupe of an existing issue.

Can't really guide beyond debug and see where and how breaks 👍

@gaborbernat gaborbernat added bug:minor does not affect many people or has no big impact help:wanted Issues that have been acknowledged, a solution determined and a PR might likely be accepted. labels Dec 14, 2022
@gaborbernat gaborbernat added this to the 4.0.x milestone Dec 14, 2022
@gaborbernat
Copy link
Member

This is not truly just a pbr issue because see #2567, other pbr projects do pass. So must be something else too at play.

@stephenfin
Copy link
Contributor Author

stephenfin commented Dec 14, 2022

Okay, so I've narrowed the hanging issue down to this line:

self._frontend._send("_exit") # try first on amicable shutdown

If I comment that out, things pass successfully. That's a bit dumb though since I suspect the "amicable shutdown" is desirable. The bigger issue is why is being called. The executor should be reported as dead. If I slap an import time; time.sleep(60) in there and then run it again, I see that the child process has already died before we get to sending that message, which means there's nothing there to respond to it.

stephen+  270365  132  0.1 846628 34548 pts/5    Sl+  23:19   0:06 /tmp/test/.venv/bin/python /tmp/test/.venv/bin/tox -vv -e py311
stephen+  270371 11.2  0.0      0     0 pts/5    Z+   23:19   0:00 [python] <defunct>

This suggests to me that the executor.is_alive check isn't sufficient to pick up zombie processes. I'm going to guess there is data sitting in a pipe somewhere that means subprocess can't kill the thing...

@cboylan
Copy link

cboylan commented Dec 15, 2022

I've run into this independently and done a bit of digging before I saw this issue and thought I would share a bit of what I've learned.

Editing setup.cfg to include:

[options]
packages = find:

fixes the problem. Documentation for this is at https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#custom-discovery.

What is weird is that the build utility does not need this. I can run python -m build --sdist /path/to/repo without editing setup.cfg and an sdist tarball is produced without complaint. It looks like tox has an independent implementation of PEP517/518 things here: https://github.com/tox-dev/pyproject-api/ and the implementations must differ in some key way.

Another thing I notice is that when you add the packages = find: content to setup.cfg the sdist built by tox has the wrong version. It is set to 0.0.0 instead of what PBR should be discovering. This problem does not occur when running the build command above. It seems there must be some important differences between these implementations that cause this. Determining what they are is likely to lead to the fix.

@cboylan
Copy link

cboylan commented Dec 15, 2022

One difference I've found is that build via pep517 appears to fork a subprocess to run the setuptools.build_meta.__legacy__: https://github.com/pypa/pyproject-hooks/blob/v0.13.0/pep517/wrappers.py#L306-L313.

Tox via pyproject-api appears to call the backend with the flag with process reuse set to true:

.pkg: 19889 W build_sdist> python /home/foo/.local/tox/lib/python3.10/site-packages/pyproject_api/_backend.py True setuptools.build_meta __legacy__ [tox/tox_env/api.py:417]

Perhaps this looping is the source of not exiting?

For the package content lookup and version behavior differences it is less clear to me how the behavior is changing. Perhaps setuptools.build_meta.__legacy__ is side effecting somehow in ways that subsequent requests to the BackendProxy fail? Perhaps the solution to both issues is to call the backend proxy with the reuse flag set to false to avoid this problem?

@cboylan
Copy link

cboylan commented Dec 15, 2022

Okay, so I've narrowed the hanging issue down to this line:

self._frontend._send("_exit") # try first on amicable shutdown

If I comment that out, things pass successfully. That's a bit dumb though since I suspect the "amicable shutdown" is desirable. The bigger issue is why is being called. The executor should be reported as dead. If I slap an import time; time.sleep(60) in there and then run it again, I see that the child process has already died before we get to sending that message, which means there's nothing there to respond to it.

stephen+  270365  132  0.1 846628 34548 pts/5    Sl+  23:19   0:06 /tmp/test/.venv/bin/python /tmp/test/.venv/bin/tox -vv -e py311
stephen+  270371 11.2  0.0      0     0 pts/5    Z+   23:19   0:00 [python] <defunct>

This suggests to me that the executor.is_alive check isn't sufficient to pick up zombie processes. I'm going to guess there is data sitting in a pipe somewhere that means subprocess can't kill the thing...

This seems to happen because setuptools is causing SystemExit to occur within the shared backend process. This causes the backend process to crash before it can receive the _exit command from the frontend. After comparison to the build tool I'm beginning to think that all of the setuptools.build_meta.__legacy__ calls should be isolated into their own processes. Then the BackendProxy can continue to manage things even if setuptools crashes.

Additionally, we'll avoid any unexpected side effecting that happens by running these build_meta.__legacy__ commands:

  1. get_requires_for_build_editable
  2. get_requires_for_build_sdist
  3. build_wheel
  4. build_sdist

in order within the same process. The expectation from build (and when you run setup.py explicitly) is that these happen as distinct processes with fresh memory spaces.

@gaborbernat
Copy link
Member

The expectation from build (and when you run setup.py explicitly) is that these happen as distinct processes with fresh memory spaces.

What makes you think this is true? build or setuptools does not govern how things need to be done. We have a standard in PEP-517 here https://peps.python.org/pep-0517/#build-environment, which states:

Frontends should call each hook in a fresh subprocess, so that backends are free to change process global state (such as environment variables or the working directory).

Note the wording here; it says should and not must. So while using new processes is recommended, it's not mandated. Creating a fresh subprocess would significantly slow interaction with the build backend, so I'd prefer to fix this odd behavior of setuptools rather than change our subprocess reuse mechanism.

@cboylan
Copy link

cboylan commented Dec 16, 2022

The expectation from build (and when you run setup.py explicitly) is that these happen as distinct processes with fresh memory spaces.

What makes you think this is true? build or setuptools does not govern how things need to be done. We have a standard in PEP-517 here https://peps.python.org/pep-0517/#build-environment, which states:

I was primarily looking at how build does things as it is the canonical tool for this stuff, and it very explicitly forks a new process for each command here: https://github.com/pypa/pyproject-hooks/blob/v0.13.0/pep517/wrappers.py#L306-L313.

Frontends should call each hook in a fresh subprocess, so that backends are free to change process global state (such as environment variables or the working directory).

The pep explicitly calls out why this is desirable. Enabling backends to change process global state.

Note the wording here; it says should and not must. So while using new processes is recommended, it's not mandated. Creating a fresh subprocess would significantly slow interaction with the build backend, so I'd prefer to fix this odd behavior of setuptools rather than change our subprocess reuse mechanism.

I'm not sure if PEPs follow the RFC definitions for these words. Its possible that this is an oversight in the PEP? In particular they have explicitly called out the reason for doing that and tox seems to be running into that problem. To me a tool like tox should be forgiving because you don't know how old the existing code bases are that may be trying to use the tool. One option may be only fall back to the extra processes when using the legacy system? Though I guess the PEP gives potential freedom for non legacy backends to also modify process global state.

I've made a hacked up patch to tox to which does seem to get this working without any changes to the host project. I think this confirms that the issue is in reusing global process state.

diff --git a/src/tox/execute/pep517_backend.py b/src/tox/execute/pep517_backend.py
index 2f8ffc6d..e33fc754 100644
--- a/src/tox/execute/pep517_backend.py
+++ b/src/tox/execute/pep517_backend.py
@@ -42,7 +42,7 @@ class LocalSubProcessPep517Executor(Execute):
     def local_execute(self, options: ExecuteOptions) -> tuple[LocalSubProcessExecuteInstance, ExecuteStatus]:
         if self._exc is not None:
             raise self._exc
-        if self._local_execute is None:
+        if True:
             request = ExecuteRequest(cmd=self.cmd, cwd=self.cwd, env=self.env, stdin=StdinSource.API, run_id="pep517")
 
             instance = LocalSubProcessExecuteInstance(
diff --git a/src/tox/tox_env/python/virtual_env/package/pyproject.py b/src/tox/tox_env/python/virtual_env/package/pyproject.py
index 1cb31c6f..5d8eb445 100644
--- a/src/tox/tox_env/python/virtual_env/package/pyproject.py
+++ b/src/tox/tox_env/python/virtual_env/package/pyproject.py
@@ -11,7 +11,7 @@ from typing import Any, Dict, Generator, Iterator, NoReturn, Optional, Sequence,
 
 from cachetools import cached
 from packaging.requirements import Requirement
-from pyproject_api import BackendFailed, CmdStatus, Frontend
+from pyproject_api import BackendFailed, CmdStatus, SubprocessFrontend
 
 from tox.config.sets import EnvConfigSet
 from tox.execute.api import ExecuteStatus
@@ -306,9 +306,10 @@ class Pep517VirtualEnvPackager(PythonPackageToxEnv, VirtualEnv):
         return self._frontend.requires
 
 
-class Pep517VirtualEnvFrontend(Frontend):
+class Pep517VirtualEnvFrontend(SubprocessFrontend):
     def __init__(self, root: Path, env: Pep517VirtualEnvPackager) -> None:
-        super().__init__(*Frontend.create_args_from_folder(root))
+        args = SubprocessFrontend.create_args_from_folder(root)[:-1]
+        super().__init__(*args)
         self._tox_env = env
         self._backend_executor_: LocalSubProcessPep517Executor | None = None
         into: dict[str, Any] = {}

I know this isn't mergeable as is, I just wanted to see if changing the forking behavior addressed the underling problem.

@gaborbernat
Copy link
Member

I was primarily looking at how build does things as it is the canonical tool for this stuff, and it very explicitly forks a new process for each command here: pypa/pyproject-hooks@v0.13.0/pep517/wrappers.py#L306-L313.

Doesn't matter. build is just one implementation of PEP-517, it's not authoritative. The spec is authoritative.

The pep explicitly calls out why this is desirable. Enabling backends to change process global state.

Desirable != required.

I'm not sure if PEPs follow the RFC definitions for these words.

It does. We've had this discussion in the past within PyPA.

Its possible that this is an oversight in the PEP? I

Nope, we could not get a consensus on requiring this, so we settled on encouragement but not a requirement.

To me, a tool like tox should be forgiving because you don't know how old the existing code bases may be trying to use the tool.

People also expect it to be fast. One of their major complaints about it is that it's slow. We worked hard on improving this, so I'm not willing to compromise. I'd be happy to accept a PR, though, that configures this behavior for those backends requiring this fresh subprocess behavior. PR for that is welcome.

@gaborbernat gaborbernat changed the title Use of 'pbr' results in "Multiple top-level packages" error and "unkillable" process Allow backends to be called in fresh subprocesses Dec 16, 2022
@gaborbernat gaborbernat added feature:new something does not exist yet, but should and removed bug:minor does not affect many people or has no big impact labels Dec 16, 2022
@cboylan
Copy link

cboylan commented Dec 16, 2022

I'd be happy to accept a PR, though, that configures this behavior for those backends requiring this fresh subprocess behavior. PR for that is welcome.

Do you think this should happen automatically when falling into the setuptools.build_meta.__legacy__ path under the assumption that legacy setuptools is most likely to hit this, or would it be preferable to add a new top level tox configuration flag that configures the behavior explicitly?

@gaborbernat
Copy link
Member

Do you think this should happen automatically when falling into the setuptools.build_meta.__legacy__ path under the assumption that legacy setuptools is most likely to hit this, or would it be preferable to add a new top level tox configuration flag that configures the behavior explicitly?

It should be explicitly configurable. However, the default should be False unless the backend is setuptools.build_meta.__legacy__ when it should be True.

@gaborbernat
Copy link
Member

jdmulloy added a commit to openedx-unsupported/tubular that referenced this issue Dec 21, 2022
Tox 4.x broke our testing and they don't seem to care about backwards
compatibility
tox-dev/tox#2712
jdmulloy added a commit to openedx-unsupported/tubular that referenced this issue Dec 21, 2022
Tox 4 hangs with this repo and I don't know how to fix it. I don't have
the time or patience to figure it out. Someone should make this repo
compatible.
tox-dev/tox#2712
@stephenfin
Copy link
Contributor Author

I actually think the hanging is a design issue with pyproject_api and calling backends in fresh subprocesses will merely disguise this issue. Please see tox-dev/pyproject-api#39 for more info (and tox-dev/pyproject-api#40 for a proposed fix).

Still trying to figure out how to resolve the actual underlying issue with pbr, which simply highlighted this hanging issue.

@stephenfin
Copy link
Contributor Author

I think I have sussed out the pbr issue. It appears to be a side-effect of running all commands in the same process and pbr's use of a global variable. I've proposed a fix to remove the use of this global. With that fix and tox-dev/pyproject-api#39 in place, we should be looking much better.

That brings us on to what to do with this. It feels like adding a knob to run commands in separate subprocesses could be helpful for debugging tox-backend incompatibilities (which seem rather likely - at least for now - since tox is doing things "weirdly" compared to build) but I don't know how much use it would be outside of this and therefore whether it's worth exposing a new top-level CLI option or tox.ini flag for this. Would appreciate others' thoughts on the matter.

@stephenfin
Copy link
Contributor Author

stephenfin commented Jan 3, 2023

Also, a random point for observers: tox is calling the prepare_metadata_for_build_wheel command even though it doesn't build wheels.

❯ tox -e py38
.pkg: _optional_hooks> python /dev/pyproject-api/src/pyproject_api/_backend.py True pbr.build
.pkg: get_requires_for_build_sdist> python /dev/pyproject-api/src/pyproject_api/_backend.py True pbr.build
.pkg: prepare_metadata_for_build_wheel> python /dev/pyproject-api/src/pyproject_api/_backend.py True pbr.build
.pkg: build_sdist> python /dev/pyproject-api/src/pyproject_api/_backend.py True pbr.build
py38: install_package> python -I -m pip install --force-reinstall --no-deps /tmp/tox-issue-2717/.tox/.tmp/package/7/foo-0.0.1.dev5.tar.gz
.pkg: _exit> python /dev/src/pyproject_api/_backend.py True pbr.build
  py38: OK (3.12 seconds)
  congratulations :) (3.16 seconds)

(or, for projects without a pyproject.toml file)

❯ tox -e py38
.pkg: _optional_hooks> python /dev/pyproject-api/src/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: get_requires_for_build_sdist> python /dev/pyproject-api/src/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: prepare_metadata_for_build_wheel> python /dev/pyproject-api/src/pyproject_api/_backend.py True setuptools.build_meta __legacy__
.pkg: build_sdist> python /dev/pyproject-api/src/pyproject_api/_backend.py True setuptools.build_meta __legacy__
py38: install_package_deps> python -I -m pip install requests
py38: install_package> python -I -m pip install --force-reinstall --no-deps /tmp/tox-issue-2717/.tox/.tmp/package/8/foo-0.0.1.dev5.tar.gz
.pkg: _exit> python /dev/pyproject-api/src/pyproject_api/_backend.py True setuptools.build_meta __legacy__
  py38: OK (2.96 seconds)
  congratulations :) (2.99 seconds)

At first this seems odd and it's actually the combination of this call (which results in generation of a setuptools.dist.Distribution object) and the subsequent call to build_sdist (which also results in generation of a Distribution object) that highlights the global state bug in pbr I noted above. However, this call to prepare_metadata_for_build_wheel is intentional: tox is using it to watch for package dependency changes.

Just noting this in case anyone else was momentarily caught out by this 😄

@gaborbernat
Copy link
Member

You could switch your packaging to wheel from sdist, to save the need to call prepare_metadata_for_build_wheel+ build_sdist. Alternatively, we need those two.

openstack-mirroring pushed a commit to openstack/pbr that referenced this issue Jan 7, 2023
In change I1f2b4d34e587389f7e11b99d000e14477cf5091b, we attempted to
resolve an issue whereby using PBR as a PEP-517 backend could result in
recursion. We did this by setting 'dist.pbr' to 'None' but later
discovered this introduced a regression that prevented us from writing
the 'pbr.json' file into generated sdists. The fix for the regression,
change I407ae88ab8de4b61f94034b3d79a2ca7f7d79d16, stopped setting
'dist.pbr' to 'None' and instead set a global flag to indicate whether
we had already been called or not. Unfortunately it seems this fix is
also insufficent. As discussed in tox#2712 [1], tox v4 has implemented
its own implementation of PEP-517 - 'pyproject-api' [2] - and unlike
'build' this implementation optionally allows re-use of the backend
process for multiple PEP-517 commands. tox's 'Pep517VirtualEnvFrontend'
does just this. This means if we run multiple commands that require
generation of a 'Distribution' object - say,
'prepare_metadata_for_build_wheel' followed by 'build_sdist' - anything
but the first step will not result in proper population of said
'Distribution' objects.

The solution to this issue is simple: per $subject, instead of setting
our recursion-detection canary at the module level, set it at the
Distribution level.

[1] tox-dev/tox#2712
[2] github.com/tox-dev/pyproject-api/

Change-Id: I67909d732a74550fbcd7c06a9e2f4ac88c063444
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
openstack-mirroring pushed a commit to openstack/openstack that referenced this issue Jan 7, 2023
* Update pbr from branch 'master'
  to 1ca77814931463993b15fbbb13a26e027a485cd3
  - Merge "Tie recursion calls to Dist object, not module"
  - Tie recursion calls to Dist object, not module
    
    In change I1f2b4d34e587389f7e11b99d000e14477cf5091b, we attempted to
    resolve an issue whereby using PBR as a PEP-517 backend could result in
    recursion. We did this by setting 'dist.pbr' to 'None' but later
    discovered this introduced a regression that prevented us from writing
    the 'pbr.json' file into generated sdists. The fix for the regression,
    change I407ae88ab8de4b61f94034b3d79a2ca7f7d79d16, stopped setting
    'dist.pbr' to 'None' and instead set a global flag to indicate whether
    we had already been called or not. Unfortunately it seems this fix is
    also insufficent. As discussed in tox#2712 [1], tox v4 has implemented
    its own implementation of PEP-517 - 'pyproject-api' [2] - and unlike
    'build' this implementation optionally allows re-use of the backend
    process for multiple PEP-517 commands. tox's 'Pep517VirtualEnvFrontend'
    does just this. This means if we run multiple commands that require
    generation of a 'Distribution' object - say,
    'prepare_metadata_for_build_wheel' followed by 'build_sdist' - anything
    but the first step will not result in proper population of said
    'Distribution' objects.
    
    The solution to this issue is simple: per $subject, instead of setting
    our recursion-detection canary at the module level, set it at the
    Distribution level.
    
    [1] tox-dev/tox#2712
    [2] github.com/tox-dev/pyproject-api/
    
    Change-Id: I67909d732a74550fbcd7c06a9e2f4ac88c063444
    Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
mtyaka pushed a commit to mtyaka/tubular that referenced this issue May 25, 2023
Tox 4 hangs with this repo and I don't know how to fix it. I don't have
the time or patience to figure it out. Someone should make this repo
compatible.
tox-dev/tox#2712
@gaborbernat gaborbernat removed this from the P-0 milestone Jun 17, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature:new something does not exist yet, but should help:wanted Issues that have been acknowledged, a solution determined and a PR might likely be accepted.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants