pytest无法找到位于tests目录下的辅助模块

时间:2015-08-31 21:27:48

标签: python pycharm python-import pytest setup.py

当使用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启动我的测试。

2 个答案:

答案 0 :(得分:1)

可能您的__init__.py和/或tests目录中没有tests/tools。 如果错过python确实将它们视为包而无法导入它们。 你可以:

  • 添加__init__.py(BAD请参阅here
  • conftest.py中为您的PYTHONPATH添加测试/工具并导入文件(从import tests.tools.MODULEimport MODULE

答案 1 :(得分:0)

为了能够导入位于src文件夹之外的模块,我去了PyCharm的“项目设置”,在“项目结构”中,我将tests/end_to_endtests/unit标记为{{ 3}}

我也改变了主意,决定将我的助手模块放在这些文件夹中。这样我就可以直接导入它们,我的测试也可以在终端中正常运行,因为当前工作目录总是添加到PYTHONPATH