py.test 没有找到模块

py.test doesn't find module

此问题与以下问题相关,但未在此处回答:

我有一个具有以下树结构的 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 returns 是一个空字符串,但 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']

我必须做什么才能获得 pytests 运行ning?

我自己修好了。出于某种原因,pytest 没有得到正确的 virtualenv。在 virtualenv 中安装 pytest 解决了它

source virtualenvs/teste/bin/activate
pip install pytest

我创建这个是为了回答你的问题和我自己的困惑。我希望它有所帮助。注意 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}

您的错误消息显示:

ImportError: No module named 'mcts'

查看您提供的目录结构,该错误告诉您您没有 'mcts' module/package。要修复它,您需要在 'mcts' 目录中添加一个“__init__.py”文件。之后,您应该可以 运行 'py.test' 而无需其他 arguments/settings.