如何在tox中声明无法在隔离环境下构建的依赖项
问题原因
你当前配置中的[tox]块下的deps是tox自身运行所需的依赖,不会被安装到测试虚拟环境中,同时pip默认开启了构建隔离机制,就算测试环境提前装了构建依赖,默认构建第三方包时也不会读取环境里的依赖,所以madmom构建时找不到所需的cython、numpy才会安装失败。
可行解决方案
以下方案都不需要修改第三方依赖包代码,仅调整tox配置即可实现安装:
方法1:关闭pip构建隔离,复用测试环境依赖
给pip添加--no-build-isolation参数,让pip在构建madmom时直接使用测试环境里已经安装的依赖,配置修改如下:
[tox] minversion = 3.23.0 envlist = py36 [testenv] deps = numpy cython madmom==0.16.1 # 自定义安装命令,关闭构建隔离 install_command = pip install --no-build-isolation {opts} {packages} commands = # 替换为你实际使用的测试命令 pytest
注意:该方法要求你提前把目标包的所有构建依赖都写到
testenv的deps列表中,否则会出现构建失败。
方法2:拆分安装步骤,预安装构建依赖
如果不想全局关闭构建隔离,可以利用tox的pre_install配置项,在安装业务依赖前先完成构建依赖的安装,再单独安装目标包,配置如下:
[tox] minversion = 3.23.0 envlist = py36 [testenv] # 预安装构建依赖 pre_install = pip install numpy cython deps = madmom==0.16.1 commands = pytest
内容的提问来源于stack exchange,提问作者xaviersjs
相关产品推荐
相关产品推荐

