setup.py 中的条件 setup_requires 依赖项

Conditional setup_requires dependencies in setup.py

有什么方法可以告诉 pip 在不需要时跳过某些 setup_requires 依赖项吗?

在我的场景中,我在 setup.py 中将 pytest-runner 声明为设置依赖项(用于执行测试)。当我尝试安装我的包时(即:pip install my-package.tar.gz),它会下载 pytest-runner 或失败它不可用 (*)。

在setup.py我有:

...
setup_requires=['pytest-runner', 'flake8']
...

我想告诉 setup.py 只有在执行测试时才使用 pytest-runner。这可能吗?

正如@deceze 所建议的,此声明将起作用:

setup_requires=['pytest-runner', 'flake8'] if 'test' in sys.argv else []

但我不想给 setup.py 添加逻辑。

(*) 环境非常受限,这就是为什么下载依赖是一个障碍。

将其声明为 extra:

是有意义的
setup(
    ...,
    extras_require=dict(
        tests=[
            'pytest-runner'
        ]
    )
)

你专门用 pip install my-package[tests] 安装它。

作为替代方案:setup.py 是一个功能齐全的 Python 程序……如果您能以某种方式检测您的环境,您可以动态决定是否将某些依赖项添加到需求列表中。

rwt (运行 With This) 似乎是首选的方式。

它提供按需依赖解析,使包在解释器会话期间可用。 它的目标场景之一是:test runners.

安装 rwt (*) 后,您可以从执行的 pytest-runner 模块加载 setup.py 命令:

rwt pytest-runner -- setup.py test

python -m rwt pytest-runner -- setup.py test

(*) 您仍然必须安装一个不需要的依赖项(即:rwt),但它似乎比安装其他依赖项影响更小。