Linux系统中jupyter notebook命令无法运行的问题咨询
先说说我遇到的场景:在Python 3.6的Linux机器上,严格按照Jupyter官方指南执行了安装命令:
python3 -m pip install --upgrade pip python3 -m pip install jupyter
但运行jupyter notebook时直接报错:
Error executing Jupyter command 'notebook': [Errno 2] No such file or directory
我去/usr/bin目录下查了Jupyter相关的可执行文件:
cd /usr/bin ls -l | grep jupyter
结果只有这三个文件:
-rwxr-xr-x 1 root root 397 Feb 20 00:29 jupyter -rwxr-xr-x 1 root root 413 Feb 20 00:29 jupyter-migrate -rwxr-xr-x 1 root root 423 Feb 20 00:29 jupyter-troubleshoot
完全找不到jupyter-notebook脚本,但用python3 -m pip list查,明明已经装了notebook 5.5.0。我不想用Anaconda,就想搞清楚到底为啥会这样,后来重启机器再重新装了一遍,命令又正常了。
核心原因拆解
这种情况本质上是pip安装过程中,notebook包的入口脚本没有正确生成或同步,具体可能是这几个原因:
安装时的临时异常打断了脚本生成
当你用pip装jupyter时,notebook包会自动在系统可执行路径(比如/usr/bin)生成jupyter-notebook脚本,jupyter主命令就是通过调用这个子脚本来启动notebook的。如果安装过程中出了小意外——比如磁盘瞬间锁死、pip进程被系统后台进程干扰、文件系统缓存没及时更新——这个脚本的创建就会失败,导致主命令找不到对应的执行文件。权限或安装路径冲突
要是你之前混用了不同权限安装pip包(比如有时sudo有时直接装),可能导致notebook装到了用户目录(比如~/.local/lib),但系统级的jupyter命令找不到用户目录下的子命令。不过我这里pip list显示包已安装,说明包本身没问题,就是入口脚本没跟上。Shell路径缓存未更新
Linux的shell(比如bash)会缓存可执行文件的路径,就算后来脚本生成了,shell可能还在拿旧缓存找命令。不过我这里连脚本都没在/usr/bin里,所以这个不是主因,但也是个常见的排查点。
为啥重启重装就好了?
重启会刷新系统的文件系统缓存,把之前可能卡住的资源释放掉。第二次重新安装时,pip会重新检查已安装的包,发现缺失了jupyter-notebook脚本,就会自动补全创建。说白了就是第一次安装时的临时故障消失了,流程走通了,脚本也就生成成功了。
要是再遇到这种情况,可以这么排查
- 先试试直接跑
python3 -m notebook,如果能正常启动,说明包本身没问题,就是jupyter-notebook脚本没生成 - 用带详细日志的命令重新安装:
python3 -m pip install jupyter -v,看看输出里有没有关于脚本生成的错误信息 - 检查你的
PATH环境变量,确认pip安装的脚本目录(比如用户级的~/.local/bin)是否在PATH里,避免装了但找不到的情况
内容的提问来源于stack exchange,提问作者LoLa

