2009-05-14 6 views
43

No puedo usar nose (nosetests) en un proyecto de virtualenv: parece que no puede encontrar los paquetes instalados en el entorno virtualenv.Problemas con el uso de la nariz en un dispositivo virtual

Lo curioso es que puedo fijar

test_suite = 'nose.collector' 

en setup.py y ejecute las pruebas simplemente finas como

python setup.py test 

pero cuando se ejecuta nosetests recta, hay todo tipo de errores de importación .

Lo he intentado con una instalación de nariz en todo el sistema y un paquete de nariz virtualenv y sin suerte.

¿Alguna idea?

Gracias!

+0

En una nota relacionada, la nariz funciona bien "de fábrica" ​​en una computadora diferente ... así que hay algo raro con el sistema que estaba teniendo problemas. – Ryan

Respuesta

42

¿Eres capaz de ejecutar myenv/bin/python /usr/bin/nosetests? Eso debería ejecutar Nose utilizando el conjunto de bibliotecas del entorno virtual.

+0

Sí de hecho. Eso funciona ¡Gracias! – Ryan

+3

Si utiliza con scripts que otros desarrolladores utilizarán, puede hacer 'python \' que nosetests \ '' – bcoughlan

+2

Pruebe esto alias nosetests = '/ usr/bin/env python $ (que nosetests)' – Necrolyte2

8

Aquí es lo que funciona para mí:

$ virtualenv --no-site-packages env1 
$ cd env1 
$ source bin/activate   # makes "env1" environment active, 
           # you will notice that the command prompt 
           # now has the environment name in it. 

(env1)$ easy_install nose  # install nose package into "env1" 

he creado un paquete muy básico slither que tenía, en su setup.py, test_suite mismo atributo como se ha mencionado anteriormente. Luego coloqué el origen del paquete en env1/src.

Si se miraba en el interior env1/src, verías:

slither/setup.py 
slither/slither/__init__.py 
slither/slither/impl.py   # has some very silly code to be tested 
slither/slither/tests.py   # has test-cases 

que puede ejecutar las pruebas usando test subcomando:

(env1)$ pushd src/slither 
(env1)$ python setup.py test 
# ... output elided ... 
test_ctor (slither.tests.SnakeTests) ... ok 
test_division_by_zero (slither.tests.SnakeTests) ... ok 
Ran 2 tests in 0.009s 
OK 
(env1)$ popd 

O bien, se puede ejecutar las mismas pruebas con nosetests:

(env1)$ pushd src 
(env1)$ nosetests slither/ 
.. 
Ran 2 tests in 0.007s 
OK 
(env1)$ popd 

También tenga en cuenta que nosetests c un ser exigente con los ejecutables. Puede pasar --exe si desea que descubra pruebas en módulos de Python que sean ejecutables.

9

Tengo un problema similar. La siguiente solución ayudó:

python `which nosetests` 

(en lugar de sólo nosestests)

+0

Eso funcionó para mí. Gracias. – ashic

58

Usted necesita tener una copia de la nariz instalado en el entorno virtual. Con el fin de obligar a la instalación de la nariz en el virtualenv, a pesar de que ya está instalado en el site-packages global, ejecute pip install con la bandera -I:

(env1)$ pip install nose -I 

A partir de entonces sólo se puede ejecutar nosetests como de costumbre.

+12

Parece que uno debería actualizar el virtualenv. A saber, 'which nosetests' debería apuntar a un ejecutable dentro del virtualenv. –

+17

+1 Esto es lo que funcionó para mí. Además, como señala Ceasar, también tuve que actualizar el virtualenv ejecutando 'deactivate' y luego reactivando. – Tom

+2

¡esta debería ser la respuesta aceptada! – ducin

0

Quizás esto es un cambio reciente, pero para mí, cuando instalé nosetests a través de pip, había un ejecutable nosetests instalado en .virtualenvs/<env>/bin, que (como era de esperar) funciona correctamente con el virtualenv.

0

Puede tener un nosetests que está instalado en otro lugar en su PATH con mayor prioridad que la instalada en su virtualenv. Una forma rápida para dar el módulo nose y asociada nosetests guión instalado en su prioridad virtualenv actual es la de editar su PATH:

export PATH=/path/to/current/virtualenv/bin:$PATH 
7

En la misma situación que necesitaba para recargar la virtualenv para la ruta que se actualicen correctamente:

deactivate 
env/bin/activate 
+0

Este es el que lo hizo por mí. ¿Alguna idea de por qué tienes que volver a activar después de instalar la nariz (o nose2, en mi caso)? – hansmosh

+0

@hansmosh, no puedo probar en este momento, sería útil verificar todas las rutas –

1

Si todo esto falla, intente instalar la nariz en su Venv, y/o ejecutar nosetests-2.7. Creo que la respuesta de @andrea-zonca tiene el mismo efecto si su venv python es 2.7

Cuestiones relacionadas