Skip to content

Depency group implementation does not correctly normalize group names #3539

@robsdedude

Description

@robsdedude

Issue

Consider this pyproject.toml

[project] name = "foo" version = "0.0.1" [build-system] requires = ["setuptools >= 77.0.3"] build-backend = "setuptools.build_meta" [dependency-groups] test = [{include-group = "_pytest"}] _pytest = ["pytest"] [tool.tox] requires = ["tox>=4.26"] env_list = ["3.13"] [tool.tox.env.test] dependency_groups = ["test"] commands = [ ["unit", "python -m pytest -V"] ] 

When running pip install --group test, pytest is successfully installed.

However, when trying to run tox -f test, tox errors out saying

test: failed with dependency group '-pytest' not found
test: FAIL code 1 (0.04 seconds)
evaluation failed :( (0.11 seconds)

This leads me to believe that group names are not always normalized in tox. However, looking at PEP-735 which states "These keys must be valid non-normalized names, and must be normalized before comparisons." and also looking at the reference implementation, it seems they really should be.

Environment

Provide at least:

  • OS: Linux Mint 21
Output of pip list of the host Python, where tox is installed
Package Version ------------- ------- cachetools 6.0.0 chardet 5.2.0 colorama 0.4.6 distlib 0.3.9 filelock 3.18.0 packaging 25.0 pip 24.3.1 platformdirs 4.3.8 pluggy 1.6.0 pyproject-api 1.9.1 tox 4.26.0 virtualenv 20.31.2 

Output of running tox

Output of tox -rvv
test: 229 W remove tox env folder /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test [tox/tox_env/api.py:333] .pkg: 251 W remove tox env folder /home/xxxxxx/tmp/tox_dep_group_repro/.tox/.pkg [tox/tox_env/api.py:333] test: 257 I find interpreter for spec PythonSpec(path=/home/xxxxxx/tmp/tox_dep_group_repro/.venv/bin/python) [virtualenv/discovery/builtin.py:76] test: 258 D filesystem is case-sensitive [virtualenv/info.py:27] test: 259 D got python info of /home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13 from /home/xxxxxx/.local/share/virtualenv/py_info/2/3d3183e8132c1820530140783e1de1b790bfeadf628f4e809c913da0ec231843.json [virtualenv/app_data/via_disk_folder.py:132] test: 259 I proposed PythonInfo(spec=CPython3.13.1.final.0-64, system=/home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13, exe=/home/xxxxxx/tmp/tox_dep_group_repro/.venv/bin/python, platform=linux, version='3.13.1 (main, Jan 28 2025, 15:47:29) [GCC 11.4.0]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:83] test: 259 D accepted PythonInfo(spec=CPython3.13.1.final.0-64, system=/home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13, exe=/home/xxxxxx/tmp/tox_dep_group_repro/.venv/bin/python, platform=linux, version='3.13.1 (main, Jan 28 2025, 15:47:29) [GCC 11.4.0]', encoding_fs_io=utf-8-utf-8) [virtualenv/discovery/builtin.py:85] test: 287 I create virtual environment via CPython3Posix(dest=/home/xxxxxx/tmp/tox_dep_group_repro/.tox/test, clear=False, no_vcs_ignore=False, global=False) [virtualenv/run/session.py:52] test: 287 D create folder /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/bin [virtualenv/util/path/_sync.py:14] test: 287 D create folder /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/site-packages [virtualenv/util/path/_sync.py:14] test: 287 D write /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:35] test: 288 D	home = /home/xxxxxx/.pyenv/versions/3.13.1/bin [virtualenv/create/pyenv_cfg.py:40] test: 288 D	implementation = CPython [virtualenv/create/pyenv_cfg.py:40] test: 288 D	version_info = 3.13.1.final.0 [virtualenv/create/pyenv_cfg.py:40] test: 288 D	virtualenv = 20.31.2 [virtualenv/create/pyenv_cfg.py:40] test: 288 D	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:40] test: 288 D	base-prefix = /home/xxxxxx/.pyenv/versions/3.13.1 [virtualenv/create/pyenv_cfg.py:40] test: 288 D	base-exec-prefix = /home/xxxxxx/.pyenv/versions/3.13.1 [virtualenv/create/pyenv_cfg.py:40] test: 288 D	base-executable = /home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13 [virtualenv/create/pyenv_cfg.py:40] test: 288 D symlink /home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13 to /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/bin/python [virtualenv/util/path/_sync.py:34] test: 289 D create virtualenv import hook file /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/site-packages/_virtualenv.pth [virtualenv/create/via_global_ref/api.py:93] test: 289 D create /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/site-packages/_virtualenv.py [virtualenv/create/via_global_ref/api.py:96] test: 290 D ============================== target debug ============================== [virtualenv/run/session.py:54] test: 290 D debug via /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/bin/python /home/xxxxxx/tmp/tox_dep_group_repro/.venv/lib/python3.13/site-packages/virtualenv/create/debug.py [virtualenv/create/creator.py:215] test: 290 D {  "sys": {  "executable": "/home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/bin/python",  "_base_executable": "/home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13",  "prefix": "/home/xxxxxx/tmp/tox_dep_group_repro/.tox/test",  "base_prefix": "/home/xxxxxx/.pyenv/versions/3.13.1",  "real_prefix": null,  "exec_prefix": "/home/xxxxxx/tmp/tox_dep_group_repro/.tox/test",  "base_exec_prefix": "/home/xxxxxx/.pyenv/versions/3.13.1",  "path": [  "/home/xxxxxx/.pyenv/versions/3.13.1/lib/python313.zip",  "/home/xxxxxx/.pyenv/versions/3.13.1/lib/python3.13",  "/home/xxxxxx/.pyenv/versions/3.13.1/lib/python3.13/lib-dynload",  "/home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/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.13.1 (main, Jan 28 2025, 15:47:29) [GCC 11.4.0]",  "makefile_filename": "/home/xxxxxx/.pyenv/versions/3.13.1/lib/python3.13/config-3.13-x86_64-linux-gnu/Makefile",  "os": "<module 'os' (frozen)>",  "site": "<module 'site' (frozen)>",  "datetime": "<module 'datetime' from '/home/xxxxxx/.pyenv/versions/3.13.1/lib/python3.13/datetime.py'>",  "math": "<module 'math' from '/home/xxxxxx/.pyenv/versions/3.13.1/lib/python3.13/lib-dynload/math.cpython-313-x86_64-linux-gnu.so'>",  "json": "<module 'json' from '/home/xxxxxx/.pyenv/versions/3.13.1/lib/python3.13/json/__init__.py'>" } [virtualenv/run/session.py:55] test: 324 I add seed packages via FromAppData(download=False, pip=bundle, via=copy, app_data_dir=/home/xxxxxx/.local/share/virtualenv) [virtualenv/run/session.py:59] test: 325 D got embed update of distribution pip from /home/xxxxxx/.local/share/virtualenv/wheel/3.13/embed/3/pip.json [virtualenv/app_data/via_disk_folder.py:132] test: 328 D install pip from wheel /home/xxxxxx/tmp/tox_dep_group_repro/.venv/lib/python3.13/site-packages/virtualenv/seed/wheels/embed/pip-25.1.1-py3-none-any.whl via CopyPipInstall [virtualenv/seed/embed/via_app_data/via_app_data.py:51] test: 329 D copy directory /home/xxxxxx/.local/share/virtualenv/wheel/3.13/image/1/CopyPipInstall/pip-25.1.1-py3-none-any/pip to /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/site-packages/pip [virtualenv/util/path/_sync.py:42] test: 419 D copy /home/xxxxxx/.local/share/virtualenv/wheel/3.13/image/1/CopyPipInstall/pip-25.1.1-py3-none-any/pip-25.1.1.virtualenv to /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/site-packages/pip-25.1.1.virtualenv [virtualenv/util/path/_sync.py:42] test: 419 D copy directory /home/xxxxxx/.local/share/virtualenv/wheel/3.13/image/1/CopyPipInstall/pip-25.1.1-py3-none-any/pip-25.1.1.dist-info to /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/lib/python3.13/site-packages/pip-25.1.1.dist-info [virtualenv/util/path/_sync.py:42] test: 423 D generated console scripts pip-3.13 pip3.13 pip3 pip [virtualenv/seed/embed/via_app_data/pip_install/base.py:45] test: 423 I add activators for Bash, CShell, Fish, Nushell, PowerShell, Python [virtualenv/run/session.py:65] test: 427 D write /home/xxxxxx/tmp/tox_dep_group_repro/.tox/test/pyvenv.cfg [virtualenv/create/pyenv_cfg.py:35] test: 427 D	home = /home/xxxxxx/.pyenv/versions/3.13.1/bin [virtualenv/create/pyenv_cfg.py:40] test: 427 D	implementation = CPython [virtualenv/create/pyenv_cfg.py:40] test: 427 D	version_info = 3.13.1.final.0 [virtualenv/create/pyenv_cfg.py:40] test: 427 D	virtualenv = 20.31.2 [virtualenv/create/pyenv_cfg.py:40] test: 427 D	include-system-site-packages = false [virtualenv/create/pyenv_cfg.py:40] test: 427 D	base-prefix = /home/xxxxxx/.pyenv/versions/3.13.1 [virtualenv/create/pyenv_cfg.py:40] test: 427 D	base-exec-prefix = /home/xxxxxx/.pyenv/versions/3.13.1 [virtualenv/create/pyenv_cfg.py:40] test: 427 D	base-executable = /home/xxxxxx/.pyenv/versions/3.13.1/bin/python3.13 [virtualenv/create/pyenv_cfg.py:40] test: 428 E failed with dependency group '-pytest' not found [tox/session/cmd/run/single.py:57]  test: FAIL code 1 (0.20 seconds)  evaluation failed :( (0.28 seconds)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bug:minordoes not affect many people or has no big impact

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions