web-dev-qa-db-ja.com

py.testがモジュールを見つけられない

この質問は次の質問に関連していますが、そこでは回答されていません。

pythonモジュールがあり、次のツリー構造があります:

mcts
|- setup.py
|- mcts
 |- __init__.py
 |- uct.py
 |- toy_world_state.py
 |- test
  |- test_uct.py
  |- test_toy_world_state.py

いくつかのディレクトリにvirtualenvを作成します

$ mkdir virtual
$ virtualenv --system-site-packages virtual
$ source virtual/bin/activate

次に、パッケージをインストールします。

$ cd /path/to/mcts
$ pip install -e .

次に、テストを実行してみます。

$ py.test mcts
================================================== test session starts ==================================================
platform linux -- Python 3.4.2 -- py-1.4.26 -- pytest-2.6.4
collected 0 items / 2 errors 

======================================================== ERRORS =========================================================
__________________________________ ERROR collecting mcts/test/test_toy_world_state.py ___________________________________
mcts/test/test_toy_world_state.py:4: in <module>
    from mcts.toy_world_state import *
E   ImportError: No module named 'mcts'
________________________________________ ERROR collecting mcts/test/test_uct.py _________________________________________
mcts/test/test_uct.py:4: in <module>
    from mcts.uct import *
E   ImportError: No module named 'mcts'
================================================ 2 error in 0.02 seconds ===============================================

任意のパスに移動し、ipythonにモジュールをインポートしようとすると、機能します。

$ cd
$ ipython

In [1]: import mcts.uct

In [2]: mcts.uct? 
Type:        module
String form: <module 'mcts.uct' from '/home/johannes/src/mcts/mcts/uct.py'>
File:        /home/johannes/src/mcts/mcts/uct.py
Docstring:   <no docstring>

Pycharm内からpytestを実行すると、動作します。 (しかし、私はpycharmでどのような魔法が起こるのかわかりません...)

echo $PYTHONPATHは空の文字列を返しますが、sys.pathは正しいようです:

>>> import sys; print(sys.path)
['/home/johannes/src/mcts/virtualenvs/teste/lib/python3.4/site-packages', 
'/home/johannes/src/mcts', '', '/usr/bin', 
'/usr/lib/python3.4/site-packages/GitPython-0.3.2.RC1-py3.4.Egg', 
'/usr/lib/python34.Zip', '/usr/lib/python3.4', 
'/usr/lib/python3.4/plat-linux', '/usr/lib/python3.4/lib-dynload', 
'/usr/lib/python3.4/site-packages', 
'/usr/lib/python3.4/site-packages/IPython/extensions', 
'/home/johannes/.ipython']

Pytestを実行するにはどうすればよいですか?

14
hildensia

自分で直した。何らかの理由でpytestはvirtualenvを正しく取得しませんでした。 virtualenvにpytestをインストールすると解決しました

source virtualenvs/teste/bin/activate
pip install pytest
15
hildensia

私はこれをあなたの質問と私自身の混乱への答えとして作成しました。お役に立てば幸いです。 py.testコマンドラインとtox.iniの両方でPYTHONPATHに注意してください。

https://github.com/jeffmacdonald/pytest_test

具体的には、py.testとtoxに、含めるモジュールの場所を伝える必要があります。

Py.testでこれを行うことができます:

PYTHONPATH=. py.test

そしてtoxを使用して、これをtox.iniに追加します。

[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
    PYTHONPATH = {toxinidir}
5
Jeff MacDonald