2017-05-19 119 views
10

当我在本地运行测试时它的工作正常,但是在创建docker并在容器内运行后,我得到了错误。在运行py.test时出现错误ImportMismatchError

/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。

+0

你可能有一些python导入路径或符号链接或其他问题。什么是/ projects/my_project和什么是/ apis?他们是目录还是符号链接?他们如何相互关联? – MarSoft

+0

@MarSoft/projects位于主目录中,/ apis位于docker的主目录中,顺便说一句,我已经解决了这个问题。谢谢! –

回答

26

我已经删除测试/目录下的所有pycache PKG,问题是,当我创建码头工人形象的采摘我的所有pycache当测试运行固定它和* pyc文件也是如此,在当时它使用我的本地机器路径而不是码头容器中的路径。

结论:在创建Docker镜像之前清除* .pyc和pycache文件。

HTH

+0

您可以将这些条目放在'.dockerignore'文件中,以便在构建阶段忽略它们。尽管如果你在容器中绑定你的源文件夹,它们仍然会被拾取,以便在包含本地修改的情况下运行测试。 – giorgiosironi