[Python] 使用 pyenv 在 Mac 上安裝已經消失的 Python 2 版本

[Python] 使用 pyenv 在 Mac 上安裝已經消失的 Python 2 版本

不知是何時開始,Mac 上原有的 Python 2.7 不見了,

只能使用 Python 3…

雖然強制升級 Python 3 是不錯,但偶爾會想要用 Python 2 來做些比較,

尤其是比較 bytes 和 str、unicode 等等的處理。

 

今天在上網時,正好又看到了 pyenv 這個東西,

它可以在系統中安裝多種 Python 版本,並且可以隨意切換,

決定就來裝裝看囉~

 

1. 安裝 pyenv

在 Mac 上使用 Homebrew 直接安裝:

brew install pyenv

 

2. 使用 pyenv 安裝新版本的 Python

執行  pyenv versions 顯示目前已安裝好的 Python 版本,

像我目前就只有系統內建的版本 (system):

$ pyenv versions
* system (set by /Users/testuser/.pyenv/version)

 

執行  pyenv install -l 看看有什麼版本的 Python 可以安裝…

發現還蠻多的,除了一般版號 (像 2.7.18) 就是一般的 CPython 外,

還可以看到 anaconda、jython、pypy 等等:

$ pyenv install -l
Available versions:
  2.1.3
......
  2.7.18
  3.0.1
......
  3.10.4
......
  anaconda-4.0.0
......
  ironpython-2.7.4
......
  jython-2.7.2
......
  pypy-5.7.1
......
  pypy2.7-7.3.9
......
  pypy3.9-7.3.9
......
  stackless-3.7.5

 

就來安裝它提供的 Python 2 的最終版本 2.7.18 吧:

pyenv install 2.7.18

 

裝好之後,收到一個提示說要修改 ~/.bash_profile,

把下面內容加到 ~/.bash_profile 的最下面,

讓 pyenv 被放在 $PATH 的最前面,

這樣 pyenv 才能控制現在要執行哪一個 Python 執行檔:

export PYENV_ROOT="$HOME/.pyenv"
command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

 

再次執行  pyenv versions ,

可以發現目前已經有兩種版本可選用了:

$ pyenv versions

* system (set by /Users/testuser/.pyenv/version)
  2.7.18

 

3. 設定要使用的 Python 版本

pyenv 允許使用者設定三種環境下的 Python 版本:

  • shell: 設定目前 shell 階段 (session) 裡的 Python (相當於設定環境變數 PYENV_VERSION)
  • local: 設定此目錄或子目錄的 Python (會建立 .python-version 檔案)
  • global: 設定全域級別的 Python (會建立 $(pyenv root)/version 檔案)

 

基本上,pyenv 會以 shell > local > global 的順序,

來尋找現在 “python” 要執行哪一個 Python 版本,

如果都沒找到的話,就會使用系統預設的 “system” 版本。

 

下面是設定目前的 shell session 要使用 Python 2.7.18:

pyenv shell 2.7.18

 

在同一個 shell session 跑跑看 python,果然叫起來的是 2.7.18 版本。

如果開另一個 shell session, 執行 python 就會找不到東西:

$ python --version

Python 2.7.18

 

對我來說,平常 python3 這個指令會把 Python 3 跑起來,

所以我用 pyenv 把 2.7.18 版本設成全域級別,

這樣不管在哪個 shell session,跑 “python” 都能跑到 Python 2:

pyenv global 2.7.18

 

在目前的設置下,Python 2 和 Python 3 都能同時存在:

$ python --version
Python 2.7.18

$ python3 --version
Python 3.9.13

 

當然還可以把更多 Python 2 版本、甚至是把 Python 3 的版本,

也都加進 pyenv 裡面,

不過對我來說,目前已經足夠使用了,

就先試用一段時間看看囉~^^

 

(本頁面已被瀏覽過 19 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料