指定在distribute/setuptools包中安装'tests_require'依赖项的位置

50 投票
3 回答
34739 浏览
提问于 2025-04-16 10:14

当我运行 python setup.py test 时,setup.py 文件中列出的 tests_require 依赖会被下载到当前目录。而当我运行 python setup.py install 时,setup.py 文件中列出的 requires 依赖则会被安装到 site-packages 目录里。

我该如何把那些 tests_require 的依赖也安装到 site-packages 里呢?

3 个回答

18

我正在使用 pip 来实现类似的功能。与其在我的 setup.py 文件中添加 tests_requiresextras,我创建了一个 pip 需求文件

下面是我的 dev_requirements.txt 文件的示例:

pytest
webtest

然后要安装它,可以运行:

$ pip install -r dev_requirements.txt
29

你可以使用虚拟环境(virtualenv)来避免这个问题,并将额外的包安装到默认的位置,也就是lib/pythonX/site-packages文件夹里。首先,你需要在setup.py文件中定义你的测试需求,作为额外的内容:

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

然后,你可以像这样安装你的包和测试需求:

pip install -e ".[testing]"
54

你不能指定测试所需的库安装在哪里。tests_require这个参数的主要作用就是列出那些在安装包时不需要,但在运行测试时需要的依赖库(因为你可以想象,很多用户可能只想安装这个包,而不想运行测试)。如果你希望在安装时也包含测试所需的库,建议把它们放在install_requires参数里。例如:

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

据我所知,没有任何参数可以强制实现这个功能,除非你修改安装脚本。

撰写回答