Python对于新手来说,和Java、C++的两大不同是:一方面Python需要频繁的安装扩展包,而后两者无论是包还是头文件则可以很轻松地导入。另一方面,Python在电脑上可能有多个环境或解释器,不同环境下的包并不是通用的,这样会导致用户误以为自己安装好了包却不能用~然后就会大量报错:ModuleNotFoundError: No module named 张三李四......
目录
一.为什么PyCharm找不到包?
import pandas as pd
data=[[1,2,3,4,5],[6,7,8,9,10]]
df = pd.DataFrame(data)
print(df)
df.to_excel('D:\\output1.xlsx', index=False)
如上这段代码, 实际上是实现一个将列表转换为Excel中矩阵的功能,然后运行后报错没有找到pandas:
这时可能很多小伙伴会进入到cmd中使用pip list命令,理直气壮的说我已经装了pandas了啊?
实际上,这个pandas是在你手动下载的解释器里面,也即目录中的python.exe解释器 :
而在PyCharm的terminal终端中再次键入pip list命令,发现并没有所谓的pandas!
在这里执行pip install pandas,然后就可以下载成功并运行了!(当然还有一个openpyxl包别忘了哦~)
这次没什么问题:
二.配置本地的Python解释器
实际上,这种情况可以用一个笑话来形容:你们抓的是周树人,和我鲁迅有什么关系?
玩笑归玩笑,cmd中看到的安装好的包,是用户手动配置好的那个——实际上这是因为在环境变量中添加了Path,这样就能在cmd中的c盘入口看到当时任意位置装好的那个Python解释器了。
而在这个项目中,我们用的并不是这个自己装好的解释器,你可以理解为PyCharm自带的一个——也即只在当前目录或者说是环境下有效。点击PyCharm的右下角就能看得很清楚:
左下角第三个按钮,可以看到当前环境下安好的包:
显然这样每一个项目都要单独安装一次的情况太麻烦,这时我们就要将自己安装的Python解释器作为PyCharm的解释器。进入到interpreter Setting中:
和目录显示的一样,此时我们的解释器只是一个当前项目独立自带的一个:
而这些包和我们自行安装的全局解释器也不同。在PyCharm中有时会直接爆红未安装的包,如果此时你选择用Alt+Enter键进行安装,也只能安装到当前的目录下,并不能安装到全局的解释器!
选择添加本地解释器:
然后勾选系统解释器,选择我们自行安装的python.exe文件路径:
然后换好之后,发现已经安装好的包立马就不一样了!
此时cv2也即OpenCV的包也不再提示报错:
并且这些包和我们cmd中查看的一模一样!
为了验证正确性,我们在终端中执行pip uninstall pandas卸载了pandas:
这时我们依旧可以成功运行!
这是因为我们在PyCharm的terminal中卸载或者安装的,还是之前所谓的那个自带的虚拟环境!而我们自己装的系统解释器,并不受影响~
有道是:不识庐山真面目,只缘身在此山中~
三. Anaconda的Jupyter编辑器
虽然多数情况下我们喜欢用PyCharm作为python开发的IDE,不过如果是临时的小项目,倒是有些杀鸡焉用牛刀的意味,这时很多选手选择使用python下载好后自带的命令行工具,也即IDLE~
然而前者过于简陋,在众多Notepad中,Anaconda集成的Jupyter是一个不错的选择,进入官网下载安装包,现在的最新版本已经达到3.12。如果问我Anaconda是什么,其实也是一种python解释器或者说环境,好处在于自己本身就集成了很多科学计算类的库,不需要我们一个一个下载了。
安装好后有两个可执行程序需要关心,如下——可以在自己的快捷页面中找到:
先进入下面的命令行工具,执行pip list,发现Anaconda本身集成了非常多的包,不需要频繁额外下载~
然后就是Jupyter编辑器,点击后会出现如下页面:
然后跳转到浏览器页面——如果没有自动跳转,人为干预一下即可,浏览器键入http://localhost:8888/tree。和Tomcat一样,都是本地的端口号:
然后即可愉快运行:
总的来说,对于小规模的开发来说,PyCharm并非唯一的选择~
四.PyCharm和Anaconda混合
Anaconda本质上也存在python解释器,我们去目录里面找一目了然:
同样是在解释器的设置界面,我们可以将conda环境设置为当前解释器的路径,这样我们就又多了一种解释器选择。不难看到,Anaconda的包确实有先天显著优势:
总的来说,推荐各位使用自己装好的python解释器或者Anaconda的解释器来作为PyCharm的默认解释器,这样可以极大得提高开发效率和资源管理的简洁性~