Repository navigation
Update dependency tox to v4.67.5 - #2955
Merged
Merged
Conversation
✅ Deploy Preview for selenium-dev ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
diemol
approved these changes
Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==4.67.4→==4.67.5Release Notes
tox-dev/tox (tox)
v4.67.5Compare Source
Bug fixes
base_python(ordefault_base_python) is not installed no longer crashes withKeyError: 'skip_missing_interpreters'. It now fails with the missing interpreter, or skips the run environment whenskip_missing_interpretersis true, as tox did before 4.36.0 (#4213) by @gaborbernat. (#4212)demo[dev]; python_version < '3.10'keeps the version condition on dependencies fromdev(#4216) by @ericdelorefice and @gaborbernat.pylock.tomlor a tox user configuration file (TOX_USER_CONFIG_FILE) saved with a UTF-8 byte order mark, as some Windows editors do, is now read instead of failing with a TOML decode error or being ignored withfailed to read config file(#4217) by @pcbeingused333.args_are_pathsenabled, a positional argument naming an existing file whose rewritten path relative tochange_dirstarts with-(for exampletests/--config=evil.cfg) is now prefixed with./so the command still receives a path instead of an option (#4317) by @rahuldevikar and @gaborbernat. (#4218)replacetable with a nonemptymarkernow raises an error instead of adding its internalvalueandmarkerkeys todepsorrequires. Markers onset_envvalues remain supported (#4320) by @rahuldevikar and @gaborbernat. (#4220)commandssetting with{env:...}reports its type instead of the substituted text (#4327) by @rahuldevikar and @gaborbernat. (#4221)--installpkgout of tox's provisioning environment while installing them in the requested test environments (#4304) by @Pratham2511 and @gaborbernat. (#4222)file:URI passed to--installpkgis now percent-decoded once instead of twice, so a path containing a literal%sequence, such as a directory namedfeature%2Flogin, selects the package the user named (#4300) by @pcbeingused333 and @gaborbernat. (#4223)TOX_INSTALL_PKGor user configurationinstall_pkgpath is now resolved against the invocation directory, as--installpkgalready was, so tox inspects and installs from the same path (#4333) by @rahuldevikar and @gaborbernat. (#4224)meta_dirbecause the build frontend empties that directory during metadata preparation (#4332) by @rahuldevikar and @gaborbernat. (#4225)base_python(for example{env:TOXPYTHON:python3.11}withTOXPYTHONempty) now fails during configuration withbase_python for env <name> is empty. Blank entries in abase_pythonlist are ignored (#4326) by @rahuldevikar and @gaborbernat. (#4226)env_tmp_dir = {env:SCRATCH_DIR}withSCRATCH_DIRunset, now fails with a configuration error instead of resolving to the current directory, which tox could then clear (#4330) by @rahuldevikar and @gaborbernat. (#4227)-f py legacy, with that flag. The command scanner took a later value matching a subcommand as the command, causing environments without that factor to run (#4319) by @rahuldevikar and @gaborbernat. (#4228)--installpkgnow produce errors that name the artifact instead of internal error tracebacks (#4287) by @santhiprakash and @gaborbernat. (#4230)set_envfile assignments with a handled input error instead of a subprocess traceback (#4279) by @Doomguy-BFG9000 and @gaborbernat. (#4231)dependenciesas requirements before installing them. An invalid entry such as a pip option fails before tox passes the dependencies to pip (#4306) by @santhiprakash and @gaborbernat. (#4233)editable-legacyinstall path from the packaging environment'spackage_rootinstead of the core one, so apackage_rootset in[testenv:.pkg]no longer pairs the built package with the dependencies declared next totox.ini(#4321) by @rahuldevikar and @gaborbernat. (#4234)tox listto createfile.lockunder the link target (#4311) by @rahuldevikar and @gaborbernat. (#4235)${VAR}in requirements and constraints files using the environment running pip, includingpass_envandset_env, instead of the tox process. A variable absent from that environment stays literal, so tox cannot put its host value in a fetched URL. To retain expansion, add it topass_envor define it withset_env(#4323) by @rahuldevikar and @gaborbernat. (#4236)tox -hno longer prints secret-looking--key=valuevalues fromTOX_OVERRIDE. Conversion warnings also mask those values in invalidTOX_options (#4303) by @faresrafat3 and @gaborbernat. (#4238)tox.tomlorpyproject.tomlstring with literal braces around text containing a colon, such as a JSON argument holding a URL or a time, is now kept as written, as intox.ini, instead of being read as a{key:default}reference. Positional arguments such asset_env:xpassed into such braces through{posargs}no longer expand into the value of that setting (#4269) by @Anandb71 and @gaborbernat. (#4239).tox-info.jsoncontains a non-mapping value for a section that requires a mapping (#4258) by @haigou-web and @gaborbernat. (#4241)change_dir(#4256) by @Fire162 and @gaborbernat. (#4242)base_python_filerejects non-regular files, undecodable content, and version lines over 1024 characters with a handled error naming the file. It reads comments in bounded chunks, so a long comment can still precede the version (#4325) by @rahuldevikar and @gaborbernat. (#4243)base_python_filenow accepts only a Python version specifier (such as3.13orpypy3.10) from the version file. A path or program name there no longer makes tox start that program during interpreter discovery, and the rejected line is not echoed in the error message (#4324) by @rahuldevikar and @gaborbernat. (#4244)depsorconstraintsentry that directly substitutes a host variable via{env:NAME}or a TOMLreplace = "env"table now passes${OTHER}text in that value to pip unchanged. A TOML reference to the loaded entry keeps the same behavior. A${NAME}reference written in the configuration or a substitution default still expands (#4329) by @rahuldevikar and @gaborbernat. (#4245)pylocknow evaluates Python and platform markers using a complete environment from the target interpreter. Previously, missing values such asimplementation_versioncame from the Python running tox, which could select a package locked for the wrong interpreter (#4331) by @rahuldevikar and @gaborbernat. (#4246)pylock.toml, reject whitespace or control characters in hash tokens, archive or VCS URLs, commit IDs, and subdirectories before writing pip requirements. A line break in one of these fields could add a pip option such as--index-url. The check also covers values pip expands from${VAR}references. Changing a referenced value reinstalls the locked packages (#4315) by @rahuldevikar and @gaborbernat. (#4247)requires(such astox @ file:///path/to/tox.whl) now triggers provisioning unless the installed distribution'sdirect_url.jsonrecords the requested source, including a supported archive hash, subdirectory, or VCS revision. pip discards fragment fields such asegg; these no longer trigger repeat provisioning. When the installer omits credentials from the origin record, a credentialed direct URL without a requested archive hash fails with an explanation instead of hanging during provisioning (#4314) by @rahuldevikar and @gaborbernat. (#4248)tarfiledata filter, tox checks each member as it extracts the archive (#4316) by @rahuldevikar and @gaborbernat. (#4249)set_envfile line, since its content may contain a secret (#4298) by @r3wretrhy and @gaborbernat. (#4250)tox configINI, JSON, and TOML output when a configuration key reads non-UTF-8 data (#4302) by @ducanhnguyen223, ducanhnguyen223 and @gaborbernat. (#4251).tox-info.jsonno longer supplies cached state. When tox writes state, it replaces the link and leaves its target untouched (#4322) by @rahuldevikar and @gaborbernat. (#4253)virtualenv_spec, tox removes a link at the cache path and creates the replacement withoutvenv'sclearoption. A link placed there after cleanup and before directory creation stops the rebuild without emptying its target (#4313) by @rahuldevikar and @gaborbernat. (#4254)UnicodeEncodeError. The stream keeps its encoding (#4257) by @haigou-web and @gaborbernat. (#4255)tox-uv(#4337) by @gaborbernat. (#4336)set_envintodepsorconstraintsnow keeps${NAME}text literal for pip. A${NAME}written in the configuration still expands (#4342) by @gaborbernat. (#4338)virtualenv_specbootstrap environment no longer writes through a junction swapped into its cache entry. A linked project work directory still works; the work directory must allow temporary subdirectories (#4341) by @gaborbernat. (#4339)test_parallel_generaluses an absolute missing-interpreter path to avoid Windows registry probes in CI (#4346) by @gaborbernat. (#4344)set_envline with a substituted key keeps its value in one variable, even when the input contains a line break. A key that expands to=or a line separator raises an error (#4265) by @gaborbernat.{env:NAME}that references itself twice could stall tox during recursive expansion. tox now stops expansion at the first depth-limit hit, logs one warning, and leaves the remaining text unexpanded (#4272) by @gaborbernat.set_envkeeps{env:...}values intact when the source environment inherits the setting, usessetenvor comes from a generative section. The TOML string form"{[env.name]set_env}"does the same. Line breaks,;andfile|text inside values no longer becomeset_envsyntax (#4268) by @gaborbernat.pylock.toml, including malformed TOML or non-UTF-8 bytes, now reportsinvalid pylock filewith the filename and the parser or decoder error instead of an internal traceback (#4215) by @PRINCE2-AI, Prince and @gaborbernat.-cconfiguration now looks for an inline plugin in the requested file's parent directory or inside the selected directory (#4267) by @gaborbernat.{tox_root},{env_tmp_dir}or{env_python}within one argument, including when the path contains spaces, quotes or backslashes. The same applies to tox-provided values such as{host_python}and{tox_root_name}, entries of a list such as{base_python}, and file names matched by{glob:PATTERN}. Command values set with-xorTOX_OVERRIDEfollow the same rule (#4290) by @gaborbernat.depsnow preserve each pip option operand as one argument. A substituted--find-linkspath containing spaces can no longer add options to the command. Thetox configdisplay escapes spaces, quotes and backslashes in those operands (#4276) by @gaborbernat."--title={env:TITLE}"is one argument even when the value ofTITLEholds quotes or whitespace, as it is for a TOML argument array. tox used to paste the value into the command text before splitting it, so a quote in the value ended the argument and the rest of the value arrived as further arguments of the command.install_commandandlist_dependencies_commandget the same handling (#4283) by @gaborbernat.requiresdirect URLs in missing-requirement messages and echoed provisioning commands (#4334) by @gaborbernat.ExecuteRequestrepresentations (#4264) by @gaborbernat..venvredirect. A concurrent path swap can no longer redirect removal or replacement into another directory (#4308) by @gaborbernat.PATHentries from the command's working directory. Theallowlist_externalscheck andTOX_LIMITED_SHEBANGinterpreter selection use the file that the child executes (#4275) by @gaborbernat.{[testenv:a]commands}now preserve argument boundaries when a positional argument contains an apostrophe or backslash.tox configdisplays the command with the same quoting tox uses to parse a reference (#4277) by @gaborbernat..venvredirect. A concurrent directory rename or junction added to an empty project directory cannot redirect a write or removal into another project. Redirect writes replace.venvwith a temporary file, leaving the target of a swapped.venvsymlink or hard link unchanged (#4335) by @gaborbernat..batand.cmdcommands forcmd.exe. Values containing shell operators or percent signs reach the batch file without starting another command or expanding environment variables. Batch scripts that inspect raw%1may now see surrounding quotes for arguments that need them (#4288) by @gaborbernat.base_pythonentry to virtualenv as a separate--pythonargument. virtualenv split the oldVIRTUALENV_PYTHONvalue on commas andos.pathsep, then tried the first candidate last; that could start an unintended program (#4292) by @gaborbernat.-using./on POSIX or.\on Windows. The resulting pip argument no longer starts with-(#4266) by @gaborbernat.#in INI references to paths, sochange_dir,env_dirandset_env = file|...use the checkout directory when its name contains#. On POSIX, requirement-file paths with a space before#remain readable (#4285) by @gaborbernat.--no-captureor setting up an environment withtox exec(#4301) by @Pratham2511 and @gaborbernat.depsorconstraintsentry, and a backslash ending a substituted requirement line. Also reject line breaks and trailing backslashes in globbed requirement paths and provisioning requirements. These values can no longer add pip options or consume the following entry (#4295) by @gaborbernat.env_listentry. This prevents a value inside onerequiresentry from adding a requirement, and a value inside oneenv_listentry from selecting another environment. A substitution that occupies a whole entry can still expand to several entries. The same check applies to text overrides supplied with-xorTOX_OVERRIDE(#4284) by @gaborbernat.{posargs}and INI command references. This prevents a line break in one argument from starting another command (#4294) by @gaborbernat.-c/--confpath from the typed line when loadingtoxfile.pyand offering environments. While that path is incomplete, completion loads no inline plugin (#4278) by @gaborbernat.-m toxre-exec, Python no longer puts the start directory first onsys.path, where an unrelated file could replace tox or a dependency (#4270) by @gaborbernat.-c/--confor--rootbefore options defined by an inline plugin (#4281) by @gaborbernat.tox execorcommands = {posargs}, tox now leaves a bare program name such aspythonunchanged. It also leaves a bare executable first positional value unchanged, including when a command uses that value as data, because wrappers can run it as a program. A same-named file in the start directory no longer replaces the environment's program. An explicit path such as./pythonstill followsargs_are_paths(#4289) by @gaborbernat.TOX_LIMITED_SHEBANGenabled, tox now keeps quote and backslash characters in an unquoted shebang interpreter path. They no longer change the executable tox starts. The existing double-quoted form for paths with spaces remains supported (#4274) by @gaborbernat.args_are_pathson POSIX, tox now rewrites positional paths from the resolvedchange_dir. A linked.toxcan no longer redirect a positional path to a file beside the link target (#4273) by @gaborbernat.pylockanddependency_groupsnow usepackage_rootwhen a run has no package environment. They previously usedtox_rootin that case (#4299) by @pcbeingused333 and @gaborbernat.env_list, label or package environment name from selecting a directory outsidework_dir(#4271) by @gaborbernat.env_dir,env_tmp_dir,env_log_dir,work_dir,temp_dir,package_root,meta_dir,pkg_dirandpackage_globvalues againsttox_root. Withtox -c path/to/tox.inistarted elsewhere, it no longer clears or reuses those directories in the start directory or selects a package from there (#4291) by @gaborbernat.{glob:PATTERN}matches andTOX_FACTOR_<label>overrides literally in INI configuration: a{...}or[]in them is no longer substituted again, sotox run -- '{env:SECRET}'hands the command{env:SECRET}instead of the variable's value andtox run -- '{posargs} -x'stays one argument. TheDEFAULTSof{posargs:DEFAULTS}and referenced keys still expand their own substitutions (#4286) by @gaborbernat.Security
depsorconstraintssubstitutions, including${VAR}expansion. tox still accepts options written on the same line in either setting (#4297) by @gaborbernat.virtualenv_specas avirtualenvrequirement with optional version specifiers before invoking pip (#4261) by @gaborbernat.rmtreeandO_DIRECTORY/O_NOFOLLOWare available, clean environment, log, and temporary directories relative to an open directory descriptor so a symlink swap cannot redirect deletions outside tox's work directory. Replace a link already at the cleanup path without emptying its target (#4296) by @gaborbernat.set_envenvironment files now split entries only at LF or CR line endings. Embedded Unicode separators no longer start a new variable (#4260) by @gaborbernat.New Contributors
PyPI release
Full Changelog
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.