关于python:在virtualenv中使用鼻子的问题

Problems using nose in a virtualenv

我无法在virtualenv项目中使用"鼻子"(noestests)-它似乎找不到在virtualenv环境中安装的软件包。

奇怪的是我可以设定

1
test_suite = 'nose.collector'

在setup.py中运行测试,就像

1
python setup.py test

但是当直接进行鼻子测试时,会出现各种各样的导入错误。

我已经尝试过在整个系统范围内安装鼻子和一个virtualenv鼻子包,但没有运气。

有什么想法吗?

谢谢!!


您需要在虚拟环境中安装一份鼻子的副本。为了强制将鼻子安装到virtualenv中,即使它已经安装在全局站点程序包中,请使用-I标志运行pip install

1
(env1)$ pip install nose -I

从那时起,您可以照常运行nosetests


您可以运行myenv/bin/python /usr/bin/nosetests吗?那应该使用虚拟环境的库集来运行Nose。


在相同的情况下,我需要重新加载virtualenv才能正确更新路径:

1
2
deactivate
env/bin/activate


我遇到了类似的问题。以下变通办法有所帮助:

1
python `which nosetests`

(而不只是nosestests)


这对我有用:

1
2
3
4
5
6
7
$ 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内部,则会看到:

1
2
3
4
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子命令运行测试:

1
2
3
4
5
6
7
8
(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运行相同的测试:

1
2
3
4
5
6
(env1)$ pushd src
(env1)$ nosetests slither/
..
Ran 2 tests in 0.007s
OK
(env1)$ popd

另请注意,nosetests对于可执行文件可能会比较挑剔。如果希望--exe在可执行的python模块中发现测试,则可以通过。


如果所有其他方法都失败,请尝试在您的venv中安装鼻子,和/或运行nosetests-2.7。我相信如果您的venv python是2.7,@ andrea-zonca的答案也有相同的效果


您可能在PATH中的其他位置安装的nosetests优先级高于在virtualenv中安装的nosetests。将nose模块和关联的nosetests脚本安装在当前virtualenv中的首要任务的快速方法是编辑PATH

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

也许这是最近的更改,但是对我来说,当我通过pip安装耐压测试时,在.virtualenvs//bin中安装了耐压测试可执行文件,该程序(毫无疑问)与virtualenv一起正常运行。