问题
运行pytest.main()时提示了:
from py.xml import html
ModuleNotFoundError: No module named 'py.xml'; 'py' is not a package
解决思路
一. 第1种可能的错误原因:包存在但路径不对
-
首先点击上图报错的文件,点击上图蓝色链接,直接跳转,找到报错来源代码如下图:
这里先记住这个报错的文件路径xxx\AppData\Roaming\Python\Python38\site-packages\pytest_html\html_report.py,我们简称A路径 -
找到真正要调用的内容路径,如下图,鼠标悬放在
from py.xml import html
这句代码的py
或xml
上面,发现我本地是有这个py包,包里有xml.pyi,这句代码应当是没问题的(这里我用的pycharm可以显示路径,其他工具不清楚)。仔细对比,这里显示出来的路径是D:\ProgramFiles\Anaconda3\Lib\site-packages\py\,这里简称B路径。
可以发现,路径相差得太大了,所以A路径的html_report.py是调用不到B路径的xml.pyi的。
再次确认,按住 ctrl 点击xml可以跳到xml.pyi,内容包括如下图,好的,确认了,真正要引用的就是这个文件了。毕竟路径一致的py/xml,里面还有class html。
-
解决思路出来了,把B路径的py文件夹,复制一份到A路径的包的上层文件夹去,这样子再运行代码就不会报错了。
第2种可能的错误原因:包没下载
如果你在步骤1根本没发现有py包,那就下载一下,放到步骤3的位置就好了,我是因为已经试过了这一步,发现如下图,我已经有这个包了
第3种可能的错误原因:有模块名重复了
如果你自己在步骤1的html_report.py所在文件夹的上一层文件夹,写了个py.py,也就是存在../py.py
,也会报'py' is not a package
,毕竟人家找的叫py的package,而不是叫py的module。
好吧我也存在这种情况,但我直接如解决思路一的步骤3,复制了py文件夹过去后,问题解决了。因为这个py.py不是我写的,是插件带过来的,我不可能去改名,怕出问题。如果这个是自己写的module,那就改名,随便叫py1.py都可以,就是不要叫py,然后再确保调用路径有py包可调就行。
可能还有其他我不知道的原因,或者以上方法有疏漏,希望大家指点一下。