如何强制`setup.py test`在我的`virtualenv`中安装依赖项?

Nik*_*nko 30 python setuptools virtualenv distribute

在讨伐令我的应用程序pip-installable,我打大打架setuptoolsdistribute.我假设我的依赖项是正确的,即安装pip install myapp可能应该正确填充虚拟环境.但是,我想在我开始的时候简化开发,所以我的目标是从一个空的virtualenvmake开始setup.py test(后来setup.py develop,但这是一个完全不同的斗争)用所有定义的依赖项填充它.

现在我的问题是:无论我怎么努力,我得到的都是依赖项安装.egg在我的项目目录中,这至少是次优的.我尝试创建一个setuptools可以使用的新命令pip(虽然看起来很笨拙但看起来很有用),但这不能成为解决方案(子类化和重写).

那么如何setup.py test填充virtualevn而不是我的工作目录呢?

Ben*_*oot 12

按照设计,您不能使tests_requiressetup_requires条目进入虚拟环境.我们的想法是分离执行测试/设置所需的内容以及实际使用正在安装的软件包所需的内容.例如,我可能要求在我的包上运行测试需要"覆盖"模块,但我的任何代码都不会使用它.因此,如果我在运行测试时在我的环境中没有"覆盖",如果我的软件包不需要,我不希望将"覆盖"安装到环境中.

  • 我的意思是test_requires的目的,如果它只是被忽略了......我完全错过了在执行`setup.py tests`时它不被忽略/ venv行为似乎令人惊讶,我明白它不应该是默认的但是你应该能够强制pip安装test_requires ... http://stackoverflow.com/a/15422703/1240268 (6认同)
  • 对不起,这并不能解释为什么运行`python setup.py test`不会在当前的venv上安装deps.如果要运行测试,最好确保所有deps都运行测试. (5认同)
  • 那test_requires的目的是什么? (3认同)
  • 这就是*被*区别对待(`setup.py test`在库存中安装test_requires deps).无论如何,我们要围成一圈. (3认同)
  • 我会认为 `tests_require` 的重点是强制在 `setup.py test` 上而不是在 `setup.py install` 上安装测试依赖项,至少对我来说,这似乎应该是所需的行为。 (3认同)
  • 在某些情况下,您的测试可能具有您的包没有的额外依赖性,以便执行其测试.一个特殊的例子是"鼻子"包,它可能永远不会在项目的任何其他地方使用,而是测试.这允许您在没有测试的情况下发送包,而不会给用户带来不必要的依赖性以使包工作. (2认同)