2013-09-23 4 views
14

Недавно я наткнулся на некоторую проблему с измерениями охвата покрытия в виртуальной среде. Я не помню подобных проблем в прошлом, и я не смог найти решение в Интернете.Запуск покрытия внутри virtualenv

В принципе, когда я пытаюсь запустить набор тестов в virtualenv, он отлично работает. Но как только я попытаюсь это сделать, используя coverage, он не работает из-за отсутствия необходимых ему модулей. Основываясь на некотором ответе на StackOverflow, я проверил свой скрипт и выяснил, что 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 или установить необходимые модули по всей системе, но должен быть более чистый способ.

+0

Я не могу воспроизвести это на окнах, боюсь. Покрытие отлично работает. + 1, чтобы помочь нуждающемуся pythonista :) –

+1

Пробовал ли вы установить пакет '' coverage'' в виртуальный файл, который вы создаете? – fjarri

+0

@Bogdan: Он уже был там, поэтому я не пытался его установить. Но когда я делаю 'pip install -U coverage', я получаю« Требование уже актуальное: покрытие в./Venv/lib/python2.7/site-packages' ». – Tadeck

ответ

11

pip install coverage в новом venv

[[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] ~]$ 
+0

Ваше решение помогло - я переустановил «покрытие» внутри virtualenv. Он был установлен, но как-то команда была перезаписана, причем надпись указывала на неправильное место. Теперь он работает правильно. Спасибо! – Tadeck

+0

Это работало и на меня. Я полагал, что охвата, установленного в глобальном масштабе, было достаточно, но оно продолжало бросать ошибки импорта, связанные с пакетами, установленными в моей виртуальной среде, даже несмотря на то, что я активировал виртуальную среду при запуске покрытия ... Похоже, что покрытие должно поддерживать это (общее) использование дело. –

13

Я должен был оставить свой 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 
+0

Прошу прощения, это не ответ, это сообщение об ошибке для сопровождающего virtualenv. – Tritium21

+4

Не знаете, почему у вас есть понижение для этого, именно то, что вызывало мою проблему. Охватывает все вокруг. –

+0

Кто-нибудь знает, какая здесь магия? – Ullullu

Смежные вопросы