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要求。