当我使用命令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.py
从pip
自动从源生成。
我尝试自己从setup.py
安装它们,但是事实证明这很脆弱(例如,如果用户没有对site-packages
的写权限)。
至少许多引人注目的项目采用的最佳解决方案似乎是使setup.py
如果不存在就会失败。如果要求不是Python而是C库,则这特别有用,因为setup.py
仍然不知道如何在特定环境中安装这些库。如您所见,这自然补充了requirements.txt
。