setuptools如何在python setup.py test命令上安装测试依赖项

时间:2019-03-07 03:07:30

标签: python setuptools

当我使用命令nt时,我看到的所有documentation都说setuptools将处理安装测试依赖项。测试套件运行后,它们在哪里安装?它们是否已从计算机中删除?我注意到该命令完成后,实际上没有任何测试模块真正安装到我的虚拟环境中。

我知道它会占用python setup.py test列表中的所有模块,并将它们安装在某个位置,但是我不确定该在哪里,之后如何处理它们以及为什么这样做。另外,有没有办法在不使用标志的情况下将参数传递给命令,例如配置文件或其他东西?

2 个答案:

答案 0 :(得分:1)

避免使用python setup.py test tests_require,这是“功能”的老派。

这只是将测试部门下载到项目的安装目录,这很少是开发人员想要或期望发生的事情!在带有虚拟环境的现代CI工作流中,这并不理想,您需要将依赖项安装到站点程序包中。

The recommended way to do it using setuptools these days is with an extras_require tag.。有关示例,请参见here

答案 1 :(得分:1)

它将它们以.egg的形式安装到代码库named .eggs的自动创建的子目录中。这是因为.egg被设计为可从任何位置导入。

因此,这极有可能在现代环境中不起作用,因为软件包没有以.egg的形式分发(这与.whl失去了竞争),因此setuptools必须从源(带有bdist_egg)。对于具有非平凡的构建要求的许多广泛使用的二进制程序包,这很可能会失败(更不用说所需的时间,而且这些程序包也都未作为.egg进行测试,并且像这样打包时可能会失败)。


相反,在requirements.txt中列出构建要求并在构建之前调用pip install -r requirements.txt似乎已成为一种普遍做法。不过,这不会使setup.py可以从源代码自动构建pip

我试图自己从setup.py安装它们,但这证明是脆弱的(例如,如果用户没有对site-packages的写权限)。

至少一些引人注目的项目采用的最佳解决方案似乎是使setup.py如果不存在就会失败。如果要求不是Python而是C库,则此功能特别有用,因为setup.py仍然不知道如何在特定环境中安装这些库。如您所见,这自然补充了requirements.txt