Как запустить покрытие, установленное локально/пользователем внутри venv

#python #code-coverage

Вопрос:

Привет, я хочу запустить покрытие в своей виртуальной среде. покрытие устанавливается в локальном/глобальном/пользовательском каталоге.

Причина в том, что мне нужно, чтобы у моего venv были строго контролируемые зависимости, каждая из которых была проанализирована и одобрена SecOps, а охват приносил и мог принести в будущем множество неизвестных и неконтролируемых зависимостей.

И, таким образом, охват необходим только для целей развития, я не вижу смысла, почему он должен быть частью моего requirements.txt

Есть ли способ справиться с этим таким образом, чтобы покрытие было установлено в моих локальных/глобальных/пользовательских зависимостях (извините, я новичок в экосистеме python, просто экстраполируя другие экосистемы на эту), но оно не будет распространяться на мою серверную сторону (которая заполнена CI, который устанавливает все, что находится в requirements.txt).

Все это использует pip, и никакой другой менеджер зависимостей не будет и не может быть использован.

Ошибка, которую я получаю, заключается в том, что покрытие не может найти зависимости, установленные в моем venv, даже если я запускаю покрытие с активированного venv.

Это методы, которые я пробовал до сих пор, кажется, ничего не работает

Форсирование PYTHONPATH

 export PYTHONPATH=`pwd`
coverage run --omit=$omit_paths -m unittest discover
coverage html --omit=$omit_paths
 

Принудительное выполнение sys.path

запуск покрытия, указывающего на файл начальной загрузки, который делает обнаружение и заставляет sys.path быть таким, как есть, при запуске unittest в одиночку, что работает просто отлично

./test/init.py

 ...
sys.path = [# EXPORT of sys.path existing when running unittest only]
...
 

Спасибо.

Комментарии:

1. Можете ли вы показать конкретную ошибку, которую вы получили?

2. Он не может найти сторонний модуль, установленный в venv, типичная ошибка «модуль не найден» в python. Извините за секретность, но не могу показать этот журнал 🙁

3. FWIW, по умолчанию, покрытие не имеет зависимостей. Если вы используете «покрытие установки pip», оно не установит ничего, кроме покрытия.