macOS Catalina下Jupyter Python3无法导入requests但pip显示已安装
解决macOS Catalina下Jupyter Notebook导入requests失败的问题(ModuleNotFoundError)
我前阵子在macOS Catalina上用venv环境折腾Python的时候,正好碰到和你完全一样的问题:
- 在Jupyter Notebook里导入
requests时,弹出ModuleNotFoundError: No module named 'requests' - 终端里跑
pip3 install requests,系统提示Requirement already satisfied,而且requests明明装在/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages - 终端直接用
python3或者写脚本运行,都能正常导入requests,但macOS原生的Python(2.x或者3.6)不行 - 查了下Jupyter里的Python版本,居然是3.6.5,可我系统里的Python3明明是3.8
问题根源
说白了就是Jupyter用的Python kernel和你装了requests的Python环境不是同一个!你装requests的是Python3.8,但Jupyter默认调用的是系统自带的Python3.6,两个环境的包路径完全分开,3.6当然找不到3.8里的requests。
解决步骤:修改kernel.json配置文件
要让Jupyter用我们的Python3.8环境,得改一下kernel的配置文件:
- 打开终端,先进入Jupyter的kernel配置目录:
cd ~/Library/Jupyter/kernels/python3
(如果你的Python kernel文件夹名字不是python3,就改成对应的名称)
- 先看看当前的kernel配置:
cat kernel.json
你会看到类似这样的内容:
{"argv": ["python3", "-m", "ipykernel_launcher", "-f", "{connection_file}"], "display_name": "Python 3", "language": "python"}
这里的"python3"默认指向系统自带的版本(也就是3.6.5),所以我们要把它换成Python3.8的绝对路径。
- 编辑kernel.json文件(用你习惯的编辑器,比如nano或者vim):
nano kernel.json
把里面的"python3"替换成"/Library/Frameworks/Python.framework/Versions/3.8/bin/python3",还可以把display_name改成"Python 3.8"方便识别,修改后的内容如下:
{ "argv": [ "/Library/Frameworks/Python.framework/Versions/3.8/bin/python3", "-m", "ipykernel_launcher", "-f", "{connection_file}" ], "display_name": "Python 3.8", "language": "python" }
- 保存文件(nano按
Ctrl+O,回车确认,再按Ctrl+X退出),然后重启你的Jupyter Notebook。
验证是否生效
打开Jupyter,新建一个Notebook,运行以下代码:
import sys print(sys.executable) import requests print(requests.__version__)
如果输出的sys.executable是你刚才设置的Python3.8路径,而且能正常打印requests版本,就说明问题解决啦!
内容的提问来源于stack exchange,提问作者42piratas
相关产品推荐
相关产品推荐

