錯誤場景:更新系統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
軟連接起個其他名字python36
、python3.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
的報錯一頓分析,查個報錯差點把老血噴上一屏幕…