在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'))
。
我继续回到Getting error ImportMismatchError while running py.test,但是删除 pycache 和* .pyc无法解决我的问题。请参阅https://gitlab.mpcdf.mpg.de/dboe/tfields/-/jobs/1122409,了解我的ci的失败示例(您可以在第96和97行中看到,我按照上述问题的答案中的建议删除了 pycache 和* .pyc)。
任何提示或解决方案都非常欢迎。
答案 0 :(得分:1)
在您的testenv
部分,您必须设置其中一个
setenv = PY_IGNORE_IMPORTMISMATCH=1
或
usedevelop = true
您可以在pytest bugtracker上阅读有关该问题的更多信息,请参见此处https://github.com/pytest-dev/pytest/issues/2042
虽然我没有花很多时间,但我很确定这与您的软件包的命名有关。
主要源文件夹称为tfields
,而程序包称为tfields
。问题在于,现在安装的软件包和文件夹都可用于同一命名空间下的Python。
如果我没记错的话,我的https://github.com/jugmac00/hibpcli项目也遇到了同样的问题-将源代码放在src
目录中之后,问题就消失了,不再调用顶层文件夹与软件包名称相同。
如果您想更深入地研究,我强烈建议Hynek Schlawack撰写有关为什么使用src
布局的文章:
答案 1 :(得分:0)
在virtualenv中使用tox运行测试时
您实际上并不需要在虚拟环境中运行Tox。 Tox
创建一个virtualenv来将您的项目安装到其中。自动化工具通常为新的python可执行文件提供标准化工具。
有时会重构项目;例如,更改项目文件夹结构会导致这种情况。最好的补救方法通常是简单地调用:
tox --recreate
我总是在我的CI / CD中执行此操作。否则可能会使用缓存,这可能会给这些构建的幂等性带来麻烦。
如果这不起作用,请检查您的构建代理是否正确清理了构建目录。它可能会留下其他版本的残留物。
这与删除.tox
文件夹(您也可以考虑)的效果相同。
编辑:
我已经克隆了您的项目,这与pytest
或tox
毫无关系。您的项目(导入)的结构相当混乱。
如果应用以下规则,则应该有所改进:
最后,某处发生导入循环(例如file1导入file2,file2导入file1)。但是我会让你找到那个。