指定在哪里安装distribute/setuptools包的'tests_require'依赖项

Dan*_*rro 42 python testing setuptools distribute

当我运行setup.py中python setup.py test列出的依赖项时tests_require,会将其下载到当前目录.我想在site-packages中安装这些依赖项,就像python setup.py install我运行时列出的依赖项一样requires.

Jas*_*mbs 45

你没有问过一个问题,但是你已经暗中提出了一个问题,"在运行install时,如何强制setuptools将测试依赖项(由tests_require参数指定)安装到Python环境中?" 我会回答这个问题.

您无法指定安装测试要求的位置.tests_require参数的重点是指定安装包不需要的依赖关系,但仅用于运行测试(因为您可以想象许多消费者可能希望安装包但不运行测试).如果您希望在安装期间包含测试要求,我会将它们包含在install_requires参数中.例如:

test_requirements = ['pytest>=2.1', 'dingus']
setup(
    # ...
    tests_require = test_requirements,
    install_requires = [
        # ... (your usual install requirements)
    ] + test_requirements,
)
Run Code Online (Sandbox Code Playgroud)

据我所知,在没有更改安装脚本的情况下,没有参数可以强制执行此行为.

  • 我发现[这篇文章](http://reinout.vanrees.org/weblog/2009/12/17/managing-dependencies.html)描述了为类似目的使用'extras'. (3认同)
  • 我不再推荐这种技术。如果安装需要测试(无论测试是否需要),只需将它们放在“install_requires”中,而不必费心将它们添加到“tests_require”中。 (2认同)

Tib*_*him 21

您可以使用virtualenv来避免这种情况,并将额外的软件包安装到lib/pythonX/site-packages中的默认位置.首先,您应该在setup.py中将测试要求定义为额外内容:

setup(
    # ...
    install_requires=[
        # ... (your usual install requirements)
    ],
    extras_require={
        'testing': [
            # ... (your test requirements)
        ]
    },
)
Run Code Online (Sandbox Code Playgroud)

然后安装包含这样的测试要求的包:

pip install -e ".[testing]"
Run Code Online (Sandbox Code Playgroud)

  • 这适用于`tests_require`吗? (9认同)

sch*_*o72 15

我正在使用pip来实现类似的目标.我没有在我的setup.py 中添加tests_requiresextras,而是创建了一个pip需求文件.

示例我的dev_requirements.txt文件:

pytest
webtest
Run Code Online (Sandbox Code Playgroud)

然后安装它运行:

$ pip install -r dev_requirements.txt
Run Code Online (Sandbox Code Playgroud)

  • 我相信`requirements-dev.txt`和`requirements-test.txt`是这些文件更常用的名称。 (2认同)