已安装pyshp但Jupyter导入shapefile报ModuleNotFoundError怎么办
这个报错的核心原因是执行pip安装操作的Python环境,和Jupyter Notebook当前运行代码使用的Python内核不属于同一个环境。
返回的"Requirement already satisfied"提示仅代表pyshp被安装在了系统全局Python或者其他虚拟环境中,Jupyter当前调用的环境内并没有安装这个包。
补充说明:pyshp包安装完成后使用import shapefile导入是正确写法,不存在导包名拼写错误的问题。
方案1:直接在当前Notebook内安装(操作成本最低)
在当前Notebook中新建一个代码单元,执行以下命令,会自动调用当前内核对应的pip安装pyshp,不会出现环境错配的问题:
import sys !{sys.executable} -m pip install pyshp
命令执行完成后,点击顶部菜单栏「内核」-「重启内核」,再运行import shapefile as sh即可正常导入。
注意:不要直接在单元格中执行
!pip install pyshp,这种写法依然可能调用到其他环境的pip,无法把包装到当前内核环境中。
方案2:手动定位Jupyter对应环境安装
如果不想在Notebook里执行安装命令,可以先定位当前Jupyter使用的Python解释器路径:
在Notebook单元格中执行:
import sys print(sys.executable)
复制输出的完整路径,打开系统命令提示符,用该路径替换下面命令里的<解释器路径>后执行:
<解释器路径> -m pip install pyshp
举个例子,如果输出的路径是C:\Users\张三\miniconda3\envs\gis\python.exe,实际执行的命令就是:
C:\Users\张三\miniconda3\envs\gis\python.exe -m pip install pyshp
安装完成后重启Jupyter内核即可。
方案3:补全虚拟环境的Jupyter内核注册
如果你使用conda/venv创建了独立虚拟环境,但是没有把环境注册到Jupyter的内核列表里,也会出现选不到对应环境、装包错位的问题:
- 在命令提示符中激活你要使用的虚拟环境
- 执行以下命令安装ipykernel并注册内核:
pip install ipykernel python -m ipykernel install --user --name=你的自定义环境名称
- 注册完成后重启Jupyter,在顶部「内核」-「更换内核」菜单中选中你刚注册的环境,再执行导包操作即可。
内容的提问来源于stack exchange,提问作者speck

