终端输入错误命令却得到一个python的报错

错误场景:更新系统Python

ubuntu16.04,系统自带python2.7.12和python3.5.2。 因为写代码要用到协程相关的库正好支持最低在python3.5.3。 于是下了个Python3.6把系统的python更新了。更新完成后系统终端出现了这样莫名其妙的问题:

threedog@ThreeDog:~/python/Python-3.6.5$ dsadad
Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 27, in <module>
    from CommandNotFound.util import crash_guard
ModuleNotFoundError: No module named 'CommandNotFound'

系统的正常命令不受影响,但是只要是错误命令,会莫名其妙的调用的Python里去而不是bash的命令解释器。除此之外,通过Ctrl+Alt+t也无法呼出系统终端。心里顿时一团乱码…

出错原因

这个Python的更新是按照网上随便翻了一篇教程来的。更新的过程中执行了这样两步骤:

sudo ln -sf /usr/local/bin/python3 /usr/bin/python3
sudo ln -sf /usr/local/bin/pip3 /usr/bin/pip3

路径/usr/local/bin下的python3和pip3都是我刚装好的python3.6.5

解决方案

找到系统之前自带的python3 (python3.5.2) 然后创建软连接指回去。

sudo ln -sf /usr/bin/python3.5 /usr/local/bin/python3
sudo ln -sf /usr/bin/python3.5 /usr/bin/python3

问题解决,终端恢复正常。

这是一个教训。不管给系统装多新的python,千万不要动系统自带的python python3的软连接。包括pip和pip3的软连接,不只是肉眼可见的什么yum不能用的问题,这么搞会出现很多不可预知的隐患。

给自己的新版python软连接起个其他名字python36python3.6之类的别嫌麻烦。脚本里面#!/usr/bin/python36手动指定, 否则系统里的默认Python解释器出了问题很难搞。

我这链接改回去后估计还存在pip和python对应不上等等问题。一招走错步履维艰。

吐槽

这次算长了个记性。直接搜Linux下更新python的文章,前五篇无一例外的都包含了不负责任的一句ls -sf修改系统的默认python解释器。也不知道大佬们改完系统的python后为什么就没遇到过问题。

这个解决方案是在google里扒到的:https://unix.stackexchange.com/questions/9580/why-is-this-python-error-message-generated-whenever-i-type-a-nonsense-command

国内查到的答案,又让我改~/.bashrc,又让我改/usr/lib/command-not-found,还有大佬对着这个CommandNotFound的报错一顿分析,查个报错差点把老血喷上一屏幕…

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值