[build-system] build-backend = "hatchling.build" requires = [ "hatch-vcs>=0.5", "hatchling>=1.28", ] [project] name = "tox" description = "tox is a generic virtualenv management and test command line tool" readme.content-type = "text/markdown" readme.file = "README.md" keywords = [ "environments", "isolated", "testing", "virtual", ] license = "MIT" maintainers = [ { name = "Anthony Sottile", email = "asottile@umich.edu" }, { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" }, { name = "Jürgen Gmach", email = "juergen.gmach@googlemail.com" }, { name = "Oliver Bestwalter", email = "oliver@bestwalter.de" }, ] authors = [ { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" }, ] requires-python = ">=3.10" classifiers = [ "Development Status :: 5 - Production/Stable", "Framework :: tox", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Testing", "Topic :: Utilities", ] dynamic = [ "version", ] dependencies = [ "cachetools>=7.0.1", "chardet>=5.2", "colorama>=0.4.6", "filelock>=3.24", "packaging>=26", "platformdirs>=4.9.1", "pluggy>=1.6", "pyproject-api>=1.10", "tomli>=2.4; python_version<'3.11'", "typing-extensions>=4.15; python_version<'3.11'", "virtualenv>=20.36.1", ] optional-dependencies.completion = [ "argcomplete>=3.6.3", ] urls.Documentation = "https://tox.wiki" urls.Homepage = "http://tox.readthedocs.org" urls."Release Notes" = "https://tox.wiki/en/latest/changelog.html" urls.Source = "https://github.com/tox-dev/tox" urls.Tracker = "https://github.com/tox-dev/tox/issues" scripts.tox = "tox.run:run" [dependency-groups] dev = [ { include-group = "docs" }, { include-group = "test" }, { include-group = "type" }, ] test = [ "build[virtualenv]>=1.4", "covdefaults>=2.3", "coverage>=7.13.4", "detect-test-pollution>=1.2", "distlib>=0.4", "flaky>=3.8.1", "hatch-vcs>=0.5", "hatchling>=1.28", "pdm-backend>=2.4.7", "psutil>=7.2.2", "pytest>=9.0.2", "pytest-cov>=7", "pytest-mock>=3.15.1", "pytest-timeout>=2.4", "pytest-xdist>=3.8", "re-assert>=1.1", "setuptools>=80.10.2", "time-machine>=3.2; implementation_name!='pypy'", "wheel>=0.46.3", ] type = [ "ty>=0.0.17", { include-group = "docs" }, { include-group = "release" }, { include-group = "test" }, ] docs = [ "furo>=2025.12.19", "sphinx>=9.1", "sphinx-argparse-cli>=1.20.1", "sphinx-autodoc-typehints>=3.6.2", "sphinx-copybutton>=0.5.2", "sphinx-inline-tabs>=2025.12.21.14", "sphinx-issues>=5.0.1", "sphinxcontrib-mermaid>=2", "sphinxcontrib-towncrier>=0.2.1a0", "towncrier>=25.8", "truststore>=0.10.4", ] type-min = [ "ty>=0.0.17", { include-group = "test" }, ] fix = [ "pre-commit-uv>=4.2", ] pkg-meta = [ "check-wheel-contents>=0.6.3", "twine>=6.2", "uv>=0.10.2", ] release = [ "gitpython>=3.1.46", "packaging>=26", "towncrier>=25.8", ] [tool.hatch] build.dev-mode-dirs = [ "src", ] build.hooks.vcs.version-file = "src/tox/version.py" build.targets.sdist.include = [ "/src", "/tests", "/tox.toml", ] build.targets.wheel.shared-data = { "docs/man" = "share/man/man1" } version.source = "vcs" [tool.ruff] line-length = 120 format.preview = true format.docstring-code-line-length = 100 format.docstring-code-format = true lint.select = [ "ALL", ] lint.ignore = [ "ANN401", # Dynamically typed expressions (typing.Any) are disallowed in `arg`" "COM812", # conflicts with formatter "CPY", # No copyright header "D", # ignore documentation for now "D203", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible "DOC201", # no restructuredtext support yet "DOC402", # no restructuredtext support yet "DOC501", # broken with sphinx docs "INP001", # no implicit namespaces here "ISC001", # conflicts with formatter "LOG015", # we require use of the root logger for reporting "PLR0914", ## Too many local variables "PLR0917", ## Too many positional arguments "RUF067", # `__init__` module should only contain docstrings and re-exports "S104", # Possible binding to all interfaces "S404", # Using subprocess is alright. "S603", # Using subprocess is alright. ] lint.per-file-ignores."tests/**/*.py" = [ "D", # don't care about documentation in tests "FBT", # don't care about booleans as positional arguments in tests "INP001", # no implicit namespace "PLR2004", # Magic value used in comparison, consider replacing with a constant variable "S101", # asserts allowed in tests "S603", # `subprocess` call: check for execution of untrusted input ] lint.isort = { known-first-party = [ "tox", "tests", ], required-imports = [ "from __future__ import annotations", ] } lint.preview = true [tool.codespell] builtin = "clear,usage,en-GB_to_en-US" write-changes = true skip = "*.svg" ignore-words = "ignore-words.txt" count = true [tool.pyproject-fmt] max_supported_python = "3.14" [tool.pytest.ini_options] testpaths = [ "tests", ] addopts = "--no-success-flaky-report" verbosity_assertions = 2 markers = [ "integration: marks tests as integration tests requiring external services (deselect with '-m \"not integration\"')", "slow: marks tests as slow (>1s) (deselect with '-m \"not slow\"')", ] filterwarnings = [ "error", "ignore:unclosed database in