代码之家  ›  专栏  ›  技术社区  ›  Johnny Metz

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

  •  1
  • Johnny Metz  · 技术社区  · 6 年前

    当我使用命令时 python setup.py test ,所有的 documentation 我看到setuptools将处理安装测试依赖项。它在哪里安装它们,并在测试套件运行后从计算机中删除它们?我注意到在这个命令完成之后,没有一个测试模块真正安装到我的虚拟环境中。

    我知道它需要 tests_require 列出并安装在某个地方,但我不确定它在哪里,之后对它们做了什么,以及为什么要这样做。另外,是否有任何方法可以在不使用标志的情况下(如使用配置文件或其他东西)向命令传递参数?

    1 回复  |  直到 6 年前
        1
  •  1
  •   wim    6 年前

    避免 python setup.py test tests_require ,这是一个“特征”的老生常谈。

    这只是将测试dep下载到项目的安装目录中,这很少是开发人员希望或期望发生的事情!这在具有虚拟环境的现代CI工作流中不太适用,您希望将依赖项安装到站点包中。

    The recommended way to do it using setuptools these days is with an extras_require tag. . 见 here 举个例子。

        2
  •  1
  •   ivan_pozdeev RenanSS    6 年前

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

    因此,这在现代环境中很可能不起作用,因为包不是作为 鸡蛋 S(输给竞争对手 .whl S)所以 setuptools 必须从源代码(使用 bdist_egg )对于许多广泛使用的具有非平凡构建需求的二进制包(更不用说所需的时间和包未被测试为 鸡蛋 也可以,这样打包可能会失败)。


    相反,在 requirements.txt 调用 pip install -r requirements.txt 之前的建设似乎已经成为普遍的做法。这不会使 setup.py 根据从源自动生成 pip 不过。

    我试着自己安装 Stuff.Py 但事实证明这是脆弱的(例如,如果用户没有对 site-packages )

    至少许多知名项目采用的最佳解决方案似乎是 Stuff.Py 如果他们不在场就失败。如果需求不是python而是c库 Stuff.Py 不知道如何在特定环境中安装这些。如您所见,这是对 需求.txt 当然。