Проблемы с использованием носа в virtualenv - PullRequest
46 голосов
/ 14 мая 2009

Я не могу использовать нос (тестирование носа) в проекте virtualenv - кажется, он не может найти пакеты, установленные в среде virtualenv.

Странно то, что я могу установить

test_suite = 'nose.collector'

в setup.py и запускайте тесты просто как

python setup.py test

но при прямом тестировании носа возникают всевозможные ошибки при импорте.

Я пробовал это как для общесистемной установки носа, так и для пакета virtualenv, но не повезло.

Есть мысли?

Спасибо !!

Ответы [ 8 ]

60 голосов
/ 07 мая 2011

Вам нужно иметь установленную копию носа в виртуальной среде. Чтобы принудительно установить нос в virtualenv, даже если он уже установлен в глобальных пакетах сайта, запустите pip install с флагом -I:

(env1)$ pip install nose -I

С этого момента вы можете просто запустить nosetests как обычно.

44 голосов
/ 14 мая 2009

Вы в состоянии запустить myenv/bin/python /usr/bin/nosetests? Это должно запустить Nose с использованием набора библиотек виртуальной среды.

10 голосов
/ 18 сентября 2013

В той же ситуации мне нужно было перезагрузить virtualenv для правильного обновления пути:

deactivate
env/bin/activate
9 голосов
/ 23 марта 2011

У меня похожая проблема. Помог следующий обходной путь:

python `which nosetests` 

(вместо nosestests)

8 голосов
/ 15 мая 2009

Вот что у меня работает:

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

Я создал действительно базовый пакет slither, у которого в setup.py был такой же атрибут test_suite, как вы упоминали выше. Затем я поместил исходный код пакета в env1/src.

Если вы загляните внутрь env1/src, вы увидите:

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 

Я могу запустить тесты с помощью подкоманды 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

Или я могу запустить те же тесты с nosetests:

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

Также обратите внимание, что nosetests может быть требователен к исполняемым файлам. Вы можете пройти --exe, если хотите, чтобы он обнаруживал тесты в исполняемых модулях Python.

1 голос
/ 24 сентября 2013

Если ничего не помогло, попробуйте установить нос в вену и / или запустить nosetests-2.7. Я считаю, что ответ @ andrea-zonca имеет тот же эффект, если ваш венвский питон равен 2,7

0 голосов
/ 06 июня 2013

У вас может быть nosetests, который установлен где-то еще в вашем PATH с более высоким приоритетом, чем тот, который установлен в вашем virtualenv. Быстрый способ присвоить модулю nose и связанному сценарию nosetests, установленному в вашем текущем приоритете virtualenv, - отредактировать PATH:

export PATH=/path/to/current/virtualenv/bin:$PATH
0 голосов
/ 07 сентября 2011

Возможно, это недавнее изменение, но для меня, когда я установил тесты носа через pip, в .virtualenvs/<env>/bin был установлен исполняемый файл тестов носа, который (что неудивительно) правильно работает с virtualenv.

...