2016-11-09 16 views
0

私はテストファイルtests.pyを持っています。現在、問題を特定するために、ファイルには、次の行が含まれていますpytestを使用して模擬テストをインポートできません

from mock import Mock 

私はpytestでこのファイルを実行しよう:

:私は、次のエラー出力を得る

$ py.test tests.py 

tests.py:1: in <module> 
    from mock import Mock 
E ImportError: No module named mock 
=========================== 1 error in 0.00 seconds ============================ 

私はpythonでファイルを実行した場合:

を3210

このエラーは発生しません。同様に、インタラクティブなインタプリタを開くと、問題なしでmockをインポートできます。 なぜこのコンテキストでmockにアクセスできないのですか?

+0

あなたのPATH変数をチェックしたが、多分あなたは別のPythonのバイナリを持っていますランニング ? –

+1

ありがとうございます@MichaelKarotsieris、それは正しい軌道に私を置く。私はvirtualenvにいましたが、pytestは私のOSパッケージマネージャー(Ubuntuの 'apt')を通してインストールされました。 'py.test'コマンドを実行したとき、私の仮想環境は' sys.path'にはなく、 'mock'がインストールされた場所です。私は 'apt'を通してインストールされたpytestのバージョンを削除し、それを動作させるためにvirtualenvの' pip'を通してインストールしなければなりませんでした。 – elethan

+0

cool!ニース助けてよかった! :) –

答えて

0

mockの私のバージョンは、仮想環境でpipを介してインストールしている間に私が使っていたが、aptによってインストールされたことをPytestのバージョンをオンにします。 @MichaelKarotsierisの提案で、私は(エラーが発生した後、私はpdbデバッガにポップする--pdbオプションを使用)Pytestで私のテストを実行した後sys.pathの内容を確認:

$ py.test tests.py --pdb 
... 
(Pdb) import sys 
(Pdb) sys.path 

このIから私の仮想環境はアクティブだったものの、その環境はではなく、sys.pathでした。

次に、私はピップを通じて私の仮想環境でのpytestをインストールしてみました:

(my_env) $ pip install pytest 

しかし、これだけのステップにPytestのバージョンをまだ使用されていたaptを介してインストールので、私はちょうどそれを削除することを決めました。

(my_env) $ sudo apt remove --purge python-pytest 

この後、py.testコマンドの実行は期待通りに機能しました。私はaptを介してインストールPytestのバージョンを保ち、ちょうど直接にvirtualenvから実行ファイルを実行している可能性が想定結果論で

、:

(my_env) $ /path/to/my_env/bin/py.test tests.py 
関連する問題