背景
在vscode中使用ipython和jupyter notebook
问题
vscode右上角python状态总是显示busy,vscode在尝试连接ipykernel时 超时连不上,并显示Timed out waiting to get a heartbeat from kernel process
错误
环境
VsCode版本:1.52.1
Jupyter插件:2020.12.414227025
Python插件:2020.12.424452561
ipykernel:最新的
原因
我遇到的问题应该是 包依赖问题 (个人推测)。这里原因可能各有不同,在Github的VsCode页面下有人提到可能有多种原因会导致该问题:插件bug、用户名字符问题等。我之前是可以在vscode中正常使用jupyter的,但是昨天突然就用不了了,总是报错Timed out waiting to get a heartbeat from kernel process
。试了很多办法都不行(当然,没有重装anaconda,也没有重装系统)。整了几个小时,最后在stackoverflow下看到了一个没有点赞的回答,说是执行conda install ipykernel
就好了,抱着死马当活马医的心态试了下,居然好了……
解决方法
使用conda install ipykernel
更新相关的依赖包,或是把当前出问题的虚拟环境删除重新创建
问题到底在哪?
出问题的那天,早上我在写FastAPI项目时,安装了几个包(其中包括:aiofiles),然后晚上在vscode中使用jupyter时就遇到了这个问题……直到在执行了conda install ipykernel
之后才恢复,我发现执行这条命令时只有一个包被更新了: chardet
。ipykernel依赖4.0.0(大概就是这么个意思)以上的包,但是那天早上做FastAPI开发时安装的那几个包里面有依赖chardet 3.*
的,导致ipykernel依赖的高版本cherdet
被覆盖,进一步导致了该问题。
可很奇怪的是:Vscode中,一个虚拟环境出现了这个问题导致其他虚拟环境中的ipykernel也无法连接上,但是单独使用其他虚拟空间中的jupyter(网页版那个)不会有问题……推测可能是影响到了vscode或是jupyper插件什么的
进一步猜测
查了一下,chardet
是用来处理字符的,那么最终是否还是由字符引起的问题,比如跟我一样用的中文用户名……又或是用户名中有空格(Github上一个用户曾提到他把用户名中的空格去掉后就好了……)
最后
以上全是我个人的经历和猜测,对你不一定适用。
具体到底是怎么回事我也不是很清楚,也懒得去追究……
其他可能有用的方法
https://stackoverflow.com/questions/63146155/python-jupyter-ipynb-vscode