Проблемы с использованием носа в виртуальной среде

StackOverflow https://stackoverflow.com/questions/864956

Вопрос

Я не могу использовать нос (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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top