web-dev-qa-db-ja.com

setup.pyからのtoxのpipインストールテスト依存関係

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

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

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

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

26
item4

余分な要件 を少し乱用することでこれを達成しました。あなたはもう少しでエクストラ構文を試していましたが、_tests_require_ depsは自動的には利用できません。

このような_setup.py_の場合:

_from setuptools import setup

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

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

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

_$ pip install .[test]
_

同じ構文を_tox.ini_のToxに与えます。デフォルトの_install_command_を調整する必要はありません。

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

これで、依存関係リストを2か所で管理する必要がなくなり、公開されたパッケージの場所を表すことができます:_requirements.txt_ファイルではなく、パッケージングメタデータで。

この小さなエクストラはハッキングされているようです それほど珍しいことではありません

36
ches

あなたができることは、単一のファイル(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,
    ...
)
4
chown

次のコマンドを使用すると、Toxはテストを実行する前にtest_requiresをインストールします。

commands = {envpython} setup.py test

setup.pyに追加 も必要です。

test_suite="tests_module"

最後に、 here は、Niceの例を使用した同様の質問に対する回答です。

2
Javier

Toxは python setup.py test を避けることを推奨しています。したがって、「tests_require」の代わりに、toxがうまくいく「extras」を自由に使用できます。

Deps =。[test]を呼び出すと、現在の作業ディレクトリからパッケージ全体がインストールされます。 toxはその操作後もsdistをインストールするので、少し無駄です。また、メインパッケージをsdistからインストールする場合は、おそらくそれらからも「エクストラ」をインストールする必要があります。

Install_commandを編集すると、「tests_require」ではなく、「extras」から「tests」がインストールされます。機能しても、depsにリストされているすべてのアイテムに影響を与えますが、良い考えではありません。

解決

Tox 2.6に extras オプションが導入されました。これにより、sdistから 'extras'がインストールされます。これは、sdistの場合のみで、通常のsdistインストールを行っていたときです。

1
Guy Gangemi