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

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

最佳答案

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

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



相反,在requirements.txt中列出构建要求并在构建之前调用pip install -r requirements.txt似乎已成为一种普遍做法。但是,这不能使setup.pypip自动从源生成。

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

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

07-28 03:00
查看更多