摘要
针对使用 PyCharm
打开 Github
上克隆的项目或自编的“千层饼”工程文件并导入自编或已存在的模块时遇上的 ModuleNotFoundError
报错,本文简要列举了 Python
编程环境中引发这项错误的可能原因,并在对比总结网上其他解决方案后给出本人的解决方案。
Bug
引用路径和模块名对不上
模块已更名重构或不存在。PyCharm
中支持对整个工程文件中的索引重构,意味着一个文件改名,在当前项目中所有调用了这个模块的地方都会做相应的改动,所以这个不难解决。
模块存在且引用路径正确但就是报错
Python
相对路径与绝对路径设置错误,表现出以下现象。
|
|
注:其中所有的 .py 文件都是作者自己编写的模块,且都存放在相应的引用路径下。
Debug
网上常见的解决方案
- 使用 sys.path.append() 添加临时环境变量,这套方案可在 Linux 环境下部分有效,但在 Win 环境下可能失效且会让代码变得冗余;
- 使用 from .A import B 的相对路径索引方案,这套方案在 Visual Studio Code 中可以正常编译但在
PyCharm
中会进一步引发ImportError
错误;
|
|
本文解决方案
Solution1:依托控制台运行
- 直接编译,发现错误
- 在
PyCharm
中打开 – 运行 / 调试设置
- 点击 确定 后重新运行
观察控制台
我们发现,在
Python Console
中运行的模块,会自动链接环境变量,这就顺便达成了我们的需求。
Solution2:使用 PyCharm 添加环境变量
为什么要提出这套解决方案呢?显然方案一并不是最优解。
某些第三方日志库如 loguru
在打印运行信息时,会因为各种编码原因导致显示在 Python Console 窗口中的(中文)信息乱码(但在 log 文件中显示正常)。虽然通过设置一些参数可以解决这些问题,但我们不希望在解决问题的过程中引入多余的操作,于是便有了解决方案二。
方案二依然能够达成我们的需求,且不会引发上文所述的问题。
- 打开冰箱门
- 把李芬特装入冰箱
- 关闭冰箱门
至此,报错问题已经完全解决啦~