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
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}