Featured image of post 『 Python 』Resolve ModuleNotFoundError

『 Python 』Resolve ModuleNotFoundError

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

摘要

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

Bug

引用路径和模块名对不上

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

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

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

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

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

Debug

网上常见的解决方案

1
ImportError: attempted relative import with no known parent package.

本文解决方案

Solution1:依托控制台运行

  1. 直接编译,发现错误

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

  1. 点击 确定 后重新运行

  1. 观察控制台

    我们发现,在 Python Console 中运行的模块,会自动链接环境变量,这就顺便达成了我们的需求。

Solution2:使用 PyCharm 添加环境变量

为什么要提出这套解决方案呢?显然方案一并不是最优解。

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

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

  1. 打开冰箱门

  1. 把李芬特装入冰箱

  1. 关闭冰箱门

至此,报错问题已经完全解决啦~

Licensed under CC BY-NC-SA 4.0
You will to enjoy grander sight / By climing to a greater height.