2017-02-11 11 views
3

私は既存のpip-installableプロジェクトに機能を追加しています。プロジェクトオーナーはsetup.pyのインストール要件にpandasを追加するのが「非常に重い」と感じています。私が追加している機能はpandasを必要としません(機能はpandas.DataFrameオブジェクトの上にあるためです)。私が書き込んだ単体テストでは、pandasからsetUpに変更するテストDataFrameを呼び出す必要があります。パッケージはテスト用にのみ必要であり、インストール用には必要ないものはありますか?

ユニットテストにのみpandasを必要とする方法はありますか?または、それを要件に追加していないだけで、単体テストの実行時に手動でpandasをインストールするとエラーが発生しますか?

答えて

2

はい、それはsetuptoolsに簡単です:

# setup.py 
from setuptools import setup 

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

今、あなたはアプリ、使用上で開発する場合:多くの人が開発に `pip` /` virtuelenv`コンボを使用しているので

pip install --editable .[dev] 
+1

私は 'tests_require'はこれがより良いアプローチだと思います。これは、プロダクションでは決して利用できないオプション機能を作成するからです。 – languitar

+0

以前は 'tests_require'を使用していましたが、依存関係をインストールする方法が嫌いなので、離れた場所に移動しました。誰もがテストスイートを実行する方法として 'python setup.py test'を使用することを望んでいません。 – wim

+1

この方法でも、オプション機能の使用方法に関する知識が必要であり、パッケージのインストール時にその機能をアドバタイズします。これには正当な理由があるかもしれませんが、一般的には、このような「ハック」に訴える前に、意図したメカニズムを使用することをお勧めします。また、 'tests_require'は将来修正される可能性があります。 – languitar

1

setuptoolsでは、install_requiresと同様の方法でtests_requireを使用して、テストにのみ必要なパッケージを一覧表示できます。

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

+2

現時点で(そして質問が明示的に "pip-installable project"と言っている)、私は答えが少なくともそれに言及すべきだと思う: 'pandas'はvirtualenvにインストールされていないプロジェクトのsetupディレクトリにダウンロードされる。これは、開発者が望んでも期待したものでもない可能性があります。 – wim

関連する問題