使用 Pyenv 來管理多版本的 Python

在測試一些早期的專案時,往往會遇到一個問題令人傷腦筋的狀況,那就是運行環境太新,有些函式已經棄用或不再支援。因此往往最簡單暴力的方式就是安裝舊版的執行環境,問題往往就迎刃而解,但隨之而來的新問題是把系統環境弄得很髒。所以今天要來介紹的就是一套Python版本管理工具 Pyenv 。

在深度學習或是其他 Python 應用專案上,我也會使用 venv 、conda 等工具來管理開發環境,他們與今天要介紹的最大差異在於他們是創建一個『獨立』的空間來去存放整個專案所需使用的套件,『獨立』一詞是相當關鍵,這也意外者如果你的專案今天混合不同語言,那難不成得全部把需要的環境重新安裝?這時 Pyenv 相對就單純多,他就是一個 Python 版本管理工具,你可以下載到幾乎所有的 Python 版本,或是直接在你的電腦從原始碼進行編譯與安裝,但如果選用 venv 或 conda 就會取決遠端的庫有沒有編譯好的套件,相對較為麻煩。

在 aarch64 的 MacOS 上安裝 Pyenv

前期提要介紹完,這篇就以 Mac aarch64 來做說明
M 系列的 CPU 確實好用,但在相容性上就會有所侷限,當初也是天真的想說直接透過 conda 來處理,結果卻說沒有我要重建的 Python 2.7.18 版本可以安裝。
首先我們先安裝套件,這可以使用好用的 Homebrew 來完成套件的安裝,不得不說這工具跟 apt-get 一樣好用

brew install pyenv

就是跟上面一樣簡單,沒有複雜的設定,就是一條指令就能完成。但要記得,為了讓後續命令列可以認得他,我們需要把他寫到 ~/.zshrc 中,這樣指令才會有反應。

vim ~/.zshrc

# 寫入內容如下:
export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

source ~/.zshrc

安裝不同版本的 Python

接著我們來使用下面的指令來看看有哪些版本的 Python 可以安裝

pyenv install -l

不誇張,幾乎所有的版本都能用,從2.1.3 一路可以選到 3.13-dev 。我們以Python 2.7.18 為例,進行安裝作業

pyenv install 2.7.18

察看已安裝的Python 版本並切換之

接下來就是一連串的自動化腳本作業,我們只需要在安裝完成後,透過指令來察看目前已經配置好且可以使用的版本

pyenv version

# 預期顯示內容
* system (set by /Users/user/.pyenv/version)
  2.7.18

可以看到目前有一個系統版本的 Python 被*做核選,現在我們就來進行版本切換。非常人性的提供多元的選擇,這裡就舉2個常用的選項,包含全域切換跟當前 shell 切換

# global
pyenv global <version>
e.g. pyenv global 2.7.18

# shell
pyenv shell <version>
e.g. pyenv shell 2.7.18

為什麼說這設計很方便,這是因為有時候你只是為了要在當前 shell 編譯特定程式,其他時候你可能還是需要使佣Python 3,這時你就沒必要切換到Global ,只需要套用至 shell 當中,這樣session 結束後,就不需要自動切換回來了

發佈留言