2013-09-23 13 views
14

Recentemente sono incappato in qualche problema con le misurazioni di copertura in esecuzione all'interno dell'ambiente virtuale. Non ricordo problemi simili in passato, né sono stato in grado di trovare soluzioni sul web.Copertura in corso all'interno virtualenv

Fondamentalmente, quando sto cercando di eseguire la suite di test in virtualenv, funziona perfettamente. Ma non appena cerco di farlo usando coverage, fallisce a causa della mancanza di moduli necessari. Sulla base di alcune risposte su StackOverflow, ho controllato il mio script e ho scoperto che coverage utilizza un interprete diverso, anche se in esecuzione dallo stesso virtualenv.

Ecco come riprodurre esso:

$ 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 

La domanda è: come fare coverage lavoro con ambiente virtuale senza soluzione di continuità? Potrei modificare sys.path o installare i moduli richiesti a livello di sistema, ma ci deve essere un modo più pulito.

+0

Non riesco a riprodurre questo su Windows, ho paura. La copertura funziona bene. + 1 per aiutare un altro pitonista bisognoso :) –

+1

Hai provato a installare il pacchetto '' coverage'' nella virtualenv che stai creando? – fjarri

+0

@Bogdan: Era già lì, quindi non ho provato a (ri) installarlo. Ma quando eseguo 'pip install -U coverage', ottengo" 'Requisito già aggiornato: coverage in./Venv/lib/python2.7/site-packages'". – Tadeck

risposta

11

pip install coverage nella vostra nuova 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

La tua soluzione ha aiutato - ho reinstallato 'coverage' all'interno di virtualenv. È stato installato, ma in qualche modo il comando è stato sovrascritto e indicava il posto sbagliato. Ora funziona correttamente. Grazie! – Tadeck

+0

Questo ha funzionato anche per me. Ho pensato che avere una copertura installata a livello globale fosse sufficiente, ma continuava a generare errori di importazione relativi ai pacchetti installati nel mio ambiente virtuale, anche se avevo attivato l'ambiente virtuale durante l'esecuzione della copertura ... Sembra che la copertura dovrebbe supportare questo (comune) uso Astuccio. –

13

ho dovuto lasciare la mia virtualenv dopo l'installazione di una copertura e riattivarlo per ottenere una copertura per funzionare.

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

Mi dispiace, questa non è una risposta, è una segnalazione di bug per il maintainer di virtualenv. – Tritium21

+4

Non sei sicuro del motivo per cui hai avuto un downvote per questo, è esattamente quello che stava causando il mio problema. Upvotes tutt'intorno. –

+0

Qualcuno sa che magia è al lavoro qui? – Ullullu