PATH问题pytest'ImportError:没有模块名为YadaYadaYada'

我使用easy_install在mac上安装pytest,并开始编写testing文件结构的项目,如下所示:

repo/ repo/app.py repo/settings.py repo/models.py repo/tests/ repo/tests/test_app.py 

在repo目录下运行py.test ,所有的行为都像你期望的那样

但是当我在linux或者windows上尝试同样的东西的时候(它们都是pytest 2.2.3),只要它从我的应用程序path中第一次导入某个东西,它就会吠叫。 例如from app import some_def_in_app

我是否需要编辑我的PATH以在这些系统上运行py.test? 有没有人经历过这个?

是的,如果你cd到testing目录,源文件夹不在pythonpath中。 你有两个select:

一个。 手动添加path到testing文件,如下所示:

 import sys, os myPath = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, myPath + '/../') 

湾 使用env var PYTHONPATH=../运行testing。

我不知道为什么py.test不会在PYTHONPATH本身中添加当前目录,但是这里有一个解决方法(要从你的仓库的根目录执行):

 python -m pytest tests/ 

它的工作原理是Python为你添加PYTHONPATH中的当前目录。

我有同样的问题。 我通过添加一个空的__init__.py文件到我的tests目录来解决它。

您可以在项目根目录下使用PYTHONPATH运行

 PYTHONPATH=. py.test 

或者使用pip install作为可编辑的导入

 pip install -e . # install package using setup.py in editable mode 

我创build这个作为你的问题和我自己的困惑的答案。 我希望它有帮助。 请注意py.test命令行和tox.ini中的PYTHONPATH。

https://github.com/jeffmacdonald/pytest_test

具体来说:你必须告诉py.test和tox在哪里find你正在包含的模块。

用py.test你可以这样做:

 PYTHONPATH=. py.test 

用tox,把这个添加到你的tox.ini中:

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

当我不小心将__init__.py文件添加到我的src目录(这不应该是一个Python包,只是所有源的容器)时,我开始变得奇怪“ConftestImportFailure:ImportError('No module named …”)错误。

我得到这个错误,因为更简单的东西(你甚至可以说微不足道)。 我没有安装pytest模块。 所以一个简单的apt install python-pytest为我解决了它。

'pytest'会被列在setup.py中作为一个testing依赖项。 确保你也安装了testing要求。