【问题标题】:Can a package be required only for tests, not for installation?一个包可以只用于测试而不是安装吗?
【发布时间】:2017-02-11 18:41:26
【问题描述】:

我正在向现有的 pip 可安装项目添加功能,项目所有者认为我在 setup.py 安装要求中添加 pandas '太重了',因为该项目应该保持苗条。我添加的功能不需要pandas(因为该功能是在pandas.DataFrame 对象之上的操作),但我为它编写的单元测试需要调用pandassetUp 一个测试DataFrame 来变异与。

有没有办法要求pandas 仅用于单元测试?还是我只是不将其添加到需求中,并在运行该单元测试时引发错误以手动安装pandas

【问题讨论】:

    标签: python unit-testing pandas pip


    【解决方案1】:

    是的,很简单setuptools

    # setup.py
    from setuptools import setup
    
    setup(
        name='your_app',
        ...
        install_requires=...
        extras_require={
            'dev': [
                'pytest', 'pandas', 'coverage',  # etc
            ]
        },
    )
    

    现在,当您在应用上开发时,请使用:

    pip install --editable .[dev]
    

    【讨论】:

    • 我认为tests_require 是更好的方法,因为这会创建一个在生产环境中永远不可用的可选功能。
    • 我以前使用过tests_require,但因为我不喜欢安装依赖项的方式而放弃了它,你对 CI 的控制较少。不是每个人都想使用python setup.py test 作为执行测试套件的方式。
    • 这种方法仍然需要有关如何使用可选功能的知识,并在安装软件包时宣传它们。这可能有充分的理由,但通常我更愿意在诉诸这种“黑客”之前使用预期的机制。另外,tests_require 将来可能会被修复。
    • Python 打包世界中的许多东西都被破坏了,tests_require 可以说是其中之一。我不觉得dev extras 标签是个hack,相反,我觉得它更灵活、更强大。
    • @languitar 这可能会在未来发生变化,但根据 dstufft(他可能比世界上任何其他人更了解 Python 打包),using extras is correct 和当前(2017 年)。
    【解决方案2】:

    对于 setuptools,您可以使用 tests_require 以与 install_requires 类似的方式列出仅用于测试的软件包。

    参照。 https://setuptools.pypa.io/en/latest/userguide/keywords.html?highlight=tests_require

    【讨论】:

    • 由于目前很多人正在使用pip/virtuelenv 组合进行开发(并且问题明确表示“pip-installable project”),我认为答案至少应该提到它:@987654328 @ 将被下载到项目的安装目录,而不是安装在 virtualenv 中。这可能不是开发人员想要的,也不是预期的。
    • 2019 年弃用:Issue #1684 / PR #1878
    猜你喜欢
    • 1970-01-01
    • 2022-08-22
    • 2020-11-09
    • 1970-01-01
    • 2019-08-23
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多