运行py.test时获取错误ImportMismatchError

时间:2017-05-19 10:26:04

标签: python docker pytest

当我在本地运行测试时,它的工作正常,但在创建了docker并在容器内部运行后,我遇到了错误。

    /usr/local/lib/python3.5/site-packages/_pytest/config.py:325: in _getconftestmodules
    return self._path2confmods[path]
E   KeyError: local('/apis/db/tests')

During handling of the above exception, another exception occurred:
/usr/local/lib/python3.5/site-packages/_pytest/config.py:356: in _importconftest
    return self._conftestpath2mod[conftestpath]
E   KeyError: local('/apis/db/tests/conftest.py')

During handling of the above exception, another exception occurred:
/usr/local/lib/python3.5/site-packages/_pytest/config.py:362: in _importconftest
    mod = conftestpath.pyimport()
/usr/local/lib/python3.5/site-packages/py/_path/local.py:680: in pyimport
    raise self.ImportMismatchError(modname, modfile, self)

_pytest.config.ConftestImportFailure: ImportMismatchError('conftest', '/projects/my_project/db/tests/conftest.py', local('/apis/db/tests/conftest.py'))

/ apis - 它是Dockerfile中的WORKDIR。

6 个答案:

答案 0 :(得分:88)

我已经通过删除test /目录下的所有 __ pycache __ pkg修复了它,问题是我在创建docker image时它选择了所有 __ pycache __ * .pyc 文件,当测试使用我的本地机器路径而不是docker容器中的路径运行时。

结论:在创建泊坞窗图像之前,请清除 * .pyc __ pycache __ 文件。

答案 1 :(得分:20)

您可以使用.dockerignore文件将所有__pycache__个文件夹排除在发送到泊坞窗图片上下文之外:

.dockerignore文件,从所有子/文件夹中排除__pycache__个文件夹和*.pyc个文件:

**/__pycache__
**/*.pyc

答案 2 :(得分:5)

删除所有.pyc文件。你可以这样做 find . -name \*.pyc -delete

答案 3 :(得分:2)

在coverage / fullcoverage /中找到了__pycache__个文件,这些文件隐藏在jupyter notebook等中。

只需导航到该文件夹​​并使用rm -r __pyache__/即可。这将照顾您的pytest。

答案 4 :(得分:1)

我正在使用Python 3.6。就我而言,我在不同封装(例如ImportMismatchErrorA/B/main.py下的同名模块中获得了C/D/main.py。 Python 3不需要源文件夹中的__init__.py文件,但是在__init__.pyA/B下添加C/D解决了这个问题。

答案 5 :(得分:0)

您可以设置环境变量PY_IGNORE_IMPORTMISMATCH=1来跳过此错误。在简单的情况下(例如在docker容器内外运行测试)应该没问题。