当我使用命令nt
时,我看到的所有documentation都说setuptools将处理安装测试依赖项。测试套件运行后,它们在哪里安装?它们是否已从计算机中删除?我注意到该命令完成后,实际上没有任何测试模块真正安装到我的虚拟环境中。
我知道它会占用python setup.py test
列表中的所有模块,并将它们安装在某个位置,但是我不确定该在哪里,之后如何处理它们以及为什么这样做。另外,有没有办法在不使用标志的情况下将参数传递给命令,例如配置文件或其他东西?
答案 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
。