为什么在虚拟环境中运行nosetests时出现“无效命令nosetests”的错误?

5 投票
2 回答
3171 浏览
提问于 2025-04-17 16:25

我第一次在把这个项目加载到Jenkins时发现了问题。更奇怪的是,我可以通过以下步骤重现这个问题:

在项目的原始版本中,下面的命令可以正常运行测试:

.venv/bin/python setup.py nosetests

然后我做了以下几步:

  1. 克隆项目:hg clone my-project my-project-clone
  2. 在克隆的项目中创建一个虚拟环境 .venv
  3. 从克隆的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.pysetup.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 选项了。

以下是一些有用的链接:

撰写回答