2009-05-14 10 views
43

Ich kann Nase (nosetests) in einem virtualenv Projekt nicht verwenden - es kann nicht scheinen, die in der virtuellen Umgebung installierten Pakete zu finden.Probleme mit der Nase in einem virtualenv

Das Merkwürdige ist, dass ich

test_suite = 'nose.collector' 

in setup.py setzen und die Tests ganz gut als

python setup.py test 

aber laufen, wenn nosetests gerade ausgeführt wird, gibt es alle Arten von Importfehler .

Ich habe es mit einer systemweiten Installation von Nase und einem virtualenv Nasenpaket versucht und kein Glück.

Irgendwelche Gedanken?

Danke !!

+0

Auf eine verwandte Anmerkung, funktioniert Nase "out of the box" auf einem anderen Computer ... so etwas ist wonky mit dem System, das ich war Probleme haben. – Ryan

Antwort

42

Können Sie myenv/bin/python /usr/bin/nosetests ausführen? Das sollte Nase mit dem Bibliothekssatz der virtuellen Umgebung ausführen.

+0

Ja tatsächlich. Das funktioniert. Vielen Dank! – Ryan

+3

Wenn Sie mit Skripten arbeiten, die andere Entwickler verwenden, können Sie 'python \' tun, die nosetests \ '' – bcoughlan

+2

Probieren Sie diese Alias ​​nosetests = '/ usr/bin/env python $ (welche nosetests)' – Necrolyte2

8

Hier ist, was für mich funktioniert:

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

ich ein wirklich Basispaket slither geschaffen, das in seiner setup.py, gleiche test_suite Attribut hatte, wie Sie oben erwähnt. Dann legte ich die Paketquelle unter env1/src.

Wenn Sie in env1/src sehen, dann würden Sie sehen:

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 

ich die Tests test Unterbefehl ausführen kann:

(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 

Oder kann ich die gleichen Tests mit nosetests laufen:

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

Beachten Sie auch, dass nosetests c ein wählerischer über ausführbare Dateien. Sie können --exe übergeben, wenn Sie Tests in ausführbaren Python-Modulen ermitteln möchten.

9

Ich habe ein ähnliches Problem. Die folgende Problemumgehung geholfen:

python `which nosetests` 

(statt nur nosestests)

+0

Das hat bei mir funktioniert. Vielen Dank. – ashic

58

Sie benötigen eine Kopie der Nase in der virtuellen Umgebung installiert sein. Um die Installation der Nase in die virtualenv zu zwingen, obwohl es bereits in den globalen Website-Pakete installiert ist, führen pip install mit der -I Flagge:

(env1)$ pip install nose -I 

Fortan Sie nur nosetests wie gewohnt laufen.

+12

Es scheint, dass man den virtualenv auffrischen muss. Nämlich "welche Nasetests" sollten auf eine ausführbare Datei innerhalb des Virtualenv zeigen. –

+17

+1 Das hat bei mir funktioniert. Auch, wie Ceasar hervorhebt, musste ich den virtualenv auffrischen, indem ich "deactivate" und dann reaktivierte. – Tom

+2

Dies sollte die akzeptierte Antwort sein !!! – ducin

0

Vielleicht ist dies eine kürzliche Änderung, aber für mich, als ich nosetests über pip installiert, gab es eine nosetests ausführbare Datei in .virtualenvs/<env>/bin installiert, die (nicht überraschend) ordnungsgemäß mit dem virtualenv funktioniert.

0

Sie könnten eine nosetests haben, die an anderer Stelle in Ihrer PATH mit höherer Priorität als die in Ihrem virtualenv installiert ist. Ein schneller Weg, um die nose Modul und dazugehörigen nosetests Skript installierten in Ihrer aktuellen virtualenv höchsten Priorität zu geben, ist Ihre PATH zu bearbeiten:

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

In der gleichen Situation, die ich die virtualenv für den Weg zum Nachladen benötigen korrekt aktualisiert werden:

deactivate 
env/bin/activate 
+0

Dies ist derjenige, der es für mich getan hat. Irgendeine Idee, warum Sie nach der Installation von Nase (oder Nase2, in meinem Fall) wieder aktivieren müssen? – hansmosh

+0

@hansmosh, kann derzeit nicht testen, wäre es sinnvoll, alle Pfade zu überprüfen –

1

Wenn alles andere fehlschlägt, versuchen Sie in Ihrem Venv Installation Nase und/oder nosetests-2.7 laufen. Ich glaube @ Andrea-Zonca's Antwort hat die gleiche Wirkung, wenn Ihr Venv Python ist 2.7