Ubuntu

更改 Python 的預設版本會破壞 Ubuntu 20.04

  • June 2, 2021

我正在創建Ubuntu 20.04 (Focal Fossa) 的 AMI,我希望預設 Python 版本為 3.6。

我安裝了 Python 3.6,也是正確的 pip,然後像這樣設置替代方案:

update-alternatives --install \
 /usr/bin/python3 \
 python3 \
 /usr/bin/python3.6 \
 10

但是後來我遇到了許多與CPython包相關的問題,例如python3-apt(apt_pkg, apt_inst), netifaces,可能還有更多我還沒有發現的問題。

它們都位於/usr/lib/python3/dist-packages並且包名稱採用以下格式:

{name}.cpython-38-x86_64-linux-gnu.so

這是有道理的,因為 Ubuntu 20.04 的預設 Python 版本是 Python 3.8。

Google搜尋的直接解決方案是將名稱連結如下:

ln -s {name}.cpython-38-x86_64-linux-gnu.so {name}.so

IE:

ln -s apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so
ln -s netifaces.cpython-38-x86_64-linux-gnu.so netifaces.so

我嘗試在預設 Python 版本為 3.6 時重新安裝相關包apt install --reinstall python3-apt*.so

有沒有辦法讓 Python 3.6 與系統的預設 CPython 包一起工作?

正如您所發現的,該系統確實依賴於Python的*系統版本,正如它所期望的那樣。*如果你真的想要一個使用 Python 3.6 的系統,最好的辦法是找到一個使用 Python 3.6 的(理想情況下,仍然受支持的)版本:在你的情況下,是 Ubuntu 18.04。

如果您想為在您的 AMI 上執行的程序提供 Python 3.6,您可以考慮使用虛擬環境而不是替換系統 Python。pyenv是一個很好的起點。

像管理您附近的物理機器一樣管理雲上任何機器的環境。如果您使用 Ubuntu 20.x 並且預設安裝的 Python 是 3.8,但您需要 Python v3.6,請根據需要安裝虛擬環境。你可以用pyenv. 您目前正在做的是以慢動作破壞預設的 Python 安裝,這將對該機器上的無數軟體包(基於雲或不基於雲)產生所有不利影響。

我添加了一個我寫的關於 Python 環境虛擬化的教程,以備不時之需(特別是在 中pyenv)。

引用自:https://unix.stackexchange.com/questions/652299