2016-11-09 1 views
0

Ich habe eine Testdatei tests.py. Derzeit, um das Problem zu isolieren, enthält die Datei nur die folgende Zeile:Kann Mock-in-Test mit Pytest nicht importieren

from mock import Mock 

Wenn ich versuche, diese Datei mit pytest auszuführen:

$ py.test tests.py 

ich folgenden Fehler Ausgabe:

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

Wenn ich ausführen, um die Datei mit python:

$ python tests.py 

Ich bekomme diesen Fehler nicht. In ähnlicher Weise kann ich, wenn ich einen interaktiven Interpreter öffne, mock ohne Probleme importieren. Warum kann ich in diesem Zusammenhang nicht auf mock zugreifen?

+0

haben Sie Ihre PATH-Variable überprüft, vielleicht haben Sie eine andere Python binäre Laufen ? –

+1

Danke @MichaelKarotsieris, das hat mich auf den richtigen Weg gebracht. Ich war in einem virtualenv, aber pytest wurde über meinen OS-Paketmanager installiert ("apt" unter Ubuntu). Wenn ich den 'py.test' Befehl ausgeführt habe, war meine virtuelle Umgebung * nicht * in' sys.path', und dort wurde 'mock' installiert. Ich musste die Version von pytest entfernen, die durch 'apt' installiert wurde, und sie über 'pip' in meinem virtualenv installieren, damit es funktioniert ... – elethan

+0

cool! Schön zu helfen! :) –

Antwort

0

Schaltet die Version von Pytest heraus, dass ich durch apt installiert wurde verwenden, während meine Version von mock durch pip in einer virtuellen Umgebung installiert wurde. Auf Anregung von @MichaelKarotsieris, ich den Inhalt sys.path nach dem Ausführen von meinen Tests mit Pytest geprüft (I verwendet, um die --pdb Option in den pdb Debugger Pop nachdem der Fehler ausgelöst wurde):

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

Von diesen I Ich fand, dass, obwohl meine virtuelle Umgebung aktiv war, diese Umgebung nicht in sys.path war.

Als nächstes versuchte ich pytest in meiner virtuellen Umgebung durch pip Installation:

(my_env) $ pip install pytest 

jedoch mit diesem Schritt allein die Version von Pytest durch apt installiert wurde noch verwendet wird, so habe ich beschlossen, es einfach zu entfernen:

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

Danach funktionierte der Befehl py.test wie erwartet.

Im Nachhinein, ich denke ich die Version von Pytest konnte durch apt und lief nur die ausführbare Datei aus dem virtualenv direkt installiert gehalten:

(my_env) $ /path/to/my_env/bin/py.test tests.py