【问题标题】:How does setuptools installs test dependencies on python setup.py test commandsetuptools如何在python setup.py test命令上安装测试依赖
【发布时间】:2019-03-07 03:07:30
【问题描述】:

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

我知道它需要tests_require 列表中的所有模块并将它们安装在某个地方,但我不确定它在哪里,之后对它们做了什么以及为什么这样做。另外,有没有什么方法可以在不使用标志的情况下将参数传递给命令,比如使用配置文件或其他东西?

【问题讨论】:

    标签: python setuptools


    【解决方案1】:

    避免使用 python setup.py testtests_require,这很粗鲁,现在是 deprecated

    那个旧功能只是将测试部门下载到项目的设置目录,这很少是开发人员想要或期望发生的!这在具有虚拟环境的现代 CI 工作流程中效果不佳,您希望将依赖项安装到站点包中。

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

    【讨论】:

      【解决方案2】:

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

      因此,这很可能在现代环境中不起作用,因为软件包不是作为 .eggs 分发的(它失去了与 .whls 的竞争)所以 setuptools 必须从源代码构建它们(使用 bdist_egg )。对于许多具有非平凡构建要求的广泛使用的二进制包来说,这可能会失败(更不用说所需的时间以及包没有经过.eggs 测试的事实,并且在这样打包时可能会失败)。


      相反,在requirements.txt 中列出构建要求并在构建之前调用pip install -r requirements.txt 似乎已成为普遍做法。这不会使setup.py 可以由pip 自动从源代码构建。

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

      至少一些备受瞩目的项目采用的最佳解决方案似乎是让setup.py 在它们不存在的情况下失败。如果要求不是 Python 但 C 库作为 setup.py 不知道如何在特定环境中安装它们,这将特别有用。如您所见,这自然是对requirements.txt 的补充。

      【讨论】:

        猜你喜欢
        • 2013-07-19
        • 2016-03-02
        • 2013-08-30
        • 1970-01-01
        • 2018-03-29
        • 2015-07-04
        • 2012-03-25
        • 2014-10-02
        • 2015-01-10
        相关资源
        最近更新 更多