快轉到主要內容

Arch Linux安裝多重Python版本,使其共存

分類   Linux系統 Linux使用技巧
標籤   Arch Linux Python
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

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版本。

  1. AUR首頁鍵入Python版本搜尋。假設要安裝Python 3.8,那麼就是用yay安裝,不用加sudo,一路Enter:
yay -S python38
  1. 等待編譯完成後輸入密碼,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教學

相關文章

Arch Linux連接Airpods Pro藍牙耳機和查看電量
分類   Linux系統 Linux使用技巧
標籤   KDE Plasma Arch Linux
Linux平鋪視窗管理員:i3wm快速上手
分類   Linux系統 Linux使用技巧
標籤   I3wm Linux
WayPipe:Wayland下的Linux遠端桌面,類似SSH X11 forwarding
分類   Linux系統 Linux使用技巧
標籤   Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。