Skip to content

Update dependency tox to v4.67.1 - #135

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/tox-4.x
Open

renovate[bot] wants to merge 1 commit into
masterfrom
renovate/tox-4.x

Conversation

@renovate

@renovate renovate Bot commented Dec 1, 2025 •

Copy link
Copy Markdown
Contributor

Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
tox (changelog) ==4.25.0 → ==4.67.1 age confidence

Release Notes

tox-dev/tox (tox)

v4.67.1

Compare Source

Bug fixes - 4.67.1

  • Preserve ignore (-) and invert (!) exit code prefixes on commands when referenced via TOML { replace = "ref", ... }. (#​4169)
  • Installing from a pylock.toml with no dependency_groups selected now uses the lock file's
    default-groups, as 751 specifies. Previously packages marked 'default' in dependency_groups (as written
    by pdm export -f pylock) were skipped - by pcbeingused333. (#​4173)
  • A positional {factor:N} label in an env_base now resolves against that table's own factors, so with
    several env_base tables or an env_list product it no longer expands to an empty string. (#​4174)

PyPI release

Full Changelog: tox-dev/tox@4.67.0...4.67.1

v4.67.0

Compare Source

Features - 4.67.0

  • Allow opting in to tox substitutions within TOML positional arguments with substitute = true. (#​4165)

Bug fixes - 4.67.0

  • Keep capturing the output of the packaging backend with --no-capture, so tox --no-capture no longer hangs at
    started backend while waiting for the backend's reply. (#​4163)
  • A leading UTF-8 byte order mark in tox.ini, setup.cfg, tox.toml or a TOML pyproject.toml no longer
    stops the configuration from loading - editors on Windows may add one. (#​4166)
  • tox --no-provision <command> no longer treats the command as the JSON output path: a global option placed before a
    subcommand now keeps it, so tox --no-provision list lists the environments instead of writing a file named
    list. (#​4168)

Improved documentation - 4.67.0

  • Link overridden argparse methods and logging.Handler.name in the plugin API reference. (#​4170)

PyPI release

Full Changelog: tox-dev/tox@4.66.0...4.67.0

v4.66.0

Compare Source

Features - 4.66.0

  • set_env environment files accept export KEY=value lines, setting KEY - by RavSinghChandan.
    (#​4161)

Bug fixes - 4.66.0

  • Remember a failed interpreter lookup for a virtualenv environment instead of repeating the full PATH scan for
    every setting that needs it, so tox config and tox run on configurations listing interpreters that are not
    installed are faster. (#​4162)

PyPI release

Full Changelog: tox-dev/tox@4.65.6...4.66.0

v4.65.6

Compare Source

Bug fixes - 4.65.6

  • Preserve literal single and double quotes in Windows command arguments. (#​4159)
  • Keep quotes in positional arguments on Windows, so tox -- "'x'" passes 'x' to the command as on Linux
    (#​4160)

Contributor-facing changes - 4.65.6

  • Split the TOML replace walker into one helper per value kind and directive, without changing behavior.
    (#​4154)
  • The INI and TOML loaders now share one active_factors() helper for the factors that hold for an environment
    instead of each keeping its own copy - by gaborbernat. (#​4155)
  • Move set_env string parsing out of the SetEnv constructor into small helpers, without changing behavior.
    (#​4156)
  • Split environment discovery in the environment selector into run and package helpers, without changing behavior.
    (#​4157)
  • The core and per-environment skip_missing_interpreters options now share one post-process for the
    --skip-missing-interpreters override instead of each keeping its own copy - by gaborbernat.
    (#​4158)

PyPI release

Full Changelog: tox-dev/tox@4.65.5...4.65.6

v4.65.5

Compare Source

Bug fixes - 4.65.5

  • Keep braces that are not a substitution in TOML configurations, as INI does, so {} in find -exec or a dict
    literal in python -c reaches the command intact (#​4150)

PyPI release

Full Changelog: tox-dev/tox@4.65.4...4.65.5

v4.65.4

Compare Source

Improved documentation - 4.65.4

  • Clarify how TOX_ environment variables set CLI option defaults and how TOX_OVERRIDE changes configuration
    values. (#​4146)

Contributor-facing changes - 4.65.4

  • Update contributor test commands to match the configured Python 3.15 default and supported interpreter environments.
    (#​4145)

PyPI release

Full Changelog: tox-dev/tox@4.65.3...4.65.4

v4.65.3

Compare Source

Bug fixes - 4.65.3

  • Allow --skip-env with -e, -m, and -f so it filters the selected environments (#​4143)

PyPI release

Full Changelog: tox-dev/tox@4.65.2...4.65.3

v4.65.2

Compare Source

Bug fixes - 4.65.2

  • A dependency_groups run whose package root has no pyproject.toml now fails with the path it looked at, instead
    of installing none of the requested groups and reporting success - by feiiiiii5. (#​4142)

PyPI release

Full Changelog: tox-dev/tox@4.65.1...4.65.2

v4.65.1

Compare Source

Bug fixes - 4.65.1

  • tox removes read-only files on Windows when it empties an environment's tmp or log directory, or the whole
    environment on recreate - by SulimanAbdulrazzaq.

    • A read-only file in the directory itself used to stop every later run with internal error.
    • A read-only file in a sub-directory used to stay behind without a warning. (#​4138)

Packaging updates and notes for downstreams - 4.65.1

  • Use Python 3.15 for development and automation. (#​4139)
  • Include the plugin documentation in source distributions so downstream packagers can run the plugin example tests.
    (#​4140)

PyPI release

Full Changelog: tox-dev/tox@4.65.0...4.65.1

v4.65.0

Compare Source

Features - 4.65.0

  • Bump the default maximum CPython minor version to 3.15 in generative environment lists. (#​4136)

Bug fixes - 4.65.0

  • --result-json and tox config -o create the missing parent directory of the output file instead of crashing -
    by SulimanAbdulrazzaq. (#​4126)
  • A set_env env file that is a directory or not UTF-8 fails the environment with a configuration error instead of a
    traceback, and a leading UTF-8 byte order mark no longer ends up in the first key - by SulimanAbdulrazzaq.
    (#​4127)
  • A reused environment with commands = [] clears env_log_dir at the start of the run instead of keeping logs
    from the previous run - by glaziermag. (#​4130)

Improved documentation - 4.65.0

  • Drop @impl from the tox_append_version_info plugin doc examples, since it made tox skip the inline plugin - by
    Rodrigo-Palma. (#​4135)

PyPI release

Full Changelog: tox-dev/tox@4.64.10...4.65.0

v4.64.10

Compare Source

What's Changed

New Contributors

Full Changelog: tox-dev/tox@4.64.9...4.64.10

v4.64.9

Compare Source

Bug fixes - 4.64.9

  • Resolve substitutions and file| entries in set_env overrides passed through -x or TOX_OVERRIDE.
    Appended blocks replace inherited values while preserving explicit keys in the same or later overrides. Preserve these
    rules through section references, including native TOML arrays with extend = true. Resolve env-file selectors and
    values in the consuming environment. Prevent included values from overriding tox's own variables - by
    Rodrigo-Palma. (#​4116)

PyPI release

Full Changelog: tox-dev/tox@4.64.8...4.64.9

v4.64.8

Compare Source

Bug fixes - 4.64.8

  • tox combines --no-binary and --only-binary across the lines of deps and of requirements files the way pip
    does, where the last line used to replace the earlier ones. With --only-binary :all: and a --no-binary
    exception, tox passes --only-binary to pip first, so pip keeps the exception. tox config shows the merged
    values tox passes to pip - by SulimanAbdulrazzaq. (#​4110)
  • tox config shows deps with every global option merged the way tox passes it to pip, a later -i replacing
    an earlier one and repeated flags shown once, and reports the error tox run would raise for invalid deps.
    constraints shows the configured files instead of the path of tox.ini, and a comment line in constraints
    no longer fails the run. deps that give pip nothing to install no longer conflict with pylock. set_env
    includes PIP_USER, TOX_ENV_DIR, TOX_ENV_NAME, TOX_WORK_DIR and VIRTUAL_ENV, the values tox sets
    for commands - by gaborbernat. (#​4111)
  • A TOML ref to another environment's deps, constraints or commands works in tox config and tox run. It used to fail with 'PythonDeps' object is not iterable or Command(args=[...]) is not list - by
    gaborbernat. (#​4112)
  • In INI commands, commands_pre and commands_post, a reference such as pip install {[testenv:x]deps}
    that shares its line with other text joins the referenced lines into that one command as arguments, as in tox 3. tox
    used to run each referenced line after the first as a separate command. A reference alone on its line still expands to
    one command per referenced line. This changes echo {[testenv:x]commands}, which now runs one echo with every
    referenced command as its arguments - by gaborbernat. (#​4113)
  • The JSON schema described requires with the text of provision_tox_env, so editors showed the wrong hover
    for it - by gaborbernat. (#​4115)

Improved documentation - 4.64.8

  • The configuration reference listed wrong defaults for args_are_paths (True), pkg_dir
    ({env_dir}/dist), skip_missing_interpreters (False), min_version (unset) and requires
    (tox) - by Rodrigo-Palma. (#​4114)

PyPI release

Full Changelog: tox-dev/tox@4.64.7...4.64.8

v4.64.7

Compare Source

Bug fixes - 4.64.7

  • tox man suggests ~/.profile instead of ~/.zshrc when the shell is not fish, bash, zsh, csh or tcsh, for
    example sh, ksh or an unset SHELL - by Rodrigo-Palma.

    • tox picks the shell from the executable name, so /home/zshuser/bin/bash gets ~/.bashrc.
    • Outside fish, csh and tcsh, the reload hint reads . <file> instead of source <file>, since dash has no
      source.
    • The fish line keeps the default man path when MANPATH was unset, instead of hiding every other man page.
    • csh and tcsh get a setenv line for ~/.tcshrc or ~/.cshrc instead of an export line for
      ~/.profile. (#​4109)

PyPI release

Full Changelog: tox-dev/tox@4.64.6...4.64.7

v4.64.6

Compare Source

Bug fixes - 4.64.6

  • tox -e and TOXENV accept every interpreter name that picks a base_python for an environment the
    configuration does not declare - by breken-ai.

    • cpython313, cpython-3.13, graalpy311, jython2.7, rustpython3 and ironpython3 select that
      interpreter instead of failing with "provided environments not found".
    • The d debug-build suffix works too, for example py313d.
    • cython313 now fails as an unknown environment; it used to run on the Python that tox runs under. (#​4106)
  • A set_env block pulled in with {[section]set_env} now applies a PEP-508 marker only to the value it came with,
    as the inline and TOML forms already do - by feiiiiii5. A false marker on an earlier line no longer hides a
    value that the inheriting environment, a later unconditional line or an environment file supplies. (#​4107)

  • set_env values resolve when tox reads them, so {env:KEY} sees the keys a block pulls in with
    {[section]set_env}, and a { replace = "env" } table sees the keys next to it - by gaborbernat, found
    by breken-ai. Configurations that see a difference:

    • A value pulled in from another section that refers to a key of the same block now gets the block's value instead of
      the host variable.
    • A pulled-in line that refers to its own key, such as PYTHONHASHSEED = {env:PYTHONHASHSEED:0}, reads the host
      variable or its default, as the same line written in place does. It used to read the value tox sets.
    • A key written in an INI set_env wins over the same key pulled in from another section, and a later pulled-in
      section wins over an earlier one, at every nesting level. A nested section could override the section that included
      it before.
    • tox config shows the keys of every pulled-in section that tox run sets.
    • A section that pulls itself in, a TOML ref to itself, and values that refer to each other fail the environment
      with the cycle. They used to fail with a traceback or "could not find python interpreter", and values that referred
      to each other inside a pulled-in section read the host variables without a warning. (#​4108)

PyPI release

Full Changelog: tox-dev/tox@4.64.5...4.64.6

v4.64.5

Compare Source

Bug fixes - 4.64.5

  • An invalid platform regular expression now fails the environment with a one-line error instead of a traceback,
    also for the provisioning environment - by 0020020. (#​4103)

Contributor-facing changes - 4.64.5

  • Restore the bug report and feature request templates in GitHub's issue chooser. (#​4099)

PyPI release

Full Changelog: tox-dev/tox@4.64.4...4.64.5

v4.64.4

Compare Source

Bug fixes - 4.64.4

  • Pass --pre once, before the packages, in the default install_command with pip_pre set to true.
    (#​4097)
  • Fix list conversion for command line defaults from environment variables and user configuration files. For example,
    TOX_LABELS=old;new selects environments labeled old or new, and TOX_LIST_KEYS_ONLY=env_name;deps
    selects both configuration keys. Support list-valued options without an explicit default or element type, including
    append actions. (#​4098)

PyPI release

Full Changelog: tox-dev/tox@4.64.3...4.64.4

v4.64.3

Compare Source

Bug fixes - 4.64.3

  • A set_env written as a list of tables in TOML now keeps every file entry and honors the order of the entries,
    so merging one environment's set_env into another no longer drops the environment file it referenced
    (#​4093) - by Rodrigo-Palma.

    • Each { file = "..." } entry is read; previously only the last one survived, because the entries were merged into
      a single table first and a table cannot hold the key twice.
    • A variable set after a file entry wins over the value the file provides, matching the file| form in INI;
      previously a repeated variable was pulled back to its first position, letting the file override it.
    • A later entry that sets a variable without a marker clears the marker an earlier entry gave it, again matching the
      INI form. (#​4093)
  • Create the package build environment change_dir directory before running the build commands, as the documentation
    already promises. (#​4095)

PyPI release

Full Changelog: tox-dev/tox@4.64.2...4.64.3

v4.64.2

Compare Source

Bug fixes - 4.64.2

  • A tox environment with env_dir = "{tox_root}/.venv" no longer crashes with FileExistsError after another
    environment ran (#​4090) - by gaborbernat.

    • With venv_redirect unset, the new default, tox writes the redirect file unless a tox environment lives at
      .venv; with true, tox fails the run with an error naming that environment.
    • tox deletes a redirect file it wrote where an environment should live, and fails the environment with an error
      naming any other file there. (#​4091)
  • The 832 .venv redirect file now names a deliberate development environment - by gaborbernat.

    • tox picks venv_redirect_env, else an environment named dev, else the first that installs the project in
      development mode, and writes nothing without one, so a project that uses tox for tests alone gets no file.
    • tox devenv points the redirect at the environment it creates, and later runs leave it in place.
    • tox tells virtualenv to write no redirect file of its own beside the environments it builds. (#​4092)

PyPI release

Full Changelog: tox-dev/tox@4.64.1...4.64.2

v4.64.1

Compare Source

Bug fixes - 4.64.1

  • Apply -x/--override and TOX_OVERRIDE values that target a section the configuration file does not define,
    such as tox.skip_missing_interpreters on a tox.ini without a [tox] section, instead of dropping them - by
    gaborbernat. (#​4089)

PyPI release

Full Changelog: tox-dev/tox@4.64.0...4.64.1

v4.64.0

Compare Source

Features - 4.64.0

  • Point a 832 .venv redirect file at a tox environment after each run, so editors such as VS Code or PyCharm
    pick it as the project interpreter instead of asking you for a path under .tox - by gaborbernat.

    • tox picks an environment named dev, then one installing the project in development mode, then the first of
      env_list; set venv_redirect_env to choose another.
    • tox leaves a .venv directory alone, and a redirect file pointing outside its environments.
    • tox removes the redirect while it recreates the target and writes it back once the run ends.
    • Set venv_redirect to false to opt out.
    • The feature is provisional while 832 is a draft: a minor or patch release may change it in backward
      incompatible ways to follow the PEP. (#​4013)

Bug fixes - 4.64.0

  • The user configuration file is now read as UTF-8 instead of the platform's locale encoding, so a config holding
    non-ASCII values is no longer silently discarded on Windows - by MohammedAlkindi. (#​4086)

Improved documentation - 4.64.0

  • Fix the invalid table header in the TOML string substitution example. (#​4081)

PyPI release

Full Changelog: tox-dev/tox@4.63.0...4.64.0

v4.63.0

Compare Source

Features - 4.63.0

  • Plugins and test helpers can use tox.execute.api.FinishedExecuteStatus to report a fixed exit code for a command
    that already finished or never started - by gaborbernat. (#​4080)

Bug fixes - 4.63.0

  • Interrupting a parallel run with Ctrl-C no longer loses the log lines about stopping the package environment, which
    could appear or vanish depending on thread timing - by gaborbernat. (#​4079)
  • Optional dependencies declared in pyproject.toml under a name that is not normalized, such as Foo_Bar, are now
    installed when requested as extras = foo-bar while tox installs a package's dependencies - by gaborbernat.
    (#​4080)

PyPI release

Full Changelog: tox-dev/tox@4.62.1...4.63.0

v4.62.1

Compare Source

Bug fixes - 4.62.1

  • Clear obsolete markers when unconditional set_env values override conditional entries, including environment
    files. (#​4076)

PyPI release

Full Changelog: tox-dev/tox@4.62.0...4.62.1

v4.62.0

Compare Source

Features - 4.62.0

  • Plugins can read a configuration value that may be unset through ConfigSet.get_optional, which verifies the value
    against its declared type and returns None when it is not set - by gaborbernat. (#​4075)

Bug fixes - 4.62.0

  • Setting TOX_FACTOR_<label> to an empty value now resolves {factor:<label>} to an empty string instead of being
    ignored - by gaborbernat. (#​4073)

Contributor-facing changes - 4.62.0

  • Contributors running the type checks get a clean pass again with the latest ty release, and the checks now cover
    more: configuration values are read through the type-verified accessors instead of as Any, and every method that
    overrides a parent is marked with @override - by gaborbernat. (#​4075)

PyPI release

Full Changelog: tox-dev/tox@4.61.5...4.62.0

v4.61.5

Compare Source

Bug fixes - 4.61.5

  • An empty set_env list in TOML no longer fails to load; like an empty table, it clears inherited variables - by
    yuefdev. (#​4065)
  • A TOML factor range now rejects true or false as start or stop instead of reading them as 1 and
    0 - by yuefdev. (#​4066)
  • Preserve an explicitly empty {factor:label:} fallback instead of using the declared factor group default.
    (#​4072)

Improved documentation - 4.61.5

  • Loader.build documented a future parameter it no longer takes and left factory undocumented, so the plugin
    API reference listed a parameter that does not exist - by hxperl. (#​4070)

Contributor-facing changes - 4.61.5

  • Restore COVERAGE_PROCESS_START in the test environments; a mangled key had left it unset since the move to
    tox.toml - by yuefdev. (#​4067)

PyPI release

Full Changelog: tox-dev/tox@4.61.4...4.61.5

v4.61.4

Compare Source

Bug fixes - 4.61.4

  • Shebang parsing now uses shlex, so a quoted interpreter path that contains spaces is kept as one argument when
    TOX_LIMITED_SHEBANG rewrites the invocation - by r3wretrhy. (#​4064)

PyPI release

Full Changelog: tox-dev/tox@4.61.3...4.61.4

v4.61.3

Compare Source

Bug fixes - 4.61.3

  • A set_env environment file (file|.env) is now read as UTF-8 instead of the platform's locale encoding, so
    non-ASCII values no longer arrive mangled on Windows - by MohammedAlkindi. (#​4059)
  • Preserve UNC and extended-length paths in Windows commands, including quoted paths - by MohammedAlkindi.
    (#​4060)
  • Normalize project and extra names in dependency-group self-references - by MohammedAlkindi. (#​4061)
  • Register factor labels and defaults for bare labeled dicts in env_list - by dylanpulver. (#​4062)

PyPI release

Full Changelog: tox-dev/tox@4.61.2...4.61.3

v4.61.2

Compare Source

Bug fixes - 4.61.2

  • tox now expands a generative digit range only where a factor starts, so an environment such as py313-django4-2
    keeps its name rather than becoming py313-django4, 3 and 2 - by MohammedAlkindi. (#​4053)

Improved documentation - 4.61.2

  • Document how factors work in one place, covering what a factor is, the characters tox accepts in one, the platform and
    architecture factors that apply to conditions without appearing in a name, and how selecting by factor differs from
    selecting by name - by gaborbernat. (#​4055)
  • Give a reference entry to the configuration keys that had none. interrupt_post_commands runs commands_post
    after an interrupt, and config_file_path, host_python, home and tox_root_name are constants a
    configuration can substitute - by gaborbernat. (#​4056)

Contributor-facing changes - 4.61.2

  • Declare license metadata per PEP 639, adding license-files and dropping the license classifier in
    pyproject.toml - by mwtoews. (#​4052)

PyPI release

Full Changelog: tox-dev/tox@4.61.1...4.61.2

v4.61.1

Compare Source

Bug fixes - 4.61.1

  • Publish a JSON Schema that compiles under SchemaStore's validator again, so editors pick up the configuration keys
    added since 4.56 - by gaborbernat. (#​4051)

Contributor-facing changes - 4.61.1

  • Check tox's JSON Schema with SchemaStore's own validator on every pull request that changes it, and again before the
    release sync opens a pull request there - by gaborbernat. (#​4051)

PyPI release

Full Changelog: tox-dev/tox@4.61.0...4.61.1

v4.61.0

Compare Source

Features - 4.61.0

  • A labeled factor group can now declare a default for {factor:label} to fall back on when no factor of that
    group is active in the environment name. Setting TOX_FACTOR_<label> resolves that label to a given value for a
    single run - by gaborbernat. (#​4045)
  • A factor range now takes a label when you nest it under one, as in factors = [{ py_version = { prefix = "3.", start = 12, stop = 14 } }], which makes {factor:py_version} available for ranges - by gaborbernat.
    (#​4046)

Bug fixes - 4.61.0

  • Values passed via --override/-x or TOX_OVERRIDE now resolve substitutions such as {posargs},
    {env:VAR} and {env_name}, instead of reaching the environment as literal text - by gaborbernat.
    (#​4047)

Improved documentation - 4.61.0

  • Point the virtualenv discovery link in the explanation documentation at its current location. (#​4042)

Contributor-facing changes - 4.61.0

  • Replace the deprecated load_module call in the documentation configuration, which Python 3.15 removes - by
    gaborbernat. (#​4043)

PyPI release

Full Changelog: tox-dev/tox@4.60.1...4.61.0

v4.60.1

Compare Source

Bug fixes - 4.60.1

  • Report a malformed tox.ini or setup.cfg as a handled error during config discovery instead of raising an
    unhandled Error traceback - by VXNCXNX (#​4027)
  • Report an invalid value in the ini [tox] core section (such as min_version, requires or env_list) as a
    handled error instead of an unhandled traceback, matching the existing TOML loader behavior - by VXNCXNX
    (#​4028)
  • Report an invalid --skip-env/TOX_SKIP_ENV regular expression as a handled error instead of raising an
    unhandled re.error traceback - by VXNCXNX (#​4029)
  • Keep ; inside values read from a set_env environment file (file|.env). Environment file lines are plain
    KEY=VALUE pairs and were incorrectly parsed with the PEP-508 marker splitter, which truncated values such as
    DATABASE_URL=postgresql://host/db?opt=1;sslmode=require at the first semicolon - by VXNCXNX
    (#​4030)
  • Report a handled configuration error instead of leaking a traceback when the selected configuration file exists but
    cannot be read - by SirHegel. (#​4031)
  • Report an empty install_command or list_dependencies_command in a TOML configuration as a handled error
    instead of an unhandled traceback - by dylanpulver (#​4041)

Contributor-facing changes - 4.60.1

  • Pre-seed the setuptools wheel image alongside pip before the test session and give integration tests a 240s budget on
    Windows, so pytest-timeout no longer kills Windows CI workers - by gaborbernat. (#​4026)

PyPI release

Full Changelog: tox-dev/tox@4.60.0...4.60.1

v4.60.0

Compare Source

Features - 4.60.0

  • Add {home} and {tox_root_name} substitutions; set work_dir to e.g.
    "{home}/.local/state/tox/{tox_root_name}" to keep environments outside of the project tree - by
    WhyNotHugo. (#​4020)

Bug fixes - 4.60.0

  • Provision the requested tox version before reading env_list, allowing configuration syntax introduced by that
    version - by CAOShurong (#​4021)

Improved documentation - 4.60.0

  • Fix nine source-code links in the onboarding guide that pointed at paths which no longer exist, and correct the class
    names of the TOML configuration sources and loaders they refer to - by Yusuf-Gadelrab. (#​4024)

PyPI release

Full Changelog: tox-dev/tox@4.59.0...4.60.0

v4.59.0

Compare Source

Features - 4.59.0

  • The plugin and internal APIs now declare their types, and the code base passes mypy --strict and pyrefly next
    to ty - by gaborjbernat.

    • get> returns a configuration value after checking it against its
      declared type, so plugins can drop cast around conf["key"] reads.
    • The tox_on_install> hook and Installer> type their arguments as InstallArguments>; installer subclasses may narrow it through the new second type parameter.
    • Parsed> declares the CLI option surface, so options.<name> reads
      type-check.
    • add_config> accepts default=None for optional values and
      infers the value type from callable defaults.
    • The journal, the environment cache, and execute metadata hold JsonValue content; structured set_env entries
      match the SetEnvEntry shape. (#​4014)

Improved documentation - 4.59.0

  • Mark the INI configuration format as deprecated throughout the documentation - by gaborbernat.

    • The tutorial, the configuration reference, and the migration how-to state that INI keeps working for existing
      projects but is frozen and receives no new features.
    • Every INI example tab, the configuration discovery diagram, and the man page carry a deprecation marker.
    • The tutorial no longer suggests generating a tox.ini via tox quickstart. (#​4017)

Contributor-facing changes - 4.59.0

  • Remove the misc changelog category, and align the changelog filename check with the categories towncrier accepts -
    by gaborbernat. (#​4012)

PyPI release

Full Changelog: tox-dev/tox@4.58.0...4.59.0

v4.58.0

Compare Source

Miscellaneous internal changes - 4.58.0

  • Test against Python 3.15 (beta) in CI and declare its classifier - by gaborbernat. (#​4001)

PyPI release

Full Changelog: tox-dev/tox@4.57.2...4.58.0

v4.57.2

Compare Source

Bug fixes - 4.57.2

  • Fix package environment creation failures being misreported:

    • discard the partially registered configuration on failure, so the real error surfaces instead of a spurious
      duplicate configuration definition;
    • report the first creation failure in definition order, not a hash-random one;
    • build the PEP 517 frontend lazily, so tox c and tox l work when pyproject.toml cannot be read.
      (#​3987)
  • Fix state corruption in the environment creation machinery:

    • a failed run environment build no longer removes shared package environments other run environments still use;
    • a run environment registers with its package environment once, not twice with triple-counted usage;
    • circular depends reports the cycle as an error instead of a raw traceback;
    • Skip raised by a plugin for a package environment marks the run environment package-skipped instead of crashing
      with UnboundLocalError. (#​3991)
  • Fix two packaging regressions:

    • package = editable on a build backend without PEP-660 support now falls back to editable-legacy with a
      warning instead of crashing, also when the project metadata is static;
    • editable and wheel environments running after an sdist-wheel environment build from the project sources again,
      instead of a stale temporary copy that made source edits invisible. (#​3992)
  • An environment serving as both a run environment and a package environment now behaves predictably:

    • one defined through a [testenv:...]-style section and referenced by package_env inherits from
      pkgenv/env_pkg_base as documented, instead of silently keeping run environment defaults;
    • one listed in env_list while referenced as a package environment is reported as a configuration conflict up
      front, instead of failing late with cannot run packaging environment or silently disappearing from tox l.
      (#​3993)
  • pylock.toml installs now match the lock file:

    • a package locked once per Python range installs only the version matching the environment's interpreter;
    • packages locked to a local directory, VCS repository, or archive install from that source instead of resolving the
      name against the package index;
    • locked hashes are verified when every entry carries one;
    • changing a pip environment variable such as PIP_INDEX_URL reinstalls, as it already did for deps.
      (#​3994)
  • Re-running tox no longer rebuilds an environment at random when deps uses --no-binary or --only-binary
    with more than one package name. (#​3995)

  • A corrupted environment status file (.tox-info.json) now always triggers an environment recreation instead of
    crashing tox with an internal error for some corruption shapes. (#​3996)

  • PEP 723 scripts saved with a UTF-8 byte order mark now have their inline metadata honored (previously
    requires-python and dependencies were silently ignored), and a script with invalid metadata reports a clear
    configuration error instead of an internal one. (#​3997)

  • Fix three command line defects:

    • tox c -o FILE writes the default (ini) format to the file like the json and toml formats, without color codes;
    • tox devenv -e ALL reports that exactly one environment is required instead of crashing;
    • --no-provision FILE records the pinned version for a tox==X requirement instead of an empty string.
      (#​3998)
  • Restore the documented fail-fast contract and make cleanup resilient:

    • --fail-fast in parallel mode lets already running environments finish and report their real outcomes, instead of
      interrupting them after a second and mislabeling them as skipped;
    • environments canceled by fail fast before starting report as skipped;
    • the overall exit code under fail fast is the first failed environment's exit code, as documented;
    • one environment failing to clean up no longer prevents the remaining environments from cleaning up (which could
      leave tox hanging on exit). (#​3999)
  • Polish four behaviors around the edges of a run:

    • an empty [tool.tox] stub in pyproject.toml no longer hides a tox.toml next to it;
    • setting CI=false (or empty) is respected as opting out of CI behavior;
    • spinner animation frames stay out of redirected output, which now holds plain text only;
    • the JSON report marks skipped environments with "skipped": true so they are distinguishable from passes.
      (#​4000)

PyPI release

Full Changelog: tox-dev/tox@4.57.1...4.57.2

v4.57.1

Compare Source

Bug fixes - 4.57.1

  • Stop a lone quote in a set_env value (e.g. an apostrophe in can't) from swallowing the ; platform marker,
    which silently set the variable unconditionally with the marker text left in the value - by chuenchen309.
    (#​3988)
  • Make tox run-parallel -p 0 turn parallelism off and run sequentially, as the -p help ("zero is turn off") and
    the legacy command already promise, instead of running at the CPU count - by chuenchen309. (#​3989)

PyPI release

Full Changelog: tox-dev/tox@4.57.0...4.57.1

v4.57.0

Compare Source

Features - 4.57.0

  • Support debug (Py_DEBUG) interpreters the way free-threaded builds are already handled. The py313d and
    py313td factors select a debug build, a base_python pointing at one matches those factors and conflicts with
    factors that lack the suffix, and a debug build gets its own d-tagged wheel build environment - by
    chuenchen309. (#​3986)

Bug fixes - 4.57.0

  • Keep the free-threaded t suffix when deriving the base python spec from a path, so a base_python pointing at a
    free-threaded interpreter matches py313t factors and conflicts with factors that lack the suffix - by
    chuenchen309. (#​3986)

PyPI release

Full Changelog: tox-dev/tox@4.56.4...4.57.0

v4.56.4

Compare Source

Bug fixes - 4.56.4

  • Discover debug (Py_DEBUG) interpreters set as base_python, such as Debian's python3.13-dbg - the spec was
    misread as a machine named dbg and no interpreter matched. Requires python-discovery>=1.4.4 - by
    gaborbernat. (#​3977)

PyPI release

Full Changelog: tox-dev/tox@4.56.3...4.56.4

v4.56.3

Compare Source

Bug fixes - 4.56.3

  • Stop double-closing the child pty file descriptor when running under a tty, which could race a parallel run that had
    reused the freed descriptor number and cause intermittent Bad file descriptor/Input/output error failures - by
    apoorvdarshan. (#​3975)

PyPI release

Full Changelog: tox-dev/tox@4.56.2...4.56.3

v4.56.2

Compare Source

Bug fixes - 4.56.2

  • Fix a batch of latent defects found in a codebase audit:

    • stop duplicating --extra-index-url when a merged requirements line repeats an already-seen index;
    • render --no-binary/--only-binary as comma-joined strings instead of leaking the internal set into the
      pip command line;
    • report a clear error instead of IndexError for a bare one-argument flag (-c, -r, -f, -e) in
      deps or constraints;
    • canonicalize optional-dependencies keys and self-referential (recursive) extra names so non-canonical spellings
      no longer silently drop dependencies;
    • raise a clear error instead of KeyError when dependency_groups is requested without a
      [dependency-groups] table;
    • stop a native TOML { replace = "env" } reference from leaking its resolution chain into sibling list entries and
      tripping a spurious circular chain error;
    • expand the range that actually matched in a factor expression rather than the first identical digit-range substring;
    • strip the backslash from an escaped \; in set_env values;
    • skip option values during command auto-detection so an environment named like a subcommand (e.g. tox -e list) is
      no longer misread;
    • treat an empty list-typed environment variable (e.g. TOX_DISCOVER=) as an empty list rather than [""];
    • report an environment whose name is an empty string as present in Config membership tests;
    • fail evaluation gracefully instead of crashing the driver thread when tox p -p all is run with an empty
      selection;
    • avoid rebuilding a throwaway PEP 517 frontend against the previous root when a package environment's root is
      reassigned before a frontend exists;
    • avoid crashing create_session_view when the package and its session copy share no common path (e.g. different
      Windows drives);
    • close the pseudo-terminal file descriptors that leaked on every command run under a tty and on the
      terminal-attribute inheritance error path;
    • honor the stop signal in the Windows overlapped-I/O reader while a read is still pending, so shutdown no longer
      risks hanging on a child that holds its pipe open without producing output. (#​3974)

PyPI release

Full Changelog: tox-dev/tox@4.56.1...4.56.2

v4.56.1

Compare Source

Bug fixes - 4.56.1

  • Fix { replace = "if" ... extend = true } corrupting the resulting list when then or else is a scalar
    string (e.g. then = "-v"): a non-empty scalar string is now appended as a single element instead of being iterated
    character-by-character, while a false if with no else (yielding "") contributes nothing rather than an
    empty element, and list/set results are still spread into the parent. (#​3969)

PyPI release

Full Changelog: tox-dev/tox@4.56.0...4.56.1

v4.56.0

Compare Source

Features - 4.56.0

  • Derive virtualenv_spec automatically: when an environment targets a Python version the installed
    virtualenv can no longer create (e.g. py38 with virtualenv 21.5+), tox now pins the newest virtualenv
    that still supports it and bootstraps it for that environment only. The downgrade happens only when every
    base_python candidate is unsupported, so environments targeting current interpreters are unaffected. This fixes
    py38 (and other end-of-life interpreters) being silently skipped after a virtualenv upgrade - by
    gaborbernat. (#​3965) (#​3965)

Bug fixes - 4.56.0

  • The default value of skip_missing_interpreters changed from True to False — missing interpreters now fail
    the run by default, matching tox 3 behavior. The tox 4 rewrite unintentionally changed this default. To restore the
    previous (incorrect) behavior, set skip_missing_interpreters = true in your tox configuration or pass
    --skip-missing-interpreters on the command line. (#​3965)

Improved documentation - 4.56.0

  • Fix nested list items being rendered with continued numbering instead of as sub-items in development.rst,
    onboarding.rst and explanation.rst. (#​3960)
  • Replace stale http://tox.readthedocs.org URL with https://tox.wiki in pyproject.toml (Homepage),
    .github/CONTRIBUTING.md, and .github/PULL_REQUEST_TEMPLATE.md. (#​3963)

PyPI release

Full Changelog: tox-dev/tox@4.55.1...4.56.0

v4.55.1

Compare Source

Bug fixes - 4.55.1

  • TOX_OVERRIDE (and -x/--override) now propagates through configuration references. Previously, overriding a
    base value that was later referenced via {[section]key} (ini) or {replace = "ref", of = [...]} (toml) was
    ignored because reference resolution read the raw file value, bypassing the override system - by
    tales-aparecida. (#​3950) (#​3950)

[Py

[!IMPORTANT]
✂ PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM, on day 1 of the month (* 0-3 1 * *)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 2e4e3cf to 1d5dd47 Compare December 15, 2025 18:35
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.32.0 chore(deps): update dependency tox to v4.33.0 Jan 3, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch 2 times, most recently from 313a5ac to 97deca8 Compare January 8, 2026 18:25
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.33.0 chore(deps): update dependency tox to v4.34.0 Jan 8, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 97deca8 to e917caf Compare January 9, 2026 20:56
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.34.0 chore(deps): update dependency tox to v4.34.1 Jan 9, 2026
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.34.1 chore(deps): update dependency tox to v4.35.0 Feb 13, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch 2 times, most recently from 9e439b5 to a53197d Compare February 15, 2026 20:57
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.35.0 chore(deps): update dependency tox to v4.36.0 Feb 15, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from a53197d to 8a3047b Compare February 17, 2026 06:37
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.36.0 chore(deps): update dependency tox to v4.36.1 Feb 17, 2026
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.36.1 chore(deps): update dependency tox to v4.37.0 Feb 17, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch 2 times, most recently from 98a4246 to 4bf4f25 Compare February 17, 2026 23:36
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.37.0 chore(deps): update dependency tox to v4.38.0 Feb 17, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 4bf4f25 to 071c2d9 Compare February 18, 2026 21:12
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.38.0 chore(deps): update dependency tox to v4.39.0 Feb 18, 2026
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.39.0 chore(deps): update dependency tox to v4.40.0 Feb 19, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 071c2d9 to ed057d9 Compare February 19, 2026 09:56
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.40.0 chore(deps): update dependency tox to v4.41.0 Feb 19, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch 2 times, most recently from 8929a00 to 81d0056 Compare February 20, 2026 09:37
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.41.0 chore(deps): update dependency tox to v4.42.0 Feb 20, 2026
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.42.0 chore(deps): update dependency tox to v4.43.0 Feb 20, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch 2 times, most recently from e46af5c to 7425ec4 Compare February 21, 2026 01:43
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.43.0 chore(deps): update dependency tox to v4.44.0 Feb 21, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 7425ec4 to 0158327 Compare February 23, 2026 22:16
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 0671d8b to 3fdc2af Compare March 4, 2026 04:47
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.47.2 chore(deps): update dependency tox to v4.47.3 Mar 4, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 3fdc2af to 7d7491b Compare March 6, 2026 01:20
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.47.3 chore(deps): update dependency tox to v4.48.0 Mar 6, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 7d7491b to ee9f32c Compare March 6, 2026 06:33
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.48.0 chore(deps): update dependency tox to v4.48.1 Mar 6, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from ee9f32c to 7ed6d8c Compare March 6, 2026 22:47
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.48.1 chore(deps): update dependency tox to v4.49.0 Mar 6, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 7ed6d8c to 10483e1 Compare March 10, 2026 01:10
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.49.0 chore(deps): update dependency tox to v4.49.1 Mar 10, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 10483e1 to bd60b7c Compare March 17, 2026 21:38
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.49.1 chore(deps): update dependency tox to v4.50.0 Mar 17, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from bd60b7c to 15918d1 Compare March 19, 2026 04:55
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.50.0 chore(deps): update dependency tox to v4.50.1 Mar 19, 2026
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.50.1 chore(deps): update dependency tox to v4.50.2 Mar 20, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch 2 times, most recently from ada3bf2 to 3b10ea8 Compare March 20, 2026 05:34
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.50.2 chore(deps): update dependency tox to v4.50.3 Mar 20, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 3b10ea8 to d6377d7 Compare March 27, 2026 17:56
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.50.3 chore(deps): update dependency tox to v4.51.0 Mar 27, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from d6377d7 to d130610 Compare March 30, 2026 21:06
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.51.0 chore(deps): update dependency tox to v4.52.0 Mar 30, 2026
@renovate renovate Bot changed the title chore(deps): update dependency tox to v4.52.0 Update dependency tox to v4.52.0 Apr 8, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from d130610 to 03912a1 Compare April 9, 2026 18:18
@renovate renovate Bot changed the title Update dependency tox to v4.52.0 Update dependency tox to v4.52.1 Apr 9, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from 03912a1 to a245871 Compare April 14, 2026 17:01
@renovate renovate Bot changed the title Update dependency tox to v4.52.1 Update dependency tox to v4.53.0 Apr 14, 2026
@renovate
renovate Bot force-pushed the renovate/tox-4.x branch from a245871 to 82e4a60 Compare May 2, 2026 09:30
@renovate renovate Bot changed the title Update dependency tox to v4.53.0 Update dependency tox to v4.53.1 May 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants