47 votes

Problèmes d'utilisation de nose dans un virtualenv

Je ne parviens pas à utiliser le nez (nosetests) dans un projet virtualenv - il semble incapable de trouver les packages installés dans l'environnement virtualenv.

La chose étrange est que je peux définir

test_suite = 'nose.collector'

dans setup.py et exécuter les tests sans problème avec

python setup.py test

mais quand je lance directement nosetests, il y a toutes sortes d'erreurs d'importation.

J'ai essayé avec à la fois une installation de nez à l'échelle du système et un paquet de nez virtualenv sans succès.

Des idées?

Merci!!

63voto

edward Points 800

Vous devez avoir une copie de nose installée dans l'environnement virtuel. Pour forcer l'installation de nose dans le virtualenv, même s'il est déjà installé dans les packages du site global, exécutez pip install avec le drapeau -I:

(env1)$ pip install nose -I

À partir de là, vous pouvez simplement exécuter nosetests comme d'habitude.

45voto

John Millikin Points 86775

Êtes-vous capable d'exécuter myenv/bin/python /usr/bin/nosetests? Cela devrait exécuter Nose en utilisant l'ensemble de bibliothèques de l'environnement virtuel.

12voto

Andrea Zonca Points 2194

Dans la même situation, j'ai dû recharger le virtualenv pour que le chemin soit correctement mis à jour :

deactivate
env/bin/activate

9voto

npinto Points 98

J'ai eu un problème similaire. La solution de contournement suivante a aidé:

python `which nosetests` 

(au lieu de simplement nosestests)

8voto

Pavel Repin Points 13751

Voici ce qui fonctionne pour moi :

$ virtualenv --no-site-packages env1
$ cd env1
$ source bin/activate            # active l'environnement "env1",
                                 # vous remarquerez que l'invite de commande
                                 # affiche désormais le nom de l'environnement.

(env1)$ easy_install nose        # installe le paquet nose dans "env1"

J'ai créé un package très basique slither qui avait, dans son setup.py, le même attribut test_suite que celui mentionné ci-dessus. Ensuite, j'ai placé la source du package sous env1/src.

Si vous regardez à l'intérieur de env1/src, vous verrez :

slither/setup.py
slither/slither/__init__.py
slither/slither/impl.py          # contient un code très simple à tester
slither/slither/tests.py         # contient des cas de test 

Je peux exécuter les tests en utilisant la sous-commande test :

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

Ou, je peux exécuter les mêmes tests avec nosetests :

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

Remarquez également que nosetests peut être pointilleux concernant les exécutables. Vous pouvez passer --exe si vous voulez qu'il découvre les tests dans les modules python qui sont exécutables.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X