2017-05-08 38 views
0

有没有什么办法可以告诉pip在不需要时跳过一些setup_requires依赖关系?有条件的setup需要setup.py中的依赖关系

在我的场景中,我在我的setup.py中声明了pytest-runner作为安装依赖项(用于执行测试)。当我尝试安装我的软件包(I.e:pip install my-package.tar.gz)时,它会下载pytest-runner,否则它将无法使用(*)。

在setup.py我:

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

我想告诉setup.py只执行测试时只使用pytest亚军。那可能吗?

由于@deceze建议,这个声明将工作:

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

但我不希望添加逻辑的setup.py。

(*)环境非常有限,这就是为什么下载依赖项成为障碍。

回答

0

rwt(与此运行)似乎是这样做的首选方式。

它提供按需依赖解决方案,使得套件在解释器会话期间可用。 其目标场景之一是:试跑者

安装RWT(*)后,就可以执行负荷pytest亚军模块setup.py命令:

rwt pytest-runner -- setup.py test 

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

(*),你仍然需要安装不需要的依赖(即:rwt),但它似乎比安装其他方面影响更小。

1

这是有道理的声明,作为一个extra

setup(
    ..., 
    extras_require=dict(
     tests=[ 
      'pytest-runner' 
     ] 
    ) 
) 

您特别安装与pip install my-package[tests]

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

+1

将它们声明为* extra *将不起作用,因为执行** python setup.py test **时它们将不可用,而且我不想在本地安装它们。检查环境绝对是一种选择,我希望不是唯一的选择。 –

相关问题