preventing python coverage from including virtual environment site packages preventing python coverage from including virtual environment site packages python python

preventing python coverage from including virtual environment site packages


Thanks to tknickman I figured it out: Use either

coverage run --source <path to project dir> test.py

or create a configuration file .coveragerc which resides in the directory you run coverage from, with the following content:

[run]source =    <path to project dir>

This provides you do not have your virtual environment installed under the project directory.If you have the virtual environment installed under the project dir you can use

coverage run --source <project path> --omit <pattern> test.py

Note that omit wants a file pattern like

~/projectdir/venv/*

instead of a path.

The corresponding .coveragerc would look like this:

[run]source=    <path to project dir>omit=    <path to project dir>/<name of virtual env>/*

I still think that like packages of the standard library any packages installed under site-packages should not be covered by default.


Try using py.test and then specifiying your test options in a setup.cfg file. You will need to pip install pytest first.

For example:

[pytest]norecursedirs = build docs/_build *.egg .tox *.venvpython_files = tests/functional* tests/integration*addopts =    #--verbose    --tb short    # Turn on --capture to have brief, less noisy output    # You will only see output if the test fails    # Use --capture no if you want to see it all or have problems debugging    --capture fd    # --capture no    # show extra test summary info as specified by chars (f)ailed, (E)error,      (s)skipped, (x)failed, (X)passed.    - rfEsxX    --junitxml junit.xml    --cov workspace --cov-report xml --cov-report term-missing

You can read more about configuring py.test here: https://pytest.org/latest/customize.html


If using pytest, you can specify exclusive paths or files to test in setup.cfg (see docs):

[pytest]# a directorytestpaths = tests# exact file(s)python_files = tests/test1.py tests/test2.py

It looks like if you include the python_files and testpaths parameters, then the python_files will only be used.