39

でプロジェクトを作成しましたが、 でsetuptoolsテストしたいと思いtoxます。変数に依存関係をリストし、setup()パラメーター ( tests_requireand extras_require) に追加しました。tests_require私のプロジェクトは、テストのためにリストされているすべての依存関係をインストールする必要がありますが、インストールしpip installていません。

私はこれを試しましたが、うまくいきませんでした:

install_command = pip install {opts} {packages}[tests]

複数の依存関係リストを管理せずにテスト依存関係をインストールするにはどうすればよいですか (つまり、両方test_requirements.txttests_require変数にすべての依存関係をリストする必要があります)。

4

4 に答える 4

57

これは、余分な要件をわずかに悪用することで実現しました。あなたはほとんどextras構文を試していましたが、tests_requiredepはそのように自動的に利用可能ではありません.

このsetup.pyようなもので:

from setuptools import setup

test_deps = [
    'coverage',
    'pytest',
]
extras = {
    'test': test_deps,
}

setup(
    # Other metadata...
    tests_require=test_deps,
    extras_require=extras,
)

次に、たとえばプロジェクトのルート ディレクトリから、extras 構文を使用してインストールされたテストの依存関係を取得できます。

$ pip install .[test]

同じ構文を Tox in に与えます。tox.iniデフォルトを調整する必要はありませんinstall_command:

[testenv]
commands = {posargs:pytest}
deps = .[test]

依存関係リストを 2 つの場所で維持する必要がなくなり、それらは、公開されたパッケージの必要な場所 (requirements.txtファイルではなくパッケージ メタデータ) で表現されます。

このちょっとした余分なハックはそれほど珍しいことではないようです

于 2016-12-30T15:44:02.670 に答える
4

あなたができることは、単一のファイル(と呼ばれるtest_requirements.txt)を持ち、テストの依存関係を次のようにリストすることです:

dnspython==1.12.0
easydev==0.8.3
enum34==1.0.4
fabric==1.10.1
...

次に、 でsetup.py、ファイルの内容を解析してリストに格納し、そのリストを に渡しますsetup

tests_require = [line.strip() for line in 
                 open('test_requirements.txt')
                 if line.strip() and not line.strip().startswith('--')]

setuptools.setup(
    ...
    tests_require=tests_require,
    ...
)
于 2015-04-25T22:24:44.837 に答える