当使用PyCharm启动我的测试时,我根本没有导入问题,但是如果我在终端中执行pytest抱怨无法找到的模块。正是那些tests/tools
下的人。
项目文件夹结构:
src/
app/
tests/
end_to_end/ # End to end/Acceptance tests
tools/ # Helper modules used by some tests
unit # Unit tests
setup.py
setup.py
的相关部分:
setup(...
packages=find_packages('src'),
package_dir={'': 'src'},
install_requires=['requests'],
test_suite='tests',
tests_require=[
'flexmock',
'pytest',
'wsgi_intercept'
])
执行py.test tests/end_to_end
时失败的导入行,无论virtualenv是否处于活动状态。从app
包导入的模块很好:
from tests.tools.foomodule import Foo # Fails
from app.barmodule import Bar # Doesn't fail
在从命令行运行测试时,我必须使用pip install -e packagename
安装我的软件包才能可用 for pytest。我想我必须在我的tools
中添加setup.py
文件夹作为一个包,但这对我来说很难看,因为这些模块只是用于帮助测试过程,并不意味着分发。
另一方面,我可以在integration advices from pytest website之后使用python setup.py test
启动我的测试。
答案 0 :(得分:1)
可能您的__init__.py
和/或tests
目录中没有tests/tools
。
如果错过python确实将它们视为包而无法导入它们。
你可以:
__init__.py
(BAD请参阅here conftest.py
中为您的PYTHONPATH添加测试/工具并导入文件(从import tests.tools.MODULE
到import MODULE
)答案 1 :(得分:0)
为了能够导入位于src
文件夹之外的模块,我去了PyCharm的“项目设置”,在“项目结构”中,我将tests/end_to_end
和tests/unit
标记为{{ 3}}
我也改变了主意,决定将我的助手模块放在这些文件夹中。这样我就可以直接导入它们,我的测试也可以在终端中正常运行,因为当前工作目录总是添加到PYTHONPATH
。