Releases: nedbat/coveragepy
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 and duplicate issue 378.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
7.9.0
Version 7.9.0 — 2025-06-11
- Added a
[run] core
configuration setting to specify the measurement core, which was previously only available through the COVERAGE_CORE environment variable. Finishes issue 1746. - Fixed incorrect rendering of f-strings with doubled braces, closing issue 1980.
- If the C tracer core can’t be imported, a warning (“no-ctracer”) is issued with the reason.
- The C tracer core extension module now conforms to PEP 489, closing issue 1977. Thanks, Adam Turner.
- Fixed a “ValueError: min() arg is an empty sequence” error caused by strange empty modules, found by oss-fuzz.
➡️ PyPI page: coverage 7.9.0.
➡️ To install: python3 -m pip install coverage==7.9.0
7.8.2
Version 7.8.2 — 2025-05-23
- Wheels are provided for Windows ARM64 on Python 3.11, 3.12, and 3.13. Thanks, Finn Womack.
➡️ PyPI page: coverage 7.8.2.
➡️ To install: python3 -m pip install coverage==7.8.2
7.8.1
Version 7.8.1 — 2025-05-21
- A number of EncodingWarnings were fixed that could appear if you’ve enabled PYTHONWARNDEFAULTENCODING, fixing issue 1966. Thanks, Henry Schreiner.
- Fixed a race condition when using sys.monitoring with free-threading Python, closing issue 1970.
➡️ PyPI page: coverage 7.8.1.
➡️ To install: python3 -m pip install coverage==7.8.1
7.8.0
Version 7.8.0 — 2025-03-30
- Added a new
source_dirs
setting for symmetry with the existingsource_pkgs
setting. It’s preferable to the existingsource
setting, because you’ll get a clear error when directories don’t exist. Fixes issue 1942. Thanks, Jeremy Fleischman. - Fix: the PYTHONSAFEPATH environment variable new in Python 3.11 is properly supported, closing issue 1696. Thanks, Philipp A.. This works properly except for a detail when using the
coverage
command on Windows. There you can usepython -m coverage
instead if you need exact emulation.
➡️ PyPI page: coverage 7.8.0.
➡️ To install: python3 -m pip install coverage==7.8.0
7.7.1
Version 7.7.1 — 2025-03-21
- A few small tweaks to the sys.monitoring support for Python 3.14. Please test!
➡️ PyPI page: coverage 7.7.1.
➡️ To install: python3 -m pip install coverage==7.7.1
7.7.0
Version 7.7.0 — 2025-03-16
- The Coverage object has a new method, Coverage.branch_stats() for getting simple branch information for a module. Closes issue 1888.
- The Coverage constructor now has a
plugins
parameter for passing in plugin objects directly, thanks to Alex Gaynor. - Many constant tests in if statements are now recognized as being optimized away. For example, previously
if 13:
would have been considered a branch with one path not taken. Now it is understood as always true and no coverage is missing. - The experimental sys.monitoring support now works for branch coverage if you are using Python 3.14.0 alpha 6 or newer. This should reduce the overhead coverage.py imposes on your test suite. Set the environment variable
COVERAGE_CORE=sysmon
to try it out. - Confirmed support for PyPy 3.11. Thanks Michał Górny.
➡️ PyPI page: coverage 7.7.0.
➡️ To install: python3 -m pip install coverage==7.7.0
7.6.12
Version 7.6.12 — 2025-02-11
- Fix: some aarch64 distributions were missing (issue 1927). These are now building reliably.
➡️ PyPI page: coverage 7.6.12.
➡️ To install: python3 -m pip install coverage==7.6.12