Install multiple Python versions on Arch Linux.
有些用Python開發的專案不只是限定套件版本,還限定Python版本的說。可是Arch Linux本身是滾動發行版,系統安裝的Python版本前進到宇宙盡頭的速度更新,這樣要跑某些東西就會出問題。
舉例來說,有個專案表明他們使用Python 3.8開發的,如果強行在Python 3.10.9的環境執行該專案,會跳出永遠都解不完的錯誤,一下套件找不到,一下核心傾印…之類的。又Linux系統是很依賴Python的,不可能降級系統的Python。為了讓專案順利執行,唯有安裝多重Python版本,並善用venv功能了。
至於要怎麼安裝嘛,Python官網是有原始碼能下載編譯,不過Arch Linux還有更簡單的方法:從AUR裝。AUR上面會收錄社群維護的舊版本套件,舉凡Python 2到Python 3.9都有,並且一行指令就能自動化安裝。
1. 安裝yay#
yay是跟pacman用法類似的套件管理員,專門管理AUR的套件。
如果你還沒裝,推薦現在馬上按照 作者教學安裝:
sudo pacman -S --needed git base-devel && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si
2. 從AUR安裝舊版本Python#
*可以用指令python --version
確認目前系統的Python版本。
- 至 AUR首頁鍵入Python版本搜尋。假設要安裝Python 3.8,那麼就是用yay安裝,不用加sudo,一路Enter:
yay -S python38
- 等待編譯完成後輸入密碼,Python 3.8會自動完成安裝。
2. 切換Python舊版本與使用虛擬環境#
使用指令which python3
查看系統Python的安裝位置,通常Arch Linux的Python 3是在/usr/bin/python3
。執行python3 main.py
跑程式的時候,指向的便是該檔案。
至於用AUR安裝的舊版Python也是一樣原理:用which python3.8
指令得出安裝位置位於/usr/bin/python3.8
。日後要用python3.8跑程式的話,就得改成python3.8 main.py
這樣。
有需要的話,我們可以用alias
指令暫時將python3變成等同執行python3.8:alias python3=python3.8
。
如果你的專案指定要用Python 3.8,而且套件也嚴格限定版本的話,為了不讓用Python 3.8的pip安裝的套件跟系統衝突,我們可以利用Python的虛擬環境隔離不同版本的pip套件:
# 安裝venv
sudo pacman -S python-virtualenv
# 在專案目錄用Python 3.8建立虛擬環境venv
python3.8 -m venv venv
# 進入虛擬環境
source venv/bin/activate
進入虛擬環境後pip可能會是舊版,記得先更新一下:
pip install --upgrade pip
這樣就能在虛擬環境用pip安裝套件了。注意跑程式還是得用python3.8 main.py
來執行,而非python3 main.py
;pip安裝套件亦同:python3.8 pip -m install requirements.txt
。
3. 替代方案:Anaconda#
Anaconda可以省去從AUR裝Python的麻煩,參見 Linux系統安裝Anaconda教學