2017-02-11 74 views
3

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

是否有某种方法只需要pandas用于单元测试?或者我只是没有把它添加到需求中,并提出一个错误,以便在单元测试运行时手动安装pandas

回答

2

是的,它是简单的setuptools

pip install --editable .[dev] 
+1

我认为'tests_require'是更好的方法,因为这会创建一个永远不会在生产中可用的可选功能。 – languitar

+0

我以前使用'tests_require',但是离开它,因为我不喜欢安装依赖关系的方式,所以在CI中控制的很少。不是每个人都想使用'python setup.py test'作为执行测试套件的方式。 – wim

+1

此方法仍然需要有关如何使用可选功能的知识,并在安装软件包时进行宣传。这可能有很好的理由,但通常我会倾向于在采用这种“黑客”之前使用预期的机制。另外,也许'tests_require'可能会在未来得到修复。 – languitar

1

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

参考当你的应用程序,使用开发

# setup.py 
from setuptools import setup 

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

现在:https://setuptools.readthedocs.io/en/latest/setuptools.html?highlight=tests_require

+2

由于很多人都在用'发展pip' /'virtuelenv'组合目前(这个问题明确地说“pip-installable project”),我认为答案应该至少提到它:'pandas'将被下载到项目的安装目录中,而不是安装在virtualenv中。这可能不是开发人员想要或预期的。 – wim