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