ModuleNotFoundError:No module named xxx 罪魁祸首竟是虚拟环境!
ModuleNotFoundError是什么意思?
ModuleNotFoundError:No module named XXX,这个错误是我们初学Python的朋友经常会遇到的,出现这个错误的原因是我们想要使用的模块XXX不存在。如果是第三方模块,并且没有安装过,那么通过pip install XXX将其成功安装便不会再报这个错误。然而,有太多朋友像我的这位学生一样,明明已经安装了,但是仍然报 No module named XXX,这是为什么??!!
已经安装过的模块却找不到,主要有2个原因会造成这个问题。我们今天主要来分析下第一个原因——pycharm的虚拟环境。
Pycharm的虚拟环境
刚接触Python的朋友,会优先选择Pycharm作为集成开发环境。但是你是否了解Pycharm默认会为我们的每一个项目创建一个单独的虚拟环境,而且每个虚拟环境有自己单独的python解释器?
当我们在pycharm中新建一个项目时(本文所用pycharm为community版),我们看到的是如下界面:
其实,点开左上角的小三角,你就会发现里面大有玄机!pycharm为我们的项目创建了一个虚拟环境! 目的是分离开各个项目,使其互相不干扰。然而,对于我们初学者来说,编写的那一个个小小的项目完全没有分离的必要!
为什么虚拟环境会造成ModuleNotFoundError?
首先明确以下3点:
1. 要运行Python代码,需要使用python解释器——python.exe。我们安装python,主要就是安装解释器和一些内置模块。
2. 我们从命令行窗口输入 pip install module_name时,是将模块安装到了python解释器中。
3. pycharm的每个虚拟环境里都有自己单独的python.exe解释器。
基于以上3点,你是不是已经明白原因了?安装了模块的python.exe与虚拟环境中使用的python.exe不是同一个!!!所以找不到已经安装的模块!!!
怎么解决由虚拟环境造成的ModuleNotFoundError?
答案很简单:初学者不要使用虚拟环境!
虚拟环境帮助我们分隔不同项目,使其解释器互不干扰。如果不是本机同时使用多个版本的python或者项目要求隔离,那么就不要创建虚拟环境了。
总结
讲课时我会跟学生说,报错了一定要仔细读报错信息,从中要获得两个信息:1.出了什么错误 2.哪里出了错误。对于本文中的例子,我们从报错信息中得知pymysql这个模块不存在,但是我们明确的知道这个模块已经安装了,那么就要往模块的背后找,是谁在使用模块?是解释器,那么是不是解释器使用的不对了?或者是不是我的模块没有安装到正确的解释器里?再结合对pycharm的了解,进而就可以发现真正的错误原因。
程序的debug不是一蹴而就的,需要我们有良好的基础,有过硬的基本功才能以不变应万变。还在学习编程基础的朋友,请认真对待,因为它值的!