首页 > 解决方案 > 如何声明无法单独构建的 tox 依赖项

问题描述

我正在使用 tox 来测试我的包,但是我的依赖项之一不能单独安装。它具有构建时依赖项,但没有 pyproject.toml 文件。一个明显的解决方案是分叉依赖项并添加一个 pyproject.toml,但理想情况下,我不会仅仅为了测试我的代码而修改第三方依赖项。

有没有办法将具有(未声明的)构建时依赖项的依赖项安装到 tox 测试环境中?

例如 tox.ini

[tox]
minversion = 3.23.0
envlist = py36
deps = 
    numpy
    cython

[testenv]
deps = madmom==0.16.1

标签: pythontox

解决方案


您可以使用 docker 安装所有非 pip 依赖项,然后设置tox.allowlist_externals要在command参数中使用的二进制文件。您可以将其与docker 多阶段构建结合使用,以确保构建时间依赖项不会出现在最终的 docker 映像中。

或者您可以使用 tox配置选项来修改安装流程。您可以考虑修改commands_pre以在运行之前执行您需要的任何操作commands

例如

[tox]
allowlist_externals =
    apt-get

[testenv]
commands_pre = 
    apt-get install build-essential
commands =
    pytest

您仍然需要将第二种方法与tox.allowlist_externals安装命令结合使用。

选项 2 有点粗略。如果numpy是您所需要的,那么确保apt-get install build-essential在运行之前运行tox可能就是您所需要的。


推荐阅读