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