47

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

奇怪的是我可以设置

test_suite = 'nose.collector'

在 setup.py 并运行测试就好了

python setup.py test

但是当直接运行nosetests时,会出现各种导入错误。

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

有什么想法吗?

谢谢!!

4

9 回答 9

63

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

(env1)$ pip install nose -I

从那时起,您可以nosetests像往常一样运行。

于 2011-05-07T02:35:46.013 回答
45

你能跑myenv/bin/python /usr/bin/nosetests吗?那应该使用虚拟环境的库集运行 Nose。

于 2009-05-14T18:32:54.263 回答
11

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

deactivate
env/bin/activate
于 2013-09-17T21:54:09.570 回答
9

我遇到了类似的问题。以下解决方法有帮助:

python `which nosetests` 

(而不仅仅是nosestests

于 2011-03-23T18:35:21.053 回答
8

这对我有用:

$ 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 模块中的测试,您可以通过。

于 2009-05-14T20:59:22.493 回答
1

如果一切都失败了,请尝试在您的 venv 中安装鼻子,和/或运行nosetests-2.7. 如果您的 venv python 为 2.7,我相信@andrea-zonca 的答案具有相同的效果

于 2013-09-24T00:51:41.037 回答
0

也许这是最近的变化,但对我来说,当我通过 pip 安装 nosetests 时,安装了一个 nosetests 可执行文件.virtualenvs/<env>/bin,它(不出所料)与 virtualenv 一起正常运行。

于 2011-09-07T01:55:32.053 回答
0

你可能有一个nosetests安装在你的其他地方,PATH其优先级高于安装在你的 virtualenv 中的那个。将安装在当前 virtualenv 中的nose模块和相关脚本置于最高优先级的一种快速方法是编辑您的:nosetestsPATH

export PATH=/path/to/current/virtualenv/bin:$PATH
于 2013-06-06T17:18:33.527 回答
0

晚会迟到了。

无论如何,如果您在 2021 年看到这一点…… 对我来说,这些问题是通过将我的 Virtual Envs 更新到至少 Python 3.8.2 来解决的。

于 2021-01-16T18:21:15.403 回答