为什么在虚拟环境中运行nosetests时出现“无效命令nosetests”的错误?
我第一次在把这个项目加载到Jenkins时发现了问题。更奇怪的是,我可以通过以下步骤重现这个问题:
在项目的原始版本中,下面的命令可以正常运行测试:
.venv/bin/python setup.py nosetests
然后我做了以下几步:
- 克隆项目:hg clone my-project my-project-clone
- 在克隆的项目中创建一个虚拟环境
.venv
- 从克隆的pip freeze文件中安装依赖
如果我在这个版本上运行 .venv/bin/python setup.py nosetests
,我得到的结果是:
setup.py: error: Invalid command nosetests
setup.py
文件包含以下设置:
setup_requires=[
'nose>=1.0', 'nosexcover', 'coverage', 'selenium', 'fixture'
],
test_suite='nose.collector',
我特别困惑,因为每个版本中的 setup.py
和 setup.cfg
文件都是一样的,而且据我所知,环境也是完全相同的。
附录
我注意到侧边栏有一个 Stack Overflow的问题,看起来和我的情况很相关,但那里的解决方案在我这里都不管用。
2 个回答
1
我并没有完全搞清楚根本的问题是什么。不过,我找到了一种解决办法,让我的构建可以正常运行。这是我在Jenkins的虚拟环境构建器中使用的命令:
# require nosetests be installed
# (old method using setup.py nosetests command does not work)
$VIRTUAL_ENV/bin/pip install nose
# install remain pip requirements
$VIRTUAL_ENV/bin/pip install -r requirements.pip
# must run this prior to running tests to install other nosetest dependencies
$VIRTUAL_ENV/bin/python setup.py install
# now we can run nosetests
# this does not work: $VIRTUAL_ENV/bin/python setup.py nosetests
$VIRTUAL_ENV/bin/nosetests -c setup.cfg
我怀疑根本问题和虚拟环境的状态有关,还有可能是我新的虚拟环境中Distutils和Nose之间的版本不兼容。旧的虚拟环境似乎经过一段时间后形成了一种不太稳定的配置,而仅仅通过克隆和pip是无法重现的。
2
我遇到了同样的问题,后来通过在我的
setup_requires=['nose>=1.0']
文件中添加了一些内容来解决了这个问题。之后,我就可以使用 Python 的 setup.py nosetests
选项了。
以下是一些有用的链接: