終端輸入錯誤命令卻得到一個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的報錯一頓分析,查個報錯差點把老血噴上一屏幕…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章