Problemas al usar nose en un virtualenv


No puedo usar nose (nosetests) en un proyecto virtualenv - parece que no puede encontrar los paquetes instalados en el entorno virtualenv.

Lo extraño es que puedo establecer

test_suite = 'nose.collector'

En setup.py y ejecutar las pruebas bien como

python setup.py test

Pero al ejecutar nosetests directamente, hay todo tipo de errores de importación.

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

Cualquiera ¿pensamientos?

Gracias!!

Author: Ryan, 2009-05-14

8 answers

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

 44
Author: John Millikin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-14 18:32:54

Necesita tener una copia de nose instalada en el entorno virtual. Para forzar la instalación de nose en el virtualenv, aunque ya esté instalado en los paquetes de sitio globales, ejecute pip install con la bandera -I:

(env1)$ pip install nose -I

A partir de entonces, solo puede ejecutar nosetests como de costumbre.

 59
Author: edward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-07 02:35:46

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

python `which nosetests` 

(en lugar de solo nosestests)

 9
Author: npinto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-23 18:35:21

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

deactivate
env/bin/activate
 9
Author: Andrea Zonca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-17 21:54:09

Esto 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"

Creé un paquete realmente básico slither que tenía, en su setup.py, el mismo atributo test_suite que mencionaste anteriormente. Luego coloqué la fuente del paquete bajo env1/src.

Si miraras dentro env1/src, verías: {[14]]}

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 

Puedo ejecutar las pruebas usando el subcomando test:

(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, puedo 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 puede ser exigente con los ejecutables. Puede pasar --exe si lo desea descubre pruebas en módulos python que son ejecutables.

 8
Author: Pavel Repin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-14 21:30:32

Si todo lo demás falla, intente instalar nose en su venv, y/o ejecute nosetests-2.7. Creo que la respuesta de @andrea-zonca tiene el mismo efecto si tu venv python es 2.7

 1
Author: eggonlegs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-24 00:51:41

Quizás este sea 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 virtualenv.

 0
Author: Josh Bleecher Snyder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-07 01:55:32

Es posible que tenga un nosetests instalado en otro lugar de su PATH con mayor prioridad que el instalado en su virtualenv. Una forma rápida de darle al módulo nose y al script asociado nosetests instalado en su virtualenv actual la máxima prioridad es editar su PATH:

export PATH=/path/to/current/virtualenv/bin:$PATH
 0
Author: orluke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-06 17:18:33