我的目录结构如下:
| project/
| ---- lib/
| -------- __init__.py
| -------- MyModule.py
| ---- test/
| -------- __init__.py
| -------- test_MyModule.py
| ---- __init__.py
在我的测试文件中,我执行以下操作:
from project.lib.MyModule import MyModule
这是MyModule的文字:
class MyModule(object):
pass
我能够在控制台和文件中运行它。但由于某些原因,pytest无法发现MyModule
。我收到一个错误说:
E ImportError: No module named 'project'
我做错了什么?
更新
我也试过这个并且失败了:
import sys
sys.path.insert(0, "~/project")
不起作用。帮助
答案 0 :(得分:1)
应为from lib.MyModule import MyModule
答案 1 :(得分:0)
我认为问题可能出在你的Python或pytest版本和/或平台上(Windows / Linus发行版)。
我的环境:
MacOS 10.11.6
Python 2.7.13
pytest (3.0.7)
我重新创建了你的项目并无法重现你的问题 - pytest运行正常:
Dmitry[project]: tree
.
├── __init__.py
├── lib
│ ├── MyModule.py
│ └── __init__.py
└── test
├── __init__.py
└── test_MyModule.py
2 directories, 5 files
Dmitry[project]: cat lib/MyModule.py
class MyModule(object):
pass
Dmitry[project]: cat test/test_MyModule.py
from project.lib.MyModule import MyModule
def test_object():
o = MyModule()
assert 1
运行pytest(对我而言,从哪里运行pytest并不重要,只需通过测试或测试模块提供正确的dir路径):
Dmitry[project]: pytest -vvv test/test_MyModule.py
================================================================== test session starts ===================================================================
platform darwin -- Python 2.7.13, pytest-3.0.7, py-1.4.33, pluggy-0.4.0 -- /usr/local/opt/python/bin/python2.7
cachedir: .cache
sensitiveurl: .*
benchmark: 3.0.0 (defaults: timer=time.time disable_gc=False min_rounds=5 min_time=5.00us max_time=1.00s calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /private/tmp/project, inifile:
plugins: xdist-1.15.0, variables-1.4, timeout-1.0.0, selenium-1.4.0, instafail-0.3.0, html-1.10.1, hidecaptured-0.1.2, excel-1.1.0, cov-2.5.1, capturelog-0.7, benchmark-3.0.0, base-url-1.1.0
collected 1 items
test/test_MyModule.py::test_object PASSED
====================================================== 1 passed, 3 pytest-warnings in 0.02 seconds =======================================================