私は、連続ビルドサーバーで私のPythonプロジェクトのテストを実行するのにtox
とcoverage.py
を使用しています。私はpython3.5 setup.py install
を使ってインストールしたベンダー(PyPIでは利用できません)のpkg_x
パッケージを持っています。これは/usr/lib/python3.5/site-packages
です。今では、そのパッケージをテストコードで利用できるようにする必要があります。Toxとlibとlib64とサイトパッケージ
私の現在のtox.ini
は次のようになりません:
[tox]
envlist = py35
[testenv]
deps = nose
coverage
commands = coverage run -m nose []
sitepackages = True
と、私はそうのようなテストを実行します。見事に失敗し
python3.5 -m tox -- --verbose --with-doctest
を - 私の地元setup.py
(例えば、公開に記載されている依存パッケージのどれも関連するパッケージを含むと思われる.tox/py35/lib/python3.5/site-packages/more_itertools
のようなディレクトリを作成しても、more_itertools
のようなもの)が見つかります。私は.tox/py35/bin/python3.5
を起動した場合、sys.path
は次のようになります。
>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages']
私は私のtox.ini
からsitepackages = True
行を削除した場合、私は遠く得るか、という点でmore_itertools
のようにパッケージ化し、私のsetup.py
依存関係にあるものの残りの部分ができます今では見つかりましたが、上記のベンダーパッケージpkg_x
はまだ見つかりません。そしてsys.path
は次のようになります。どちらの場合
>>> [re.compile('.*\\.tox').sub('.tox', x) for x in sys.path]
['',
'.tox/py35/lib64/python35.zip',
'.tox/py35/lib64/python3.5',
'.tox/py35/lib64/python3.5/plat-linux',
'.tox/py35/lib64/python3.5/lib-dynload',
'/usr/lib64/python3.5',
'/usr/lib/python3.5',
'.tox/py35/lib/python3.5/site-packages',
'/usr/lib64/python3.5/site-packages',
'/usr/lib/python3.5/site-packages']
.tox/py35/
はどこかのベンダーのパッケージpkg_x
を含んでいるように見えるん。ディレクトリ/usr/lib/python3.5/site-packages
が表示されますが、.tox/py35/bin/python3.5
を手動で起動すると、テストを実行するときにpkg_x
が実際に見つかりません。またsitepackages = True
ように見える
は右、 http://tox.readthedocs.io/en/latest/config.html#confval-sitepackages=True|Falseで行うことを文書化しているものとは逆の効果を持っていますか?
アドバイスありがとうございます!説明から
私が見ているのと同じようなToxの問題にコメントを付けました:https://github.com/tox-dev/tox/issues/461#issuecomment-303855697 –
'tox'はそれ自身を作成しますvirtualenv's。あなたはvirtualenvにどのくらい精通していますか? '.tox'ディレクトリのvenvを有効にしてそこからデバッグしてください。 –