Open
Description
Describe the bug
Consider a project:
pyproject.toml
my_local_plugin.py
src/
foo.py
# pyproject.toml
[tool.coverage.run]
plugins = ["my_local_plugin"]
# my_local_plugin.py
def coverage_init(*args, **kwargs):
pass
And then
# From project root directory (location of pyproject.toml)
$ coverage run foo.py
$ coverage combine
Traceback (most recent call last):
File "/path/to/venv/bin/coverage", line 8, in <module>
sys.exit(main())
~~~~^^
File "/path/to/venv/lib/python3.13/site-packages/coverage/cmdline.py", line 970, in main
status = CoverageScript().command_line(argv)
File "/path/to/venv/lib/python3.13/site-packages/coverage/cmdline.py", line 681, in command_line
return self.do_run(options, args)
~~~~~~~~~~~^^^^^^^^^^^^^^^
File "/path/to/venv/lib/python3.13/site-packages/coverage/cmdline.py", line 855, in do_run
self.coverage.start()
~~~~~~~~~~~~~~~~~~~^^
File "/path/to/venv/lib/python3.13/site-packages/coverage/control.py", line 660, in start
self._init()
~~~~~~~~~~^^
File "/path/to/venv/lib/python3.13/site-packages/coverage/control.py", line 365, in _init
self._plugins.load_from_config(self.config.plugins, self.config)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/path/to/venv/lib/python3.13/site-packages/coverage/plugin_support.py", line 48, in load_from_config
__import__(module)
~~~~~~~~~~^^^^^^^^
ModuleNotFoundError: No module named 'my_local_plugin'
To Reproduce
How can we reproduce the problem? Please be specific. Don't link to a failing CI job. Answer the questions below:
- What version of Python are you using? 3.13
- What version of coverage.py shows the problem? The output of
coverage debug sys
is helpful.
$ coverage debug sys
-- sys -------------------------------------------------------
coverage_version: 7.8.2
coverage_module: /Users/jfaibussowit/soft/nv/legate.core.internal/venv/lib/python3.13/site-packages/coverage/__init__.py
core: -none-
CTracer: available from /Users/jfaibussowit/soft/nv/legate.core.internal/venv/lib/python3.13/site-packages/coverage/tracer.cpython-313-darwin.so
plugins.file_tracers: -none-
plugins.configurers: -none-
plugins.context_switchers: -none-
configs_attempted: /Users/jfaibussowit/soft/nv/.coveragerc
/Users/jfaibussowit/soft/nv/setup.cfg
/Users/jfaibussowit/soft/nv/tox.ini
/Users/jfaibussowit/soft/nv/pyproject.toml
configs_read: -none-
config_file: None
config_contents: -none-
data_file: -none-
python: 3.13.3 (main, Apr 8 2025, 13:54:08) [Clang 17.0.0 (clang-1700.0.13.3)]
platform: macOS-15.4.1-arm64-arm-64bit-Mach-O
implementation: CPython
gil_enabled: True
executable: /Users/jfaibussowit/soft/nv/legate.core.internal/venv/bin/python
def_encoding: utf-8
fs_encoding: utf-8
pid: 63286
cwd: /Users/jfaibussowit/soft/nv
path: /Users/jfaibussowit/soft/nv/legate.core.internal/venv/bin
/opt/homebrew/Cellar/[email protected]/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python313.zip
/opt/homebrew/Cellar/[email protected]/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13
/opt/homebrew/Cellar/[email protected]/3.13.3_1/Frameworks/Python.framework/Versions/3.13/lib/python3.13/lib-dynload
/Users/jfaibussowit/soft/nv/legate.core.internal/venv/lib/python3.13/site-packages
environment: HOME = /Users/jfaibussowit
PYTHONBREAKPOINT = ipdb.set_trace
command_line: /Users/jfaibussowit/soft/nv/legate.core.internal/venv/bin/coverage debug sys
sqlite3_sqlite_version: 3.49.2
sqlite3_temp_store: 0
sqlite3_compile_options: ATOMIC_INTRINSICS=1, COMPILER=clang-17.0.0, DEFAULT_AUTOVACUUM,
DEFAULT_CACHE_SIZE=-2000, DEFAULT_FILE_FORMAT=4,
DEFAULT_JOURNAL_SIZE_LIMIT=-1, DEFAULT_MMAP_SIZE=0, DEFAULT_PAGE_SIZE=4096,
DEFAULT_PCACHE_INITSZ=20, DEFAULT_RECURSIVE_TRIGGERS,
DEFAULT_SECTOR_SIZE=4096, DEFAULT_SYNCHRONOUS=2,
DEFAULT_WAL_AUTOCHECKPOINT=1000, DEFAULT_WAL_SYNCHRONOUS=2,
DEFAULT_WORKER_THREADS=0, DIRECT_OVERFLOW_READ, ENABLE_API_ARMOR,
ENABLE_COLUMN_METADATA, ENABLE_DBSTAT_VTAB, ENABLE_FTS3,
ENABLE_FTS3_PARENTHESIS, ENABLE_FTS5, ENABLE_MATH_FUNCTIONS,
ENABLE_MEMORY_MANAGEMENT, ENABLE_PREUPDATE_HOOK, ENABLE_RTREE,
ENABLE_SESSION, ENABLE_STAT4, ENABLE_UNLOCK_NOTIFY, MALLOC_SOFT_LIMIT=1024,
MAX_ATTACHED=10, MAX_COLUMN=2000, MAX_COMPOUND_SELECT=500,
MAX_DEFAULT_PAGE_SIZE=8192, MAX_EXPR_DEPTH=1000, MAX_FUNCTION_ARG=1000,
MAX_LENGTH=1000000000, MAX_LIKE_PATTERN_LENGTH=50000,
MAX_MMAP_SIZE=0x7fff0000, MAX_PAGE_COUNT=0xfffffffe, MAX_PAGE_SIZE=65536,
MAX_SQL_LENGTH=1000000000, MAX_TRIGGER_DEPTH=1000,
MAX_VARIABLE_NUMBER=250000, MAX_VDBE_OP=250000000, MAX_WORKER_THREADS=8,
MUTEX_PTHREADS, SYSTEM_MALLOC, TEMP_STORE=1, THREADSAFE=1, USE_URI
Expected behavior
coverage
should be able to import the package, using the current working directory. Setting PYTHONPATH=$(pwd)
then of course it works.