2013-09-23 28 views
14

Niedawno natknąłem się na jakiś problem z prowadzeniem pomiarów zasięgu w środowisku wirtualnym. Nie pamiętam podobnych problemów w przeszłości, ani nie mogłem znaleźć rozwiązania w sieci.Uruchamianie zasięgu wewnątrz virtualenv

Zasadniczo, gdy próbuję uruchomić zestaw testów w virtualenv, działa dobrze. Ale tak szybko, jak próbuję to zrobić przy użyciu coverage, zawiedzie się z powodu braku modułów, których wymaga. Opierając się na pewnej odpowiedzi na temat StackOverflow, sprawdziłem mój skrypt i odkryłem, że coverage używa innego interpretera, nawet jeśli działa z tego samego virtualenv.

Oto jak go odtworzyć:

$ 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 

Pytanie brzmi: jak zrobić coverage pracę z wirtualnym środowiskiem płynnie? Mogę zmienić sys.path lub zainstalować wymagane moduły w całym systemie, ale musi być to czystszy sposób.

+0

Nie mogę tego odtworzyć w oknach, obawiam się. Zasięg działa dobrze. + 1, aby pomóc innej pythonistki w potrzebie :) –

+1

Czy próbowałeś zainstalować pakiet '' coverage'' w tworzonym wirtualnym komputerze? – fjarri

+0

@Bogdan: Już tam był, więc nie próbowałem (ponownie) go instalować. Ale kiedy wykonuję 'pip install -U coverage', otrzymuję" 'Required already up-to-date: coverage in./Venv/lib/python2.7/site-packages'". – Tadeck

Odpowiedz

11

pip install coverage w nowym 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

Twoje rozwiązanie pomogło - zainstalowałem 'pokrycia' wewnątrz virtualenv. Został zainstalowany, ale w jakiś sposób polecenie zostało nadpisane i wskazywało niewłaściwe miejsce. Teraz działa poprawnie. Dziękuję Ci! – Tadeck

+0

To zadziałało również dla mnie. Doszedłem do wniosku, że zasięg globalny był wystarczający, ale ciągle wyrzucałem błędy importu związane z pakietami zainstalowanymi w moim środowisku wirtualnym, mimo że miałem włączone środowisko wirtualne podczas działania ... Wygląda na to, że pokrycie powinno obsługiwać to (wspólne) użycie walizka. –

13

musiałem zostawić virtualenv po zainstalowaniu zasięg i aktywować go aby uzyskać zasięg do pracy.

[[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

Przykro mi, to nie jest odpowiedź, to raport o błędzie dla opiekuna virtualenv. – Tritium21

+4

Nie wiem, dlaczego dostałeś argument za to, co było przyczyną mojego problemu. Rozrzut dookoła. –

+0

Czy ktoś wie, co tu robi magia? – Ullullu