Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python py.test不';找不到模块_Python_Pytest - Fatal编程技术网

Python py.test不';找不到模块

Python py.test不';找不到模块,python,pytest,Python,Pytest,此问题与以下问题相关,但未在此处得到回答: 我有一个具有以下树结构的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-packa

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

我有一个具有以下树结构的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 ===============================================
如果我从pycharm内部运行pytest,它就会工作。(但我不知道pycharm会有什么魔力…)

虽然
echo$PYTHONPATH
返回一个空字符串,但是
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运行,我必须做什么?

我自己修复了它。出于某种原因,pytest没有正确地获取virtualenv。在virtualenv中安装pytest解决了这个问题

source virtualenvs/teste/bin/activate
pip install pytest

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

具体地说:您必须告诉py.test和tox在哪里可以找到您包含的模块

使用py.test,您可以执行以下操作:

PYTHONPATH=. py.test
对于tox,将此添加到tox.ini中:

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

您的错误消息显示:

ImportError:没有名为“mcts”的模块


查看您提供的目录结构,该错误告诉您没有“mcts”模块/包。要修复它,您需要将“\uuuu init\uuuuu.py”文件添加到“mcts”目录。之后,您应该能够在没有其他参数/设置的情况下运行'py.test'。

我在您的文件结构中看不到模块
toy\u world\u state
,这可能解释了为什么来自mcts的
。toy\u world\u state import*
抛出错误。对不起,这是我问题中的一个输入错误。我改变了这一点。我想知道您是否将该项目添加到您的
$PYTHONPATH
中,这可能会起作用,并且可能正是PyCharm配置要做的。不应该执行
pip安装-e。
这样做吗?(分别将包添加到virtualenv的
站点包
目录中——该目录应位于
$PYTHONPATH
)顺便说一句。如果我这样做
PYTHONPATH=。py.test mcts
它可以工作。如果我做了
PYTHONPATH=./virtualenvs/teste/lib/python3.4/site-packages/pytest-mcts
它不会。我完全糊涂了。在创建更多关于您的项目的帖子之前,请阅读Stack Overflow社区版主的这篇帖子:
[testenv]
deps= -r{toxinidir}/requirements.txt
commands=py.test
setenv =
    PYTHONPATH = {toxinidir}