Подтвердить что ты не робот

Проблемы с использованием носа в virtualenv

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

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

test_suite = 'nose.collector'

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

python setup.py test

но при запуске nosetests прямо, есть всевозможные ошибки импорта.

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

Любые мысли?

Спасибо!!

4b9b3361

Ответ 1

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

Ответ 2

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

(env1)$ pip install nose -I

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

Ответ 3

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

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

Ответ 4

У меня возникла аналогичная проблема. Обходное решение помогло:

python `which nosetests` 

(вместо просто nosestests)

Ответ 5

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

deactivate
env/bin/activate

Ответ 6

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

Ответ 7

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

Ответ 8

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

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