Releases: nedbat/coveragepy
7.10.7
Version 7.10.7 — 2025-09-21
- Performance: with branch coverage in large files, generating HTML, JSON, or LCOV reports could take far too long due to some quadratic behavior when creating the function and class index pages. This is now fixed, closing issue 2048. Thanks to Daniel Diniz for help diagnosing the problem.
- Most warnings and a few errors now have links to a page in the docs explaining the specific message. Closes issue 1921.
➡️ PyPI page: coverage 7.10.7.
➡️ To install: python3 -m pip install coverage==7.10.7
7.10.6
Version 7.10.6 — 2025-08-29
- Fix:
source
directories were not properly communicated to subprocesses that ran in different directories, as reported in issue 1499. This is now fixed. - Performance: Alex Gaynor continues fine-tuning the speed of combination, especially with many contexts.
➡️ PyPI page: coverage 7.10.6.
➡️ To install: python3 -m pip install coverage==7.10.6
7.10.5
7.10.4
Version 7.10.4 — 2025-08-16
- Added
patch = fork
for times when the built-in forking support is insufficient. - Fix:
patch = execv
also inherits the entire coverage configuration now.
➡️ PyPI page: coverage 7.10.4.
➡️ To install: python3 -m pip install coverage==7.10.4
7.10.3
Version 7.10.3 — 2025-08-10
- Fixes for
patch = subprocess
:- If subprocesses spawned yet more subprocesses simultaneously, some coverage could be missed. This is now fixed, closing issue 2024.
- If subprocesses were created in other directories, their data files were stranded there and not combined into the totals, as described in issue 2025. This is now fixed.
- On Windows (or maybe only some Windows?) the patch would fail with a
ModuleNotFound
error trying to import coverage. This is now fixed, closing issue 2022. - Originally only options set in the coverage configuration file would apply to subprocesses. Options set on the
coverage run
command line (such as--branch
) wouldn’t be communicated to the subprocesses. This could lead to combining failures, as described in issue 2021. Now the entire configuration is used in subprocesses, regardless of its origin. - Added
debug=patch
to help diagnose problems.
- Fix: really close all SQLite databases, even in-memory ones. Closes issue 2017.
➡️ PyPI page: coverage 7.10.3.
➡️ To install: python3 -m pip install coverage==7.10.3
7.10.2
Version 7.10.2 — 2025-08-03
- Fix: some code with NOP bytecodes could report missing branches that are actually executed. This is now fixed, closing issue 1999. Python 3.9 still shows the problem.
➡️ PyPI page: coverage 7.10.2.
➡️ To install: python3 -m pip install coverage==7.10.2
7.10.1
Version 7.10.1 — 2025-07-27
- Fix: the exclusion for
if TYPE_CHECKING:
was wrong: it marked the branch as partial, but it should have been a line exclusion so the entire clause would be excluded. Improves issue 831. - Fix: changed where .pth files are written for
patch = subprocess
, closing issue 2006.
➡️ PyPI page: coverage 7.10.1.
➡️ To install: python3 -m pip install coverage==7.10.1
7.10.0
Version 7.10.0 — 2025-07-24
- A new configuration option: “[run] patch” specifies named patches to work around some limitations in coverage measurement. These patches are available:
patch = _exit
lets coverage save its data even when https://docs.python.org/3/library/os.html#os._exit is used to abruptly end the process. This closes long-standing issue 310 as well as its duplicates: issue 312, issue 1673, issue 1845, and issue 1941.patch = subprocess
measures coverage in Python subprocesses created with https://docs.python.org/3/library/subprocess.html#module-subprocess, https://docs.python.org/3/library/os.html#os.system, or one of the https://docs.python.org/3/library/os.html#os.execl or https://docs.python.org/3/library/os.html#os.spawnl family of functions. Closes old issue 367, its duplicate issue 378 and old issue 689.patch = execv
adjusts the https://docs.python.org/3/library/os.html#os.execl family of functions to save coverage data before ending the current program and starting the next. Not available on Windows. Closes issue 43 after 15 years!
- The HTML report now dimly colors subsequent lines in multi-line statements. They used to have no color. This gives a better indication of the amount of code missing in the report. Closes issue 1308.
- Two new exclusion patterns are part of the defaults:
...
is automatically excluded as a line andif TYPE_CHECKING:
is excluded as a branch. Closes issue 831. - A new command-line option:
--save-signal=USR1
specifies a signal that coverage.py will listen for. When the signal is sent, the coverage data will be saved. This makes it possible to save data from within long-running processes. Thanks, Arkady Gilinsky. - A new configuration option: “[report] partial_also” is a list of regexes to add as pragmas for partial branches. This parallels the “[report] exclude_also” setting for adding line exclusion patterns.
- A few file path configuration settings didn’t allow for tilde expansion: [json] output, [lcov] output and [run] debug_file. This is now fixed.
- Wheels are included for 3.14 now that 3.14 rc1 is available.
- We no longer ship a PyPy-specific wheel. PyPy will install the pure-Python wheel. Closes issue 2001.
- In the very unusual situation of not having a current frame, coverage no longer crashes when using the sysmon core, fixing issue 2005.
➡️ PyPI page: coverage 7.10.0.
➡️ To install: python3 -m pip install coverage==7.10.0
7.9.2
Version 7.9.2 — 2025-07-03
- Fix: complex conditionals within a line might cause a KeyError when using sys.monitoring, as reported in issue 1991. This is now fixed.
- Fix: we can now measure coverage for code in Python archive (.par) files. Thanks, Itamer Oren.
➡️ PyPI page: coverage 7.9.2.
➡️ To install: python3 -m pip install coverage==7.9.2
7.9.1
Version 7.9.1 — 2025-06-13
- The “no-ctracer” warning is not issued for Python pre-release versions. Coverage doesn’t ship compiled wheels for those versions, so this was far too noisy.
- On Python 3.14+, the “sysmon” core is now the default if it’s supported for your configuration. Plugins and dynamic contexts are still not supported with it.
➡️ PyPI page: coverage 7.9.1.
➡️ To install: python3 -m pip install coverage==7.9.1