pytest提示ModuleNotFoundError: No module named ‘py.xml‘; ‘py‘ is not a package解决分析思维

问题

运行pytest.main()时提示了:

from py.xml import html
ModuleNotFoundError: No module named 'py.xml'; 'py' is not a package

报错

解决思路

一. 第1种可能的错误原因:包存在但路径不对

  1. 首先点击上图报错的文件,点击上图蓝色链接,直接跳转,找到报错来源代码如下图:
    报错来源代码
    这里先记住这个报错的文件路径xxx\AppData\Roaming\Python\Python38\site-packages\pytest_html\html_report.py,我们简称A路径

  2. 找到真正要调用的内容路径,如下图,鼠标悬放在from py.xml import html这句代码的 pyxml上面,发现我本地是有这个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。
    在这里插入图片描述

  3. 解决思路出来了,把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包可调就行。

可能还有其他我不知道的原因,或者以上方法有疏漏,希望大家指点一下。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值