我是Python的新手,在理解将模块导入Pytest时遇到了一些麻烦。我使用Python 2.7解决了这个问题(通过大量搜索而不是太多了解)。我现在已经开始在virtualenv中使用Python 3.4。
我的目录结构是(基于此http://pytest.org/latest/goodpractises.html):
-root
-Extractor
Extractor.py
-test
test_extractor.py
# test_extractor.py
import Extractor # I assume this is where I'm going wrong
import Extractor.Extractor # Or this?
我已尝试从根目录运行py.test
和py.test tests/test_extractor.py
。测试在两种情况下运行,并给出错误:
E ImportError: No module named 'Extractor'
运行py.test
会提供以下信息:
platform darwin -- Python 3.4.2 -- py-1.4.30 -- pytest-2.7.2
rootdir: /my/user/path/root
运行py.test tests/test_extractor.py
会提供以下内容:
platform darwin -- Python 3.4.2 -- py-1.4.30 -- pytest-2.7.2
rootdir: my/user/path/root/test
我理解后一个例子不起作用(找不到模块,因为/test
目录不是项目根目录)但是为什么它没有从根目录中找到它?
这似乎应该是显而易见的,但我很难理解究竟发生了什么。我是否需要__init__.py
个文件(即使在Python 3.4中?)来自http://pytest.org/latest/goodpractises.html:
请注意
您可以为您的应用程序使用Python3命名空间包(PEP420),但pytest仍将根据 init .py文件的存在执行测试包名称发现。如果您使用上面两个推荐的文件系统布局之一,但是从目录中删除 init .py文件,它应该适用于Python3.3及更高版本。但是,从“内联测试”开始,您将需要使用绝对导入来获取应用程序代码。
我是否从根本上误解了这意味着什么?或者写import
语句错了?或者错误地调用测试?