Ответ 1
Вы можете запустить myenv/bin/python /usr/bin/nosetests
? Это должно запустить Nose с помощью набора виртуальной среды.
Я не могу использовать нос (nosetests) в проекте virtualenv - он не может найти пакеты, установленные в среде virtualenv.
Странно, что я могу установить
test_suite = 'nose.collector'
в setup.py и запустите тесты просто как
python setup.py test
но при запуске nosetests прямо, есть всевозможные ошибки импорта.
Я пробовал это как с общесистемной установкой носа, так и с виртуальным пакетом носа и без везения.
Любые мысли?
Спасибо!!
Вы можете запустить myenv/bin/python /usr/bin/nosetests
? Это должно запустить Nose с помощью набора виртуальной среды.
Вам нужно иметь копию носа, установленную в виртуальной среде. Чтобы принудительно установить нос в virtualenv, даже если он уже установлен в глобальных пакетах сайтов, запустите pip install
с флагом -I
:
(env1)$ pip install nose -I
С этого момента вы можете просто запустить nosetests
, как обычно.
Вот что работает для меня:
$ 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.
У меня возникла аналогичная проблема. Обходное решение помогло:
python `which nosetests`
(вместо просто nosestests
)
В той же ситуации мне нужно было перезагрузить virtualenv
для правильного обновления пути:
deactivate
env/bin/activate
Если все остальное не удается, попробуйте установить нос в своем вену и/или запустите nosetests-2.7
. Я считаю, что ответ @andrea-zonca имеет тот же эффект, если ваш venv python равен 2.7
Возможно, это недавнее изменение, но для меня, когда я установил nosetests через pip, в .virtualenvs/<env>/bin
был установлен исполняемый файл nosetests, который (неудивительно) корректно работает с virtualenv.
У вас может быть nosetests
, который устанавливается где-то еще в вашем PATH
с более высоким приоритетом, чем тот, который установлен в вашем virtualenv. Быстрый способ предоставить модуль nose
и связанный с ним nosetests
script, установленный в вашем текущем приоритете virtualenv, - это отредактировать PATH
:
export PATH=/path/to/current/virtualenv/bin:$PATH