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

3
当我使用命令python setup.py test时,我看到的所有文档都说setuptools将处理测试依赖项的安装。它们被安装在哪里,并且运行测试套件后会从机器上删除吗?我注意到,在此命令完成后,没有任何测试模块实际安装到我的虚拟环境中。
我知道它需要tests_require列表中的所有模块,并在某个地方安装它们,但我不知道安装后的操作,也不知道为什么要这样做。此外,是否有任何方法可以在不使用标志的情况下通过配置文件或其他方式传递参数给命令?
2个回答

3

1
它会将它们安装到代码库的一个自动创建的子目录named.eggs中作为.egg。这是因为.egg旨在可以从任何位置导入。
在现代环境下,这很可能不起作用,因为软件包不再以.egg形式分发(已经输给了.whl),所以setuptools必须从源代码构建它们(bdist_egg)。这很可能会失败,因为许多广泛使用的二进制软件包具有非平凡的构建要求(更不用提需要的时间和事实,即软件包没有像.egg那样进行测试,也可能在打包时失败)。
相反,将构建要求列在requirements.txt中,并在构建之前调用pip install -r requirements.txt似乎已成为普遍做法。但这并不意味着setup.py能够自动从源代码构建。

我尝试过从setup.py中安装它们,但这被证明很脆弱(例如,如果用户没有对site-packages的写访问权限)。

至少一些知名项目采用的最佳解决方案似乎是,如果它们不存在,则使setup.py失败。如果要求不是Python而是C库,则此方法特别有用,因为setup.py无法在特定环境中安装这些库。正如您所看到的,这与requirements.txt自然补充。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接