Запуск покрытия внутри virtualenv
Недавно я наткнулся на некоторые проблемы с выполнением измерений охвата в виртуальной среде. Я не помню подобных проблем в прошлом, и я не смог найти решение в Интернете.
В принципе, когда я пытаюсь запустить набор тестов в virtualenv, он отлично работает. Но как только я попытаюсь сделать это с помощью coverage
, он терпит неудачу из-за отсутствия необходимых им модулей. Основываясь на некотором ответе на StackOverflow, я проверил свой script и обнаружил, что coverage
использует другой интерпретатор, даже если он работает изнутри того же virtualenv
.
Вот как воспроизвести его:
$ virtualenv --no-site-packages venv
New python executable in venv/bin/python
Installing Setuptools................................................done.
Installing Pip.......................................................done.
$ source venv/bin/activate
(venv)$ echo 'import sys; print(sys.executable)' > test.py
(venv)$ python test.py
/home/tadeck/testground/venv/bin/python
(venv)$ coverage run test.py
/usr/bin/python
Возникает вопрос: как сделать coverage
без проблем работать с виртуальной средой? Я мог бы изменить sys.path
или установить необходимые модули по всей системе, но должен быть более чистый способ.
Ответы
Ответ 1
pip install coverage
в вашем новом вену
[[email protected] ~]$ virtualenv venv
[[email protected] ~]$ source venv/bin/activate
(venv)[[email protected] ~]$ pip install coverage
(venv)[[email protected] ~]$ echo 'import sys; print(sys.executable)' > test.py
(venv)[[email protected] ~]$ python test.py
/home/alex/venv/bin/python
(venv)[[email protected] ~]$ coverage run test.py
/home/alex/venv/bin/python
(venv)[[email protected] ~]$
Ответ 2
Мне пришлось покинуть свой virtualenv после установки покрытия и активировать его, чтобы получить доступ к работе.
[[email protected] ~]$ virtualenv --no-site-packages venv
[[email protected] ~]$ source venv/bin/activate
(venv)[[email protected] ~]$ pip install coverage
(venv)[[email protected] ~]$ deactivate
[[email protected] ~]$ source venv/bin/activate