[英]ImportMismatchError while running tox
在 virtualenv 中使用 tox 运行测试时,我遇到了py._path.local.LocalPath.ImportMismatchError: ('tfields.__main__', '/builds/dboe/tfields/.tox/py38/lib/python3.8/site-packages/tfields/__main__.py', local('/builds/dboe/tfields/tfields/__main__.py'))
。 我在运行 py.test 时不断返回出现错误 ImportMismatchError但删除pycache和 *.pyc 并不能解决我的问题。 有关我的 ci 的失败示例,请参阅https://gitlab.mpcdf.mpg.de/dboe/tfields/-/jobs/1122409 (您可以在第 96 行和第 97 行中看到我删除了 pycache和 *.pyc,如上面提到的问题的答案)。 非常欢迎任何提示或解决方案。
在您的testenv
部分中,您必须设置
setenv = PY_IGNORE_IMPORTMISMATCH=1
或者
usedevelop = true
您可以在 pytest bugtracker 上阅读有关该问题的更多信息,请参阅此处https://github.com/pytest-dev/pytest/issues/2042
虽然我没有花很多时间在这上面,但我很确定这与你的包的命名有关。
主源文件夹称为tfields
,您的 package 称为tfields
。 问题是现在安装的 package 和文件夹都可用于 Python 在同一命名空间下。
如果我没记错的话,我的https://github.com/jugmac00/hibpcli项目遇到了同样的问题 - 一旦我将源代码放在src
目录中,问题就消失了,不再调用顶级文件夹与 package 名称相同。
如果你想深入挖掘,我强烈推荐 Hynek Schlawack 关于为什么使用src
布局的文章:
在 virtualenv 中使用 tox 运行我的测试时
你真的不需要在虚拟环境中运行 tox 。 Tox
创建一个 virtualenv 来安装你的项目。 自动化工具通常为新的 python 可执行文件提供标准化工具。
有时在重构项目之后; 例如,更改项目文件夹结构会导致此问题。 最好的补救措施通常是简单地调用:
tox --recreate
我总是在我的 CI/CD 中这样做。 否则可能会使用缓存,这可能会给这些构建的幂等性带来麻烦。
如果这不起作用,请检查您的构建代理是否正确清理了构建目录。 它可能会留下其他构建的残余物。
这与删除.tox
文件夹的效果相同,您也可以考虑这样做。
编辑:我已经克隆了你的项目,它与pytest
或tox
无关。 您的项目(进口)的结构相当破碎。
如果您应用以下规则,您应该会有所改进:
最后,某处发生了一个导入循环(例如file1 import file2,file2 import file1)。 但我会让你找到那个。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.