Release History¶
v4.21.0 (2024-09-30)¶
Features - 4.21.0¶
Native TOML configuration support - by @gaborbernat. (#999)
Improved Documentation - 4.21.0¶
Update Loader docs - by :user:ziima (#3352)
v4.20.0 (2024-09-18)¶
Features - 4.20.0¶
Separate the list dependencies functionality to a separate abstract class allowing code reuse in plugins (such as
tox-uv
) - by :gaborbernat`. (#3347)
v4.19.0 (2024-09-17)¶
Features - 4.19.0¶
Support
pypy-<major>.<minor>
environment names for PyPy environments - by @gaborbernat. (#3346)
v4.18.1 (2024-09-07)¶
Bugfixes - 4.18.1¶
Improved Documentation - 4.18.1¶
Changes the
tox_env_teardown
docstring to explain the hook is called after a tox env was teared down. (#3305)
v4.18.0 (2024-08-13)¶
Features - 4.18.0¶
Bugfixes - 4.18.0¶
Boost temporary directories cleanup in tests - by @ziima. (#3278)
Fix absolute base python paths conflicting - by @gaborbernat. (#3325)
v4.17.1 (2024-08-07)¶
Bugfixes - 4.17.1¶
Support for running
-e <major>.<minor>
has been lost, fixing it - by @gaborbernat. (#2849)base_python
now accepts absolute paths to interpreter executable - by @paveldikov. (#3191)
v4.17.0 (2024-08-05)¶
Features - 4.17.0¶
Add
graalpy
prefix as a supported base python (#3312)Add on_platform core configuration holding the tox platform and do not install package when exec an environment - by @gaborbernat. (#3315)
Bugfixes - 4.17.0¶
Add table with default environment variables per OS (#2753)
v4.16.0 (2024-07-02)¶
Bugfixes - 4.16.0¶
Add
windir
to the default list of Windowspass_env
environment variables. - by @kurtmckee (#3302)
Improved Documentation - 4.16.0¶
v4.15.1 (2024-06-05)¶
Features - 4.15.1¶
Fix
skip_missing_interpreters
option forpackage = wheel
(#3269)
Bugfixes - 4.15.1¶
v4.15.0 (2024-04-26)¶
Features - 4.15.0¶
Add support for multiple appending override options (-x, –override) on command line - by @amitschang. (#3261)
Add support for inverting exit code success criteria using bang (!) (#3271)
Bugfixes - 4.15.0¶
Fix issue that the leading character
c
was dropped from packages in constraints files - by @jugmac00. (#3247)Allow appending to
deps
with--override testenv.deps+=foo
- by @stefanor. (#3256)Fix non-existing branch
rewrite
in the documentation tomain
. (#3257)Update test typing for build 1.2.0, which has an explicit
Distribution
type - by @stefanor. (#3260)Fix broken input parsing for
--discover
flag. - by @mimre25 (#3272)
Improved Documentation - 4.15.0¶
v4.14.2 (2024-03-22)¶
Bugfixes - 4.14.2¶
Add provision arguments to ToxParser to fix crash when provisioning new tox environment without list-dependencies by @seyidaniels (#3190)
Improved Documentation - 4.14.2¶
Removed unused line from the
fresh_subprocess
documentation. (#3241)
v4.14.1 (2024-03-06)¶
Bugfixes - 4.14.1¶
Fix crash with fresh subprocess, if the build backend is setuptools automatically enable fresh subprocesses for build backend calls - by @gaborbernat. (#3235)
v4.14.0 (2024-03-05)¶
Features - 4.14.0¶
Support enabling fresh subprocess for packaging build backends via fresh_subprocess - by @gaborbernat. (#3227)
Allow plugins attaching additional information to
--version
viatox_append_version_info
method in the plugin module - by @gaborbernat. (#3234)
v4.13.0 (2024-02-16)¶
Features - 4.13.0¶
Extract virtual environment packaging code to its own base class not tied to
virtualenv
- by @gaborbernat. (#3221)
Improved Documentation - 4.13.0¶
v4.12.1 (2024-01-16)¶
Bugfixes - 4.12.1¶
Fixed bug where running with –installpkg and multiple envs could not clean up between tests (#3165)
v4.12.0 (2024-01-11)¶
Features - 4.12.0¶
Always pass
FORCE_COLOR
andNO_COLOR
to the environment (#3172)
Bugfixes - 4.12.0¶
--parallel-no-spinner
flag now implies--parallel
(#3158)
Improved Documentation - 4.12.0¶
-Fix
open an issue
link in development.rst (#3179)
v4.11.4 (2023-11-27)¶
Bugfixes - 4.11.4¶
Improved Documentation - 4.11.4¶
Fix default value for
base_python
- by @rpatterson. (#3156)
v4.11.3 (2023-09-08)¶
Bugfixes - 4.11.3¶
Handle
FileNotFoundError
when thebase_python
interpreter doesn’t exist (#3105)
Improved Documentation - 4.11.3¶
v4.11.2 (2023-09-07)¶
Bugfixes - 4.11.2¶
Improved Documentation - 4.11.2¶
v4.11.1 (2023-09-01)¶
Bugfixes - 4.11.1¶
Allow passing in multiple overrides using the
;
character and fix,
being used as splitting values - by @gaborbernat. (#3112)
v4.11.0 (2023-08-29)¶
Features - 4.11.0¶
Add support for setting build backend
config_settings
in the configuration file - by @gaborbernat. (#3090)
v4.10.0 (2023-08-21)¶
Features - 4.10.0¶
Change accepted environment name rule: must be made up of factors defined in configuration or match regex
(pypy|py|cython|)((\d(\.\d+(\.\d+)?)?)|\d+)?
. If an environment name does not match this fail, and if a close match found suggest that to the user. (#3099)
Bugfixes - 4.10.0¶
--override foo+=bar
appending syntax will now work correctly whenfoo
wasn’t defined intox.ini
. (#3100)
v4.9.0 (2023-08-16)¶
Features - 4.9.0¶
v4.8.0 (2023-08-12)¶
Features - 4.8.0¶
--override
can now take options in the form offoo+=bar
which will appendbar
to the end of an existing list/dict, rather than replacing it. (#3087)
v4.7.0 (2023-08-08)¶
Features - 4.7.0¶
Make
--hashseed
default toPYTHONHASHSEED
, if defined - by @paravoid. The main motivation for this is to able to set the hash seed when building the documentation withtox -e docs
, and thus avoid embedding a random value in the tox documentation for –help. This caused documentation builds to fail to build reproducibly. (#2942)
Bugfixes - 4.7.0¶
Update a regular expression in tests to match the exception message in both Python 3.12 and older. (#3065)
Improved Documentation - 4.7.0¶
Fix broken links - by @gaborbernat. (#3072)
v4.6.4 (2023-07-06)¶
Bugfixes - 4.6.4¶
Fix hang and zombie process on interrupt (CTRL-C). (#3056)
v4.6.3 (2023-06-19)¶
Bugfixes - 4.6.3¶
Ensure that
get_requires_for_build_wheel
is called beforeprepare_metadata_for_build_wheel
, andget_requires_for_build_editable
is called beforeprepare_metadata_for_build_editable
- by @abravalheri. (#3043)
Improved Documentation - 4.6.3¶
Linked environment variable substitutions docs in
set_env
andpass_env
config docs. (#3039)
v4.6.2 (2023-06-16)¶
Bugfixes - 4.6.2¶
v4.6.1 (2023-06-15)¶
No significant changes.
v4.6.0 (2023-06-05)¶
Features - 4.6.0¶
Added
--list-dependencies
and--no-list-dependencies
CLI parameters. If unspecified, defaults to listing when in CI, but not otherwise. (#3024)
Misc - 4.6.0¶
v4.5.1 (2023-05-25)¶
Bugfixes - 4.5.1¶
v4.5.0 (2023-04-24)¶
Features - 4.5.0¶
Improved Documentation - 4.5.0¶
v4.4.12 (2023-04-13)¶
Bugfixes - 4.4.12¶
Avoid race conditions in tests using the
demo_pkg_inline
fixture. (#2985)
v4.4.11 (2023-04-05)¶
Bugfixes - 4.4.11¶
Fixed an issue where a tox plugin couldn’t change the value of
tox_root
. (#2966)
v4.4.10 (2023-04-05)¶
Bugfixes - 4.4.10¶
Fix issue where
work_dir
was not correctly includingtox_root
for test runs. (#2933)
v4.4.9 (2023-04-05)¶
Bugfixes - 4.4.9¶
Improved Documentation - 4.4.9¶
v4.4.8 (2023-03-26)¶
Bugfixes - 4.4.8¶
v4.4.6 (2023-02-21)¶
Bugfixes - 4.4.6¶
v4.4.5 (2023-02-07)¶
Bugfixes - 4.4.5¶
v4.4.4 (2023-01-31)¶
Bugfixes - 4.4.4¶
Forward
HOME
by default - by @gschaffner. (#2702)
v4.4.3 (2023-01-30)¶
Bugfixes - 4.4.3¶
v4.4.2 (2023-01-25)¶
Bugfixes - 4.4.2¶
Allow the user configuration file (default
<appdir>/tox/config.ini
) to be overridden via theTOX_USER_CONFIG_FILE
environment variable. Previously tox was looking at theTOX_CONFIG_FILE
to override the user configuration, however that environment variable is already used to override the main configuration - by @masenf. (#2890)
v4.4.1 (2023-01-25)¶
Bugfixes - 4.4.1¶
v4.4.0 (2023-01-25)¶
Features - 4.4.0¶
Test environments now recognize boolean config keys
constrain_package_deps
(default=true) anduse_frozen_constraints
(default=false), which control how tox generates and applies constraints files when performinginstall_package_deps
.If
constrain_package_deps
is true (default), then tox will write out{env_dir}{/}constraints.txt
and pass it topip
duringinstall_package_deps
. Ifuse_frozen_constraints
is false (default), the constraints will be taken from the specifications listed underdeps
(and inside any requirements or constraints file referenced indeps
). Otherwise,list_dependencies_command
(pip freeze
) is used to enumerate exact package specifications which will be written to the constraints file.In previous releases, conflicting package dependencies would silently override the
deps
named in the configuration, resulting in test runs against unexpected dependency versions, particularly when using tox factors to explicitly test with different versions of dependencies - by @masenf. (#2386)
Bugfixes - 4.4.0¶
When parsing command lines, use
shlex(..., posix=True)
, even on windows platforms, since non-POSIX mode does not handle escape characters and quoting like a shell would. This improves cross-platform configurations without hacks or esoteric quoting.To make this transition easier, on Windows, the backslash path separator will not treated as an escape character unless it precedes a quote, whitespace, or another backslash character. This allows paths to mostly be written in single or double backslash style.
Note that double-backslash will no longer be escaped to a single backslash in substitutions, instead the double backslash will be consumed as part of command splitting, on either posix or windows platforms.
In some instances superfluous double or single quote characters may be stripped from arg arrays in ways that do not occur in the default windows
cmd.exe
shell - by @masenf. (#2635)
Improved Documentation - 4.4.0¶
Add information when command from
list_dependencies_command
configuration option is used. (#2883)
v4.3.5 (2023-01-18)¶
Bugfixes - 4.3.5¶
When building a
wheel
oreditable
package with a PEP 517 backend, no longer pass an emptymetadata_directory
to the backendbuild_wheel
orbuild_editable
endpoint.Some backends, such as PDM and poetry, will not generate package metadata in the presence of a
metadata_directory
, even if it is empty.Prior to this change, attempting to install a wheel created by tox using PDM or poetry would return an error like “There is no item named ‘my-package.0.1.dist-info/WHEEL’ in the archive” - by @masenf. (#2880)
v4.3.4 (2023-01-17)¶
Bugfixes - 4.3.4¶
When executing via the provisioning environment (
.tox
by default), runtox
in working directory of the parent process.Prior to this change (from tox 4.0.0), the provisioned
tox
would execute with{tox_root}
as the working directory, which breaks when a relative path is passed to-c
or--conf
andtox
is executed in a working directory other than{tox_root}
- by @masenf. (#2876)
Misc - 4.3.4¶
v4.3.3 (2023-01-16)¶
Bugfixes - 4.3.3¶
v4.3.2 (2023-01-16)¶
Bugfixes - 4.3.2¶
Fix regression introduced in 4.3.0 which occurred when a substitution expression for an environment variable that had previously been substituted appears in the ini file after a substitution expression for a different environment variable. This situation erroneously resulted in an exception about “circular chain between set” of those variables - by @masenf. (#2869)
v4.3.1 (2023-01-15)¶
Bugfixes - 4.3.1¶
Fix regression introduced in 4.3.0 by expanding substitution expressions (
{...}
) that result from a previous subsitution’s replacement value (up to 100 times). Note that recursive expansion is strictly depth-first; no replacement value will ever affect adjacent characters nor will expansion ever occur over the result of more than one replacement - by @masenf. (#2863)
v4.3.0 (2023-01-15)¶
Features - 4.3.0¶
Rewrite substitution replacement parser - by @masenf
\
acts as a proper escape for\
in ini-style substitutionsThe resulting value of a substitution is no longer reprocessed in the context of the broader string. (Prior to this change, ini-values were repeatedly re-substituted until the expression no longer had modifications)
Migrate and update “Substitutions” section of Configuration page from v3 docs.
find_replace_part
is removed fromtox.config.loader.ini.replace
- New names exported from
tox.config.loader.ini.replace
: find_replace_expr
MatchArg
MatchError
MatchExpression
Note: the API for
replace
itself is unchanged. (#2732)
- New names exported from
Improved documentation for factors and test env names - by @stephenfin. (#2852)
v4.2.8 (2023-01-11)¶
Bugfixes - 4.2.8¶
v4.2.7 (2023-01-11)¶
Bugfixes - 4.2.7¶
A testenv with multiple factors, one of which conflicts with a
base_python
setting intox.ini
, will now use the correct Python interpreter version - by @stephenfin. (#2838)Explicitly list
wheel
as requirement for the tests, as some of the tests error without it. (#2843)tox has reverted support for Python factors that include PATCH release info (e.g.
py3.10.1
), build architecture (e.g.pypy3-64
) or do not define apy
prefix or other supported prefix (e.g.3.10
). These complex factors were initially supported with the release of tox 4.0 but has proven complicated to support. Instead, the simple factors supported by tox 3 e.g. (py310
,pypy3
) or period-separated equivalent (py3.10
) introduced in tox 4 should be used. Users who wish to specify more specific Python version information should configure the base_python setting - by @stephenfin. (#2848)
v4.2.6 (2023-01-06)¶
Bugfixes - 4.2.6¶
Handle properly pip
--no-binary
/--only-binary
options in requirements.txt format files. (#2814)
v4.2.5 (2023-01-06)¶
Bugfixes - 4.2.5¶
The combination of
usedevelop = true
and--skip-missing-interpreters=false
will no longer fail for environments that were not invoked - by @stephenfin. (#2811)Fix an attribute error when
use_develop = true
is set and an unsupported interpreter version is requested - by @stephenfin. (#2826)tox returns a non-zero error code if all envs are skipped. It will now correctly do this if only a single env was requested and this was skipped - by @stephenfin. (#2827)
v4.2.4 (2023-01-05)¶
Bugfixes - 4.2.4¶
Setting
[testenv] basepython = python3
will no longer override the Python interpreter version requested by a factor, such aspy311
- by @stephenfin. (#2754)Also accept tab after colon before factor filter expansion - by @pdecat. (#2823)
v4.2.3 (2023-01-04)¶
Bugfixes - 4.2.3¶
devenv
does not respect the specified path when the package is a wheel file - by @gaborbernat. (#2815)Require space after colon before factor filter expansion, unless it is the last character of the line - by @pdecat. (#2822)
v4.2.2 (2023-01-04)¶
Bugfixes - 4.2.2¶
Add
CC
,CFLAGS
,CCSHARED
,CXX
,CPPFLAGS
,LDFLAGS
,PKG_CONFIG
andPKG_CONFIG_SYSROOT_DIR
to the default passed through environment variables list as these are needed for building various C-extensions - by @gaborbernat. (#2818)
v4.2.1 (2023-01-03)¶
Bugfixes - 4.2.1¶
Fix extracting extras from markers with more than 2 extras in an or chain - by @dconathan. (#2791)
v4.2.0 (2023-01-03)¶
Features - 4.2.0¶
Packaging environments now inherit from the
pkgenv
section, allowing to set all your packaging options in one place, and support thedeps
key to set additional dependencies that will be installed afterpyproject.toml
staticrequires
but before backends dynamic requires - by @gaborbernat. (#2543)
Improved Documentation - 4.2.0¶
Document breaking changes with tox 4 and packaging environments - by @gaborbernat. (#2543)
Document how to handle environments whose names match
tox
subcommands - by @sirosen. (#2728)
v4.1.3 (2023-01-02)¶
Bugfixes - 4.1.3¶
Fail more gracefully when pip install_command is empty - by @jayaddison. (#2695)
Improved Documentation - 4.1.3¶
Add breaking-change documentation for empty
install_command
values - by @jayaddison. (#2695)
Misc - 4.1.3¶
v4.1.2 (2022-12-30)¶
Bugfixes - 4.1.2¶
v4.1.1 (2022-12-29)¶
Bugfixes - 4.1.1¶
Fix logging error with emoji in git branch name. (#2768)
Improved Documentation - 4.1.1¶
v4.1.0 (2022-12-29)¶
Features - 4.1.0¶
Improved Documentation - 4.1.0¶
Fix a grammatical typo in docs/user_guide.rst. (#2787)
v4.0.19 (2022-12-28)¶
Bugfixes - 4.0.19¶
v4.0.18 (2022-12-26)¶
Bugfixes - 4.0.18¶
Strip leading and trailing whitespace when parsing elements in requirement files - by @gaborbernat. (#2773)
v4.0.17 (2022-12-25)¶
Features - 4.0.17¶
Suppress a report output when verbosity = 0. (#2697)
Bugfixes - 4.0.17¶
v4.0.16 (2022-12-20)¶
Bugfixes - 4.0.16¶
Fix change_dir is relative to current working directory rather than to the tox_root when using the
-c
argument to locate thetox.ini
file - by @gaborbernat. (#2619)
v4.0.15 (2022-12-19)¶
Bugfixes - 4.0.15¶
Fix tox auto-provisioning not working and relax min_version default from
4.0
to no version constraint - by @gaborbernat. (#2634)Fix assertion in
test_result_json_sequential
when interpreter_base_executable
is a hardlink (macOS homebrew) - by @masenf. (#2720)Complex negative factor filters not working - by @gaborbernat. (#2747)
v4.0.14 (2022-12-18)¶
Bugfixes - 4.0.14¶
Do not include non test environment sections or factor filters in INI configuration to factor discovery - by @gaborbernat. (#2746)
v4.0.13 (2022-12-17)¶
Bugfixes - 4.0.13¶
A plain section in INI configuration matching a tox environment name shadowed the laters configuration - by @gaborbernat. (#2636)
Fix space not accepted in factor filter expression - by @gaborbernat. (#2718)
v4.0.12 (2022-12-16)¶
Bugfixes - 4.0.12¶
If tox is running in a tty, allocate a pty (pseudo terminal) for commands and copy termios attributes to show colors and improve interactive use - by @masenf. (#1773)
Fix python hash seed not being set - by @gaborbernat. (#2645)
Fix legacy CLI flags
--pre
,--force-deps
,--sitepackages
and--alwayscopy
not working, and mark them as deprecated - by @gaborbernat. (#2690)
Improved Documentation - 4.0.12¶
Document user level config. (#2633)
v4.0.11 (2022-12-14)¶
Features - 4.0.11¶
Modified handling of
NO_COLOR
environment variable, consistent with de facto conventions: any non-empty string will enableNO_COLOR
(disable colorized output); noNO_COLOR
variable orNO_COLOR
with an empty string will disableNO_COLOR
(enable colorized output) - by @ptmcg. (#2719)
Bugfixes - 4.0.11¶
TOX_SKIP_ENV
environment variable now works again, and can also be set via the CLI argument--skip-env
for any command where-e
can be set - by @mgedmin. (#2698)tox config
should only show env_list arguments by default instead ofALL
- by @gaborbernat. (#2726)
v4.0.10 (2022-12-14)¶
Features - 4.0.10¶
Add
py_dot_ver
andpy_impl
constants to environments to show the current Python implementation and dot version (e.g.3.11
) for the current environment. These can be also used as substitutions intox.ini
- by @gaborbernat. (#2640)
Bugfixes - 4.0.10¶
--help
now reports the default verbosity level (which is WARNING) correctly. (#2707)
v4.0.9 (2022-12-13)¶
Features - 4.0.9¶
Add
tox_on_install
andtox_env_teardown
plugin hooks - by @gaborbernat. (#2687)Add
PKG_CONFIG_PATH
to the default pass through environment list for python tox environments - by @gaborbernat. (#2700)
v4.0.8 (2022-12-11)¶
Bugfixes - 4.0.8¶
Fix multiple substitution on factor filtering in
tox.ini
when multiple factor filters match - by @gaborbernat. (#2650)Fix regression in
requirements.txt
parsing - by @gaborbernat. (#2682)
v4.0.7 (2022-12-11)¶
Bugfixes - 4.0.7¶
Support for
--no-deps
flag within the deps - by @gaborbernat. (#2674)
v4.0.6 (2022-12-10)¶
Features - 4.0.6¶
v4.0.5 (2022-12-09)¶
Bugfixes - 4.0.5¶
Normalize extra names passed in (fixes extra groups not being picked up during installation) - by @gaborbernat. (#2655)
v4.0.4 (2022-12-09)¶
Bugfixes - 4.0.4¶
Disable logging from
distlib.util
andfilelock
as these log messages are too verbose - by @gaborbernat. (#2655)Use
!r
andrepr()
to better display erroneous values in exception fromStrConverter.to_bool()
- by @ptmcg. (#2665)
Improved Documentation - 4.0.4¶
v4.0.3 (2022-12-08)¶
Bugfixes - 4.0.3¶
Always set environment variable
PYTHONIOENCODING
toutf-8
to ensure tox works under Windows custom encodings - by @gaborbernat. (#2422)Ensure change_dir is created if does not exist before executing commands - by @gaborbernat. (#2620)
Pass through
NUMBER_OF_PROCESSORS
on Windows as is needed formultiprocessing.cpu_count
- by @gaborbernat. (#2629)The core tox configuration now contains
host_python
key showing the host python executable path - by @gaborbernat. (#2630)
Improved Documentation - 4.0.3¶
Document that space separator is no longer valid for the passenv and instead one should use comma - by @gaborbernat. (#2615)
Document necessity to escape
#
within INI configuration - by @jugmac00. (#2617)
v4.0.2 (2022-12-07)¶
Bugfixes - 4.0.2¶
Unescaped comma in substitution should not be replaced during INI expansion - by @gaborbernat. (#2616)
tox --showconfig -e py311
reports tox section, though it should not - by @gaborbernat. (#2624)
v4.0.1 (2022-12-07)¶
Bugfixes - 4.0.1¶
Create session views of the build wheel/sdist into the temp_dir folder - by @gaborbernat. (#2612)
Default tox min_version to 4.0 instead of current tox version - by @gaborbernat. (#2613)
v4.0.0 (2022-12-07)¶
Bugfixes - 4.0.0¶
The temporary folder within the tox environment was named
.temp
instead of.tmp
- by @gaborbernat. (#2608)
Improved Documentation - 4.0.0¶
Enumerate breaking changes of tox 4 in the FAQ, and also list major new improvements - by @gaborbernat. (#2587)
Document in the FAQ that tox 4 will raise a warning when finding conflicting environment names - by @gaborbernat. (#2602)
v4.0.0rc4 (2022-12-06)¶
Bugfixes - 4.0.0rc4¶
Fix extras not being kept for install dependencies - by @gaborbernat. (#2603)
Deprecations and Removals - 4.0.0rc4¶
v4.0.0rc3 (2022-12-05)¶
Features - 4.0.0rc3¶
Add
--exit-and-dump-after
flag that allows automatically killing tox if does not finish within the passed seconds, and dump the thread stacks (useful to debug tox when it seemingly hangs) - by @gaborbernat. (#2595)
Bugfixes - 4.0.0rc3¶
Ensure that two parallel tox instance invocations on different tox environment targets will work by holding a file lock onto the packaging operations (e.g., in bash
tox4 r -e py311 &; tox4 r -e py310
) - by @gaborbernat. (#2594)Fix leaking backend processes when the build backend does not support editable wheels and fix failure when multiple environments exist that have a build backend that does not support editable wheels - by @gaborbernat. (#2595)
v4.0.0rc2 (2022-12-04)¶
Features - 4.0.0rc2¶
Support for recursive extras in Python package dependencies - by @gaborbernat. (#2567)
Bugfixes - 4.0.0rc2¶
Support in INI files for ignore exit code marker the
-
without a subsequent space too - by @gaborbernat. (#2561)Ensure paths constructed by tox are stable by resolving relative paths to fully qualified one, this insures that running tox from a different folder than project root still generates meaningful paths - by @gaborbernat. (#2562)
Ensure only on run environment operates at a time on a packaging environment (fixes unexpected failures when running in parallel mode) - by @gaborbernat. (#2564)
Fallback to
editable-legacy
if package target iseditable
but the build backend does not havebuild_editable
hook - by @gaborbernat. (#2567)Allow reference replacement in INI configuration via keys that contain the
-
character - by @gaborbernat. (#2569)Resolve symlinks when saving Python executable path - by @ssbarnea. (#2574)
Do not set
COLUMNS
orLINES
environment to the current TTY size if already set by the user - by @gaborbernat. (#2575)Add missing build[virtualenv] test dependency - by @ssbarnea. (#2576)
v4.0.0rc1 (2022-11-29)¶
Features - 4.0.0rc1¶
Add support for generative section headers - by @gaborbernat. (#2362)
Bugfixes - 4.0.0rc1¶
v4.0.0b3 (2022-11-27)¶
Features - 4.0.0b3¶
Pass
PROGRAMDATA
,PROGRAMFILES(x86)
,PROGRAMFILES
environments on Windows by default as it is needed for discovering the VS C++ compiler and start testing against 3.11 - by @gaborbernat. (#2492)Support PEP-621 static metadata for getting package dependencies - by @gaborbernat. (#2499)
Add support for editable wheels, make it the default development mode and rename
dev-legacy
mode toeditable-legacy
- by @gaborbernat. (#2502)
Bugfixes - 4.0.0b3¶
Recognize
TERM=dumb
orNO_COLOR
environment variables. - by @ssbarnea. (#1290)Allow passing config directory without filename. - by @ssbarnea. (#2340)
Avoid ignored explicit argument ‘re’ console message. - by @ssbarnea. (#2342)
Display registered plugins with
tox --version
- by @mxd4. (#2358)Allow
--hash
to be specified in requirements.txt files. - by @masenf. (#2373)Avoid impossible minversion version requirements. - by @ssbarnea. (#2414)
Improved Documentation - 4.0.0b3¶
Add new documentation for tox 4 - by @gaborbernat. (#2408)
v4.0.0b2 (2022-04-11)¶
Features - 4.0.0b2¶
Use
tox
console entry point name instead oftox4
- by @gaborbernat. (#2344)Use
.tox
as working directory instead of.tox/4
- by @gaborbernat. (#2346)Switch to
hatchling
as build backend instead ofsetuptools
- by @gaborbernat. (#2368)
Bugfixes - 4.0.0b2¶
Fix CLI raises an error for
-va
withignored explicit argument 'a'
- by @gaborbernat. (#2343)Do not interpolate values when parsing
tox.ini
configuration files - by @gaborbernat. (#2350)
Improved Documentation - 4.0.0b2¶
v4.0.0b1 (2022-02-05)¶
Features - 4.0.0b1¶
Display a hint for unrecognized argument CLI parse failures to use
--
separator to pass arguments to commands - by @gaborbernat. (#2183)Do not allow extending the config set beyond setup to ensures that all configuration values are visible via the config sub-command. - by @gaborbernat. (#2243)
Print a message when ignoring outcome of commands - by @gaborbernat. (#2315)
Bugfixes - 4.0.0b1¶
Fix type annotation is broken for
tox.config.sets.ConfigSet.add_config()
when adding a container type - by @gaborbernat. (#2233)Insert
TOX_WORK_DIR
,TOX_ENV_NAME
,TOX_ENV_DIR
andVIRTUAL_ENV
into the environment variables for all tox environments to keep contract with tox version 3 - by @gaborbernat. (#2259)Fix plugin initialization order - core plugins first, then 3rd party and finally inline - by @gaborbernat. (#2264)
Legacy parallel mode should accept
-p
flag without arguments - by @gaborbernat. (#2299)Sequential run fails because the packaging environment is deleted twice for sequential runs with recreate flag on - by @gaborbernat. (#2300)
Require Python 3.10 to generate docs - by @jugmac00. (#2321)
Environment assignment for output breaks when using
-rv
(when we cannot guess upfront the verbosity level from the CLI arguments) - by @gaborbernat. (#2324)devenv
command does not respect specified path - by @gaborbernat. (#2325)
Improved Documentation - 4.0.0b1¶
Enable link check during documentation build - by @gaborbernat. (#806)
Document ownership of the
tox.wiki
root domain - by @gaborbernat. (#2242)Document
tox.config.sets.ConfigSet.loaders()
- by @gaborbernat. (#2287)Fix CLI documentation is missing and broken documentation references - by @gaborbernat. (#2310)
v4.0.0a10 (2022-01-04)¶
Features - 4.0.0a10¶
Support for grouping environment values together by applying labels to them either at core and environment level, and allow selecting them via the -m flag from the CLI - by @gaborbernat. (#238)
Support for environment files within the set_env configuration via the
file|
prefix - by @gaborbernat. (#1938)Support for
--no-provision
flag - by @gaborbernat. (#1951)Missing
pyproject.toml
orsetup.py
file at the tox root folder without the--install-pkg
flag assumes no packaging - by @gaborbernat. (#1964)Add
external
package type for package (see External package builder), and extract package dependencies for packages passed in via –installpkg - by @gaborbernat. (#2204)Add support for rewriting script invocations that have valid shebang lines when the
TOX_LIMITED_SHEBANG
environment variable is set and not empty - by @gaborbernat. (#2208)Support for the
--discover
CLI flag - by @gaborbernat. (PR #2245)Moved the python packaging logic into a dedicate package pyproject-api and use it as a dependency - by @gaborbernat. (PR #2274)
Drop python 3.6 support - by @gaborbernat. (PR #2275)
Support for selecting target environments with a given factor via the -f CLI environment flag - by @gaborbernat. (PR #2290)
Bugfixes - 4.0.0a10¶
Fix
CTRL+C
is not stopping the process on Windows - by @gaborbernat. (#2159)Fix list/depends commands can create tox package environment as runtime environment and display an error message - by @gaborbernat. (PR #2234)
Deprecations and Removals - 4.0.0a10¶
tox_add_core_config
andtox_add_env_config
now take astate: State
argument instead of a configuration one, andConfig
not longer provides theenvs
property (instead users should migrate toState.envs
) - by @gaborbernat. (PR #2275)
v4.0.0a9 (2021-09-16)¶
Features - 4.0.0a9¶
Expose the parsed CLI arguments on the main configuration object for plugins and allow plugins to define their own configuration section – by @gaborbernat. (PR #2191)
Let tox run fail when all envs are skipped – by @jugmac00. (#2195)
Expose the configuration loading mechanism to plugins to define and load their own sections. Add
tox_add_env_config
plugin hook called after the configuration environment is created for a tox environment and removedtox_configure
. Add the main configuration object as argument totox_add_core_config
. Move the environment list method from the state to the main configuration object to allow its use within plugins – by @gaborbernat. (#2200)Allow running code in plugins before and after commands via
tox_before_run_commands
andtox_after_run_commands
plugin points – by @gaborbernat. (#2201)Allow plugins to update the set_env and change the pass_env configurations – by @gaborbernat. (#2215)
Bugfixes - 4.0.0a9¶
Fix env variable substitutions with defaults containing colon (e.g. URL) – by @comabrewer. (#2182)
Do not allow constructing
ConfigSet
directly and implement__contains__
forLoader
– by @gaborbernat. (PR #2209)Fix old-new value on recreate cache miss-match are swapped – by @gaborbernat. (#2211)
Report fails when report does not support Unicode characters – by @gaborbernat. (#2213)
Improved Documentation - 4.0.0a9¶
Adopt furo theme, update our state diagram and description in user docs (SVG + light/dark variant), split the Python API into its own page from under the plugin page, and document plugin adoption under the
tox-dev
organization - by @gaborbernat. (#1881)
v4.0.0a8 (2021-08-21)¶
Features - 4.0.0a8¶
Add support for allowlist_externals, commands not matching error - by @gaborbernat. (#1127)
Add outcome of environments into the result json (–result-json) under the
result
key containingsuccess
boolean,exit_code
integer andduration
float value - by @gaborbernat. (#1405)Add
exec
subcommand that allows users to run an arbitrary command within the tox environment (without needing to modify their configuration) - by @gaborbernat. (#1790)Add check to validate the base Python names and the environments name do not conflict Python spec wise, when they do raise error if ignore_base_python_conflict is not set or
False
- by @gaborbernat. (#1840)Allow any Unix shell-style wildcards expression for pass_env - by @gaborbernat. (#2121)
Add support for args_are_paths flag - by @gaborbernat. (#2122)
Add support for env_log_dir (compared to tox 3 extend content and keep only last run entries) - by @gaborbernat. (#2123)
Add support for
{:}
substitution in ini files as placeholder for the OS path separator - by @gaborbernat. (#2125)When cleaning directories (for tox environment,
env_log_dir
,env_tmp_dir
and packaging metadata folders) do not delete the directory itself and recreate, but instead just delete its content (this allows the user to cd into it and still be in a valid folder after a new run) - by @gaborbernat. (PR #2139)Changes to help plugin development: simpler tox env creation argument list, expose python creation directly, allow skipping list dependencies install command for pip and executable is only part of the python cache for virtualenv - by @gaborbernat. (PR #2172)
Bugfixes - 4.0.0a8¶
Support
#
character in path for the tox project - by @gaborbernat. (#763)If the command expression fails to parse with shlex fallback to literal pass through of the remaining elements - by @gaborbernat. (#1944)
tox config fails on –recreate flag, and once specified the output does not reflect the impact of the CLI flags - by @gaborbernat. (#2037)
Virtual environment creation for Python is always triggered at every run - by @gaborbernat. (#2041)
Add support for setting suicide_timeout, interrupt_timeout and terminate_timeout - by @gaborbernat. (#2124)
Parallel show output not working when there’s a packaging phase in the run - by @gaborbernat. (PR #2161)
Improved Documentation - 4.0.0a8¶
Note constraint files are a subset of requirement files - by @gaborbernat. (#1939)
Add a note about having a package with different Python requirements than tox and not specifying base_python - by @gaborbernat. (#1975)
Fix –runner is missing default value and documentation unclear - by @gaborbernat. (#2004)
v4.0.0a7 (2021-07-28)¶
Features - 4.0.0a7¶
Add support for configuration taken from the
setup.cfg
file -by @gaborbernat. (#1836)Add support for configuration taken from the
pyproject.toml
file,tox
sectionlegacy_tox_ini
key - by @gaborbernat. (#1837)Add configuration documentation - by @gaborbernat. (#1914)
Implemented
[]
substitution (alias for{posargs}
) - by @hexagonrecursion. (#1928)Implement
[testenv] ignore_outcome
- “a failing result of this testenv will not make tox fail” - by @hexagonrecursion. (#1947)Inline plugin support via
tox_.py
. This is loaded where the tox config source is discovered. It’s a Python file that can contain arbitrary Python code, such as definition of a plugin. Eventually we’ll add a plugin that allows succinct declaration/generation of new tox environments - by @gaborbernat. (PR #1963)Introduce the installer concept, and collect pip installation into a
pip
package, also attach to this the requirements file parsing which got a major rework - by @gaborbernat. (PR #1991)Support CPython
3.10
-by @gaborbernat. (PR #2014)
Bugfixes - 4.0.0a7¶
Environments with a platform mismatch are no longer silently skipped, but properly reported - by @jugmac00. (#1926)
Port pip requirements file parser to
tox
to achieve full equivalency (such as support for the per requirement--install-option
and--global-option
flags) - by @gaborbernat. (#1929)Support for extras with paths for Python deps and requirement files - by @gaborbernat. (#1933)
Due to a bug
\{posargs} {posargs}
used to expand to literal{posargs} {posargs}
. Now the second{posargs}
is expanded.\{posargs} {posargs}
expands to{posargs} positional arguments here
- by @hexagonrecursion. (#1956)Enable setting a different
upstream
repository for the coverage diff report. This has been hardcoded toupstream/rewrite
until now. by @jugmac00. (#1972)Enable replacements (a.k.a section substitutions) for section names containing a dash in sections without the
testenv:
prefix - by @jugmac00, @obestwalter, @eumiro. (#1985)Fix legacy list env command for empty/missing envlist - by @jugmac00. (#1987)
Requirements and constraints files handling got reimplemented, which should fix all open issues related to this area - by @gaborbernat. (PR #1991)
Evaluate factor conditions for
command
keys - by @jugmac00. (#2002)Prefer f-strings instead of the str.format method - by @eumiro. (#2012)
Fix regex validation for SHA 512 hashes - by @jugmac00. (#2018)
Actually run all environments when
ALL
is provided to the legacy env command - by @jugmac00. (#2112)Move from
appdirs
toplatformdirs
- by @gaborbernat. (PR #2117)Move from
toml
totomli
- by @gaborbernat. (PR #2118)
Improved Documentation - 4.0.0a7¶
Start documenting the plugin interface. Added
tox_register_tox_env
,tox_add_option
,tox_add_core_config
,tox_configure
- by @gaborbernat. (PR #1991)Explain how
-v
and-q
flags play together to determine CLI verbosity level - by @jugmac00. (#2005)Start polishing the documentation for the upcoming final release - by @jugmac00. (PR #2006)
Update documentation about changelog entries for trivial changes - by @jugmac00. (#2007)
v4.0.0a6 (2021-02-15)¶
Features - 4.0.0a6¶
Add basic quickstart implementation (just use pytest with the current Python version) - by @gaborbernat. (#1829)
Support comments via the
#
character within the ini configuration (to force a literal#
use\#
) - by @gaborbernat. (#1831)Add support for the
install_command
settings in the virtual env test environments - by @gaborbernat. (#1832)Add support for the
package_root
setupdir
( Python scoped) configuration that sets the root directory used for packaging (the location of the historicalsetup.py
and modernpyproject.toml
). This can be set at root level, or at tox environment level (the later takes precedence over the former) - by @gaborbernat. (#1838)Implement support for the
--installpkg
CLI flag - by @gaborbernat. (#1839)Add support for the
list_dependencies_command
settings in the virtual env test environments - by @gaborbernat. (#1842)Add support for the
ignore_errors
settings in tox test environments - by @gaborbernat. (#1843)Add support for the
pip_pre
settings for virtual environment based tox environments - by @gaborbernat. (#1844)Add support for the
platform
settings in tox test environments - by @gaborbernat. (#1845)Add support for the
recreate
settings in tox test environments - by @gaborbernat. (#1846)Allow Python test and packaging environments with version 2.7 - by @gaborbernat. (PR #1900)
Do not construct a requirements file for deps in virtualenv, instead pass content as CLI argument to pip - by @gaborbernat. (PR #1906)
Do not display status update environment reports when interrupted or for the final environment ran (because at the final report will be soon printed and makes the status update redundant) - by @gaborbernat. (#1909)
The
_TOX_SHOW_THREAD
environment variable can be used to print alive threads when tox exists (useful to debug when tox hangs because of some non-finished thread) and also now prints the pid of the local subprocess when reporting the outcome of an execution - by @gaborbernat. (PR #1915)
Bugfixes - 4.0.0a6¶
Normalize description text to collapse newlines and one or more than whitespace to a single space - by @gaborbernat. (#1829)
Support aliases in show config key specification (will print with the primary key) - by @gaborbernat. (#1831)
Show config no longer marks as unused keys that are inherited (e.g. if the key is coming from
testenv
section and our target istestenv:fix
) - by @gaborbernat. (#1833)--alwayscopy
and--sitepackages
legacy only flags do not work - by @gaborbernat. (#1839)Fix handling of
commands_pre
/commands
/commands_post
to be in line with tox 3 (returned incorrect exit codes and post was not always executed) - by @gaborbernat. (#1843)Support requirement files containing
--hash
constraints - by @gaborbernat. (#1903)Fix a bug that caused tox to never finish when pulling configuration from a tox run environment that was never executed - by @gaborbernat. (PR #1915)
Deprecations and Removals - 4.0.0a6¶
Drop support for
sdistsrc
flag because introduces a significant complexity and is barely used (5 hits on a github search).--skip-missing-interpreters
,--notest
,--sdistonly
,--installpkg
,--develop
and--skip-pkg-install
CLI flags are no longer available fordevenv
(enforce the only sane value for these).
By @gaborbernat (#1839)
Remove Jenkins override support: this feature goes against the spirit of tox - blurring the line between the CI and local runs. It also singles out a single CI provider, which opens the door for other CIs wanting similar functionality. Finally, only 54 code file examples came back on a Github search, showing this is a not widely used feature. People who still want Jenkins override support may create a tox plugin to achieve this functionality - by @gaborbernat. (#1841)
v4.0.0a5 (2021-01-23)¶
Features - 4.0.0a5¶
Support the
system_site_packages
/sitepackages
flag for virtual environment based tox environments - by @gaborbernat. (#1847)Support the
always_copy
/alwayscopy
flag for virtual environment based tox environments - by @gaborbernat. (#1848)Support the
download
flag for virtual environment based tox environments - by @gaborbernat. (#1849)Recreate virtual environment based tox environments when the
virtualenv
version changes - by @gaborbernat. (#1865)
Bugfixes - 4.0.0a5¶
Not all package dependencies are installed when different tox environments in the same run use different set of extras - by @gaborbernat. (#1868)
Support
=
separator in requirement file flags, directories as requirements and correctly set the root of the requirements file when using the--root
CLI flag to change the root - by @gaborbernat. (#1853)Cleanup local subprocess file handlers when exiting runs (fixes
ResourceWarning: unclosed file
errors when running withenv PYTHONTRACEMALLOC=5 PYTHONDEVMODE=y
under a Python built with--with-pydebug
) - by @gaborbernat. (#1857)Various small bugfixes:
honor updating default environment variables set by internal tox via set env (
PIP_DISABLE_PIP_VERSION_CHECK
)do not multi-wrap
HandledError
in the ini file loader,skipped environments are logged now with their fail message at default verbosity level,
fix an error that made the show configuration command crash when making the string of a config value failed,
support empty-new lines within the set env configurations replacements,
by @gaborbernat. (PR #1864)
Improved Documentation - 4.0.0a5¶
Add CLI documentation - by @gaborbernat. (PR #1852)
v4.0.0a4 (2021-01-16)¶
Features - 4.0.0a4¶
Use
.tox/4
instead of.tox4
folder (so ignores for tox 3 works for tox 4 too), reminder we’ll rename this to just.tox
before public release, however to encourage testing tox 4 in parallel with tox 3 this is helpful - by @gaborbernat. (#1812)Colorize the
config
command: section headers are yellow, keys are green, values remained white, exceptions are light red and comments are cyan - by @gaborbernat. (PR #1821)
Bugfixes - 4.0.0a4¶
Support legacy format (
-cconstraint.txt
) of constraint files indeps
, and expand constraint files too when viewing inside thedeps
or calculating weather our environment is up to date or not - by @gaborbernat. (#1788)When specifying requirements/editable/constraint paths within
deps
escape space, unless already escaped to support running specifying transitive requirements files within deps - by @gaborbernat. (#1792)When using a provisioned tox environment requesting
--recreate
failed withAttributeError
- by @gaborbernat. (#1793)Fix
RequirementsFile
from tox is rendered incorrectly inconfig
command - by @gaborbernat. (#1820)Fix a bug in the configuration system where referring to the same named key in another env/section causes circular dependency error - by @gaborbernat. (PR #1821)
Raise
ValueError
with descriptive message when a requirements file specified does not exist - by @gaborbernat. (PR #1828)Support all valid requirement file specification without delimiting space in the
deps
of thetox.ini
- by @gaborbernat. (#1834)
Improved Documentation - 4.0.0a4¶
Add code style guide for contributors - by @gaborbernat. (#1734)
v4.0.0a3 (2021-01-13)¶
Features - 4.0.0a3¶
Raise exception when set env enters into a circular reference - by @gaborbernat. (#1779)
Raise exception when variable substitution enters into a circle.
Add
{/}
as substitution for os specific path separator.Add
{env_bin_dir}
constant substitution.Implement support for
--discover
flag - by @gaborbernat. (PR #1784)
Bugfixes - 4.0.0a3¶
Entries in the
set_env
does not reference environments fromset_env
- by @gaborbernat. (#1776)env
substitution does not uses values fromset_env
- by @gaborbernat. (#1779)Adopt tox 3 base pass env list, by adding:
on all platforms:
LANG
,LANGUAGE
,CURL_CA_BUNDLE
,SSL_CERT_FILE
,LD_LIBRARY_PATH
andREQUESTS_CA_BUNLDE
,on Windows:
SYSTEMDRIVE
- by @gaborbernat. (#1780)
Fixed a bug that crashed tox where calling tox with the recreate flag and when multiple environments were reusing the same package - by @gaborbernat. (#1782)
Python version markers are stripped in package dependencies (after wrongfully being detected as an extra marker).
In packaging APIs do not set
PYTHONPATH
(to empty string) ifbackend-path
is empty.Fix commands parsing on Windows (do not auto-escape
\
- instead users should use the new{\}
, and on parsed arguments strip both'
and"
quoted outcomes).Allow windows paths in substitution set/default (the
:
character used to separate substitution arguments may also be present in paths on Windows - do not support single capital letter values as substitution arguments) - by @gaborbernat. (PR #1784)
Rework how we handle Python packaging environments:
the base packaging environment changed from
.package
to.pkg
,merged the
sdist
,wheel
anddev
separate packaging implementations into one, and internally dynamically pick the one that’s needed,the base packaging environment always uses the same Python environment as tox is installed into,
the base packaging environment is used to get the metadata of the project (via PEP-517) and to build
sdist
anddev
packages,for building wheels introduced a new per env configurable option
wheel_build_env
, if the target Python major/minor and implementation for the run tox environment and the base package tox environment matches set this to.pkg
, otherwise this is.pkg-{implementation}{major}{minor}
,internally now packaging environments can create further packaging environments they are responsible of managing,
updated
depends
to use the packaging logic,add support skip missing interpreters for depends and show config,
by @gaborbernat. (#1804)
v4.0.0a2 (2021-01-09)¶
Features - 4.0.0a2¶
Add option to disable colored output, and support
NO_COLOR
andFORCE_COLOR
environment variables - by @gaborbernat. (PR #1630)
Bugfixes - 4.0.0a2¶
Fix coverage generation in CI - by @gaborbernat. (PR #1551)
Fix the CI failures:
drop Python 3.5 support as it’s not expected to get to a release before EOL,
fix test using
\n
instead ofos.linesep
,Windows Python 3.6 does not contain
_overlapped.ReadFileInto
by @gaborbernat. (PR #1556)
Improved Documentation - 4.0.0a2¶
Add base documentation by merging virtualenv structure with tox 3 - by @gaborbernat. (PR #1551)
v4.0.0a1¶
First version all is brand new.
Warning
The current tox is the second iteration of implementation. From version 0.5
all the way to 3.X
we numbered the first iteration. Version 4.0.0a1
is a complete rewrite of the package, and as such this release
history starts from there. The old changelog is still available in the
legacy branch documentation.