我有以下目录结构
/home/ubuntu/test/
- Foo/
- Foo.py
- __init__.py
- Test/
- conftest.py
- __init__.py
- Foo/
- test_Foo.py
- __init__.pyFoo.py包含
class Foo(object):
def __init__(self):
passconftest.py包含:
import pytest
import sys
print sys.path
from Foo.Foo import Foo
@pytest.fixture(scope="session")
def foo():
return Foo()test_Foo.py包含:
class TestFoo():
def test___init__(self,foo):
assert True如果我运行pytest。在Test文件夹中,我得到一个错误,它找不到模块Foo:
Traceback (most recent call last):
File "/home/ubuntu/pythonVirtualEnv/local/lib/python2.7/site-packages/_pytest/config.py", line 379, in _importconftest
mod = conftestpath.pyimport()
File "/home/ubuntu/pythonVirtualEnv/local/lib/python2.7/site-packages/py/_path/local.py", line 662, in pyimport
__import__(modname)
File "/home/ubuntu/pythonVirtualEnv/local/lib/python2.7/site-packages/_pytest/assertion/rewrite.py", line 212, in load_module
py.builtin.exec_(co, mod.__dict__)
File "/home/ubuntu/pythonVirtualEnv/local/lib/python2.7/site-packages/py/_builtin.py", line 221, in exec_
exec2(obj, globals, locals)
File "<string>", line 7, in exec2
File "/home/ubuntu/test/Test/conftest.py", line 6, in <module>
from Foo.Foo import Foo
ImportError: No module named Foo
ERROR: could not load /home/ubuntu/test/Test/conftest.py在conftest.py中输出的测试似乎包含/home/ubuntu/ sys.path路径,所以它应该能够找到Foo.py,对吧?
问题是,只有当我将conftest.py移到下面的文件夹中时,它才能工作。
我运行pytest 3.2.2
发布于 2017-09-14 23:08:20
该错误指出由于ImportError而无法加载conftest.py。尝试将导入内容移动到foo fixture中,如下所示:
import pytest
import sys
print sys.path
@pytest.fixture(scope="session")
def foo():
from Foo.Foo import Foo
return Foo()发布于 2018-09-10 18:55:48
我建议您设置一个虚拟环境,并在虚拟环境中安装Foo模块。
pip install virtualenv
virtualenv venv
. ./venv/bin/activate为了安装您的本地模块,您需要一个setup.py文件:
from setuptools import setup
setup(
name='foo',
version='0.0.1',
author='My Name',
author_email='my.name@email.com',
packages=['Foo'],
)然后,您可以在虚拟环境中安装Foo模块:pip install -e .。然后,当你运行你的测试时,他们会选择你的模块。
要获得更完整、更长期的方法,请考虑使用需求文件。我通常将所需的模块放在名为requirements.txt (用于生产)和requirements-test.txt(用于运行测试)的两个文件中。所以在requirements.txt中放入你的Foo类需要的东西,例如
json
flask==1.0.2其中指定了flask的版本,但没有指定json的版本。然后在requirements-test.txt文件中输入以下内容:
-r requirements.txt
pytest
-e .第一行的意思是当你安装requirements-test.txt的时候,你也会得到所有的requirements.txt。-e .是修复您在这里遇到的问题的魔法,即它安装Foo模块(以及您在此代码库中可能遇到的任何其他模块)。
要安装requirements-test.txt文件,然后运行:
pip install -r requirements-test.txt现在你可以运行你的测试,它会找到你的Foo模块。这也是解决CI中问题的好方法。
https://stackoverflow.com/questions/46203090
复制相似问题