Reputation: 1325
I am unable to use nose (nosetests) in a virtualenv project - it can't seem to find the packages installed in the virtualenv environment.
The odd thing is that i can set
test_suite = 'nose.collector'
in setup.py and run the tests just fine as
python setup.py test
but when running nosetests straight, there are all sorts of import errors.
I've tried it with both a system-wide installation of nose and a virtualenv nose package and no luck.
Any thoughts?
Thanks!!
Upvotes: 47
Views: 14818
Reputation: 1601
Late to the party.
Regardless, if you see this in the year 2021... These issues, for me, surrounding nose, nose-cov and pinocchio were resolved by updating my Virtual Envs to at least Python 3.8.2..
Upvotes: 0
Reputation: 1864
If all else fails, try installing nose in your venv, and/or run nosetests-2.7
. I believe @andrea-zonca's answer has the same effect if your venv python is 2.7
Upvotes: 1
Reputation: 8783
In the same situation I needed to reload the virtualenv
for the path to be correctly updated:
deactivate
env/bin/activate
Upvotes: 12
Reputation: 2051
You might have a nosetests
that is installed somewhere else in your PATH
with higher priority than the one installed in your virtualenv. A quick way to give the nose
module and associated nosetests
script installed in your current virtualenv top priority is to edit your PATH
:
export PATH=/path/to/current/virtualenv/bin:$PATH
Upvotes: 0
Reputation: 8442
Perhaps this is a recent change, but for me, when I installed nosetests through pip, there was a nosetests executable installed in .virtualenvs/<env>/bin
, which (unsurprisingly) operates correctly with the virtualenv.
Upvotes: 0
Reputation: 2495
You need to have a copy of nose installed in the virtual environment. In order to force installation of nose into the virtualenv, even though it is already installed in the global site-packages, run pip install
with the -I
flag:
(env1)$ pip install nose -I
From then on you can just run nosetests
as usual.
Upvotes: 63
Reputation: 393
I got a similar problem. The following workaround helped:
python `which nosetests`
(instead of just nosestests
)
Upvotes: 9
Reputation: 30963
Here's what works for me:
$ 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"
I created a really basic package slither
that had, in its setup.py
, same test_suite
attribute as you mentioned above. Then I placed the package source under env1/src
.
If you looked inside env1/src
, you'd see:
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
I can run the tests using test
subcommand:
(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
Or, I can run the same tests with nosetests
:
(env1)$ pushd src
(env1)$ nosetests slither/
..
Ran 2 tests in 0.007s
OK
(env1)$ popd
Also note that nosetests
can be picky about executables. You can pass --exe
if you want it to discover tests in python modules that are executable.
Upvotes: 8
Reputation: 201016
Are you able to run myenv/bin/python /usr/bin/nosetests
? That should run Nose using the virtual environment's library set.
Upvotes: 45