当我在本地运行测试时,它的工作正常,但在创建了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。
答案 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。就我而言,我在不同封装(例如ImportMismatchError
和A/B/main.py
下的同名模块中获得了C/D/main.py
。 Python 3不需要源文件夹中的__init__.py
文件,但是在__init__.py
和A/B
下添加C/D
解决了这个问题。
答案 5 :(得分:0)
您可以设置环境变量PY_IGNORE_IMPORTMISMATCH=1
来跳过此错误。在简单的情况下(例如在docker容器内外运行测试)应该没问题。