setuptools
を使用してプロジェクトを作成しましたが、tox
を使用してテストしたいと考えています。依存関係を変数にリストし、setup()
パラメーター(tests_require
およびextras_require
)に追加しました。私のプロジェクトでは、テストするためにtests_require
にリストされているすべての依存関係をインストールする必要がありますが、pip install
はそれらをインストールしていません。
私はこれを試しましたが、うまくいきませんでした:
install_command = pip install {opts} {packages}[tests]
複数の依存関係リストを管理せずにテストの依存関係をインストールするにはどうすればよいですか(つまり、すべての依存関係をtest_requirements.txt
変数とtests_require
変数の両方にリストします)?
余分な要件 を少し乱用することでこれを達成しました。あなたはもう少しでエクストラ構文を試していましたが、_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
_ファイルではなく、パッケージングメタデータで。
この小さなエクストラはハッキングされているようです それほど珍しいことではありません 。
あなたができることは、単一のファイル(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,
...
)
次のコマンドを使用すると、Toxはテストを実行する前にtest_requires
をインストールします。
commands = {envpython} setup.py test
setup.pyに追加 も必要です。
test_suite="tests_module"
最後に、 here は、Niceの例を使用した同様の質問に対する回答です。
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インストールを行っていたときです。