如何强制“setup.py test”将依赖项安装到我的“virtualenv”中



为了使我的应用程序pip可安装,我正在与setuptoolsdistribute进行激烈的斗争。我认为我的依赖关系是正确的,即使用pip install myapp安装可能会正确填充虚拟环境。然而,我想在进行开发时简化开发,所以我的目标是从一个空的virtualenv开始,让setup.py test(以及后来的setup.py develop,但这是一场完全不同的战斗)用所有定义的依赖项来填充它。

现在我的问题是:无论我怎么努力,我得到的都是作为.egg安装在我的项目目录中的依赖项,这至少是次优的。我尝试创建一个新的setuptools命令,该命令将使用pip(这似乎很有效,尽管很尴尬),但这并不是真正的解决方案(即子类化和覆盖)。

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

根据设计,您不能使tests_requiressetup_requires条目进入虚拟环境。这个想法是将执行测试/设置所需的内容和实际使用所安装的软件包所需的信息分开。例如,我可能要求在包上运行测试时需要"覆盖率"模块,但包中的任何代码都没有使用它。因此,如果当我去运行测试时,我的环境中没有"覆盖率",如果我的包不需要,我就不希望"覆盖率"安装到环境中。

如果使用setuptools,则可以使用setup方法的tests_require关键字参数指定测试依赖关系。

from setuptools import setup
setup(
    name='your-package-name',
    version='1.0.0',
    author='me',
    author_email='me@mybasement.com',
    install_requires=['Pygments>=1.4'],
    tests_require=['nose'],
    packages=[
        'your_package_name',
    ],
)

当您运行python setup.py test时,这将检查nose,并使用pip将其安装到当前活动的virtualenv(如果还不可用)。

请注意,如果使用distribute.core.setuptest命令也不可用),则会忽略此参数。

相关内容

  • 没有找到相关文章

最新更新