问题
最近刚开始用Jupyter,在安装geopandas后,发现无法导入,但安装列表里已有此包。
import时报错:
一开始我用的是
!pip list
来查看安装列表,列表里显示有包。
后面又用命令 pip list 来查看,发现又没有这个包了,这两个命令查看的位置是不同的,查资料后发现:
在Jupyter Notebook中,以感叹号!开头的命令将在系统的命令行终端中执行,而不是在Python解释器中执行。因此,!pip list将会在终端中执行pip list命令,而pip list将会在Python解释器中执行。
解决方法
确认jupyter与终端分别使用的Python解释器路径是否一致
先在Jupyter中输入:
import sys
sys.executable
查看Jupyter的解释器路径
再在终端(激活和Jupyter一样的环境)中输入python , 然后import sys,最后执行sys.executable,查看终端的解释器路径。
没解决成功之前我的两个路径是不一致的,这时有两个解决办法
2.1 安装一个内核切换管理包
JupyterNotebook设置Python环境 | 来呀,快活呀~ (xmfbit.github.io)
(8条消息) 记录贴:关于jupyter-notebook无法同步虚拟环境包的问题_scnu_yanghaizhen的博客-CSDN博客_jupyter notebook不能同步虚拟环境
详细教程如上↑
但是我当时没安装成功,于是又有第二种处理方式
2.2 在jupyter notebook中创建一个新的kernel
在终端中进入Python的虚拟环境或安装好geopandas的环境(执行下面步骤前,一定确认该环境中已经安geopandas了,否则现安一个,pip install geopandas),其实在使用这个方法的时候,我就发现我的虚拟环境中没有ipykernel这个包,可能就是因为这个原因才导致解释器地址不一致吧?
所以首先需要运行以下命令安装ipykernel包:
pip install ipykernel
(注意:这个时候不要科学上网,当时就因为网络问题,一直下载不下来,又浪费了很多功夫)
激活环境后,在终端中运行以下命令来创建新的kernel,将kernel命名为你需要的名字(例如,my_env):
python -m ipykernel install --user--name=my_env
这个命令会在jupyter notebook中创建一个新的kernel,并将它命名为my_env。
在jupyter notebook中打开一个notebook,在notebook的菜单中选择Kernel -> Change Kernel -> my_env,将这个notebook绑定到新创建的kernel上。
在notebook中输入以下代码,确认jupyter notebook已经切换到了正确的环境:
import sys
sys.executable
运行代码后,输出的路径应该是你在终端中激活的Python环境的路径,这样就可以在jupyter notebook中使用正确的Python解释器了。
ok,这时import geopandas就没问题了