在 AlmaLinux 上將默認的 Python 3.6 升級或切換到 Python 3.11 是一個常見的需求。
請注意,直接替換系統自帶的 Python 3.6 是非常危險的,因為許多系統工具(如?yum
/dnf
?包管理器)都依賴于它,盲目刪除或修改可能會導致系統崩潰。
推薦的做法是:?保留系統原有的 Python 3.6,同時安裝 Python 3.11,并通過配置?alternatives
?工具或使用虛擬環境 (venv
) 來管理默認版本。
以下是兩種最安全、最常用的方法。
1. 方法一:使用 Software Collections (SCL) 倉庫(推薦且簡單)
Red Hat 及其衍生版(如 AlmaLinux)提供了 SCL 倉庫,它可以讓你安裝和維護多個版本的軟件而不會影響系統默認版本。
啟用 SCL 倉庫:
AlmaLinux 可能已經預裝了?scl
?工具。首先安裝 SCL 倉庫配置。sudo dnf install almalinux-release-scl
安裝 Python 3.11:
搜索可用的 Python 版本,然后安裝 3.11 及其開發工具包。sudo dnf search rh-python sudo dnf install rh-python311 rh-python311-python-devel
啟用 Python 3.11:
安裝后,它不會自動成為默認版本。你需要在每次需要時通過?scl enable
?命令來啟動一個包含 Python 3.11 環境的 shell。scl enable rh-python311 bash
現在,在這個新的 shell?中,
python --version
?和?pip --version
?都會指向 3.11。$ python --version
Python 3.11.x
(可選)永久為您的用戶啟用:
如果您希望每次登錄都默認使用 Python 3.11,可以將它添加到您的 shell 配置文件中。echo "source scl_source enable rh-python311" >> ~/.bashrc
然后重新加載配置:
source ~/.bashrc
優點:非常安全,與系統環境完全隔離,管理簡單。
缺點:需要額外的命令來啟用環境(但可以配置為自動啟用)。
2. 方法二:從源碼編譯安裝并配置 alternatives
這種方法更靈活,可以安裝任何版本,但步驟稍復雜。
安裝編譯依賴:
sudo dnf groupinstall "Development Tools" sudo dnf install openssl-devel bzip2-devel libffi-devel sqlite-devel readline-devel
下載并編譯 Python 3.11:
# 下載源碼包 wget https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz # 解壓 tar xvf Python-3.11.9.tgz # 進入目錄 cd Python-3.11.9 # 配置編譯選項(--prefix=/usr/local 是標準位置) ./configure --enable-optimizations --prefix=/usr/local # 編譯并安裝 (使用 -j 參數加速編譯,數字為CPU核心數) sudo make -j 4 sudo make altinstall
重要:使用?
make altinstall
?而不是?make install
,以避免覆蓋系統默認的?python3
?二進制文件。驗證安裝:
此時,系統會同時存在兩個版本:/usr/bin/python3
?(系統自帶的 3.6)/usr/local/bin/python3.11
?(新安裝的 3.11)
直接運行?
python3.11
?和?pip3.11
?來使用新版本。python3.11 --version
(可選)使用 alternatives 配置默認版本:
如果你想將系統范圍的?python3
?命令指向 3.11(有一定風險,請確保你的關鍵系統工具不依賴 3.6),可以使用?alternatives
?工具。# 將 python3.11 加入 alternatives 列表 sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.11 311 # 交互式選擇默認版本 sudo alternatives --config python3
運行?
sudo alternatives --config python3
?后,會列出所有可用的版本,輸入對應的選擇編號即可切換。警告:執行此操作后,請務必測試?
sudo dnf update
?等命令是否正常。因為 DNF 是用 Python 寫的,如果與新版 Python 不兼容會出錯。如果出現問題,只需再次運行?sudo alternatives --config python3
?并選擇回原來的 Python 3.6 即可。
3. 方法三:使用虛擬環境(Venv) - 最安全的方法
這其實不是切換系統版本,而是為每個項目單獨指定 Python 版本。這是 Python 開發的最佳實踐。
首先,按照方法二安裝?
python3.11
?和?pip3.11
。為你的項目創建虛擬環境,并直接指定使用 Python 3.11:
# 直接使用 python3.11 解釋器創建虛擬環境 python3.11 -m venv my_project_venv
激活虛擬環境:
source my_project_venv/bin/activate
激活后,命令行提示符會變化,所有?
python
?和?pip
?命令都會指向虛擬環境內的 3.11 版本,與系統完全隔離。(my_project_venv) $ python --version
Python 3.11.9
退出虛擬環境:
deactivate
優點:絕對安全,項目之間環境隔離,無任何沖突。
缺點:需要為每個項目單獨設置。
4. 總結與建議
方法 | 優點 | 缺點 | 適用場景 |
---|---|---|---|
SCL (方法一) | 安全、簡單、官方支持 | 需要手動啟用環境 | 大多數情況下的首選,尤其是服務器環境 |
源碼編譯 (方法二) | 靈活,可安裝任意版本 | 步驟復雜,有潛在風險 | 需要高度定制化或特定版本的高級用戶 |
虛擬環境 (方法三) | 最安全,項目隔離 | 每個項目都需配置 | Python 開發的最佳實踐,強烈推薦 |
最終建議:
? ? <1> 如果你只是想運行一些需要 Python 3.11 的應用或腳本,使用方法一 (SCL)。
? ? <2> 如果你是一名開發者,請務必使用方法三 (虛擬環境)?來管理你的項目,并使用方法二來安裝你需要的 Python 版本作為虛擬環境的基礎解釋器。
? ? <3> 盡量避免使用方法二中的?alternatives
?來更改全局?python3
?命令,除非非常清楚自己在做什么并且能承擔后果。