解决Python导包from A import B 的 ModuleNotFoundError报错

摘要:针对使用PyCharm打开Github上克隆的项目或自编的“千层饼”工程文件并导入自编或已存在的模块时遇上的ModuleNotFoundError报错,本文简要列举了Python编程环境中引发这项错误的可能原因,并在对比总结网上其他解决方案后给出本人的解决方案。

作者:ALKAID
发表时间:2020年12月16日
原文链接:李芬特小窝

转载博客请注明出处


1. 引用路径和模块名对不上

模块已更名重构或不存在。PyCharm中支持对整个工程文件中的索引重构,意味着一个文件改名,在当前项目中所有调用了这个模块的地方都会做相应的改动,所以这个不难解决。

2. 模块存在且引用路径正确但就是报错

Python相对路径与绝对路径设置错误,表现出以下现象。

Traceback (most recent call last):
  File "当前运行文件的绝对路径", line 3, in <module>
    from BusinessViewLayer.myapp.api import *
ModuleNotFoundError: No module named 'BusinessViewLayer'

注:其中所有的.py文件都是作者自己编写的模块,且都存放在相应的引用路径下。

2.1. 网上常见的解决方案
ImportError: attempted relative import with no known parent package。
2.2. 本文解决方案
解决方案一:依托控制台运行
  1. 直接编译,发现错误

在这里插入图片描述

  1. PyCharm中打开 -> 运行/调试设置

在这里插入图片描述在这里插入图片描述

  1. 点击确定后重新运行

在这里插入图片描述

  1. 观察控制台
    我们发现,在Python Console中运行的模块,会自动链接环境变量,这就顺便达成了我们的需求。
    在这里插入图片描述
解决方案二:使用PyCharm添加环境变量

为什么要提出这套解决方案呢?显然方案一并不是最优解。
因为某些第三方日志库如loguru在打印运行信息时,会因为各种编码原因导致显示在Python Console窗口中的(中文)信息乱码(但在log文件中显示正常)。
虽然通过设置一些参数可以解决这些问题,但我们不希望在解决问题的过程中引入多余的操作,于是便有了解决方案二。

在这里插入图片描述

方案二依然能够达成我们的需求,且不会引发上文所述的问题。

  1. 打开冰箱门

在这里插入图片描述

  1. 把李芬特装入冰箱

在这里插入图片描述

  1. 关闭冰箱门

在这里插入图片描述
至此,报错问题已经完全解决啦~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值