Pyenv

Pyenv 是一個 Python 版本控制的套件,安裝好後可以輕鬆切換 Python 版本

1. Windoes 安裝 Pyenv

  1. 使用 git 下載 pyenv-win

    git clone https://github.com/pyenv-win/pyenv-win.git "%UserProfile%/.pyenv"
  2. 設定 PYENV 相關變數

    變數名稱變數值
    PYENV%USERPROFILE%.pyenv\pyenv-win\
    PYENV_ROOT%USERPROFILE%.pyenv\pyenv-win\
    PYENV_HOME%USERPROFILE%.pyenv\pyenv-win\
  3. 編輯 Path 變數
    為了讓系統能在任何地方執行 pyenv 命令,我們需要將 binshims 目錄加到 Path 中。

    %USERPROFILE%\.pyenv\pyenv-win\bin;%USERPROFILE%\.pyenv\pyenv-win\shims;

    將它們移到整個清單的最頂端。這能確保系統優先抓取 pyenv 的 Python 版本。

  4. 驗證Pyenv有沒有安裝成功

    pyenv version

2. Mac 安裝 Pyenv

  1. 更新 Homebrew,和安裝 Pyenv 的相依套件

    $ brew update
    $ brew install openssl readline sqlite3 xz zlib
  2. 利用 HomebrewMac安裝 pyenv

    brew install pyenv
  3. 執行以下指令,在 ~/.zshrc 加入 PYENV_ROOT 路徑和 pyenv init

    $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
    $ echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    $ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
  4. 重新啟動 shell,就完成。

3. Linux 安裝 Pyenv

  1. 更新 apt-get 和安裝相依性套件

    apt-get update
    apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget
  2. 利用git安裝pyenv

    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  3. 執行以下指令,在 ~/.bashrc 加入 PYENV_ROOT 路徑和 pyenv init

    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc

    關於其他 system 需要安裝的相依套件,可以參考這篇文件:https://github.com/pyenv/pyenv/wiki#suggested-build-environment

  4. 重新啟動 shell,就完成囉!

    exec "$SHELL"

4. 如何驗證 Pyenv 有沒有安裝成功?

  1. 查看 pyenv 可安裝 Python 版本

    pyenv install --list
  2. 安裝想選擇的python 版本

    pyenv install 3.7.7
    pyenv install 3.14.1
  3. 查看已經安裝過的 pyenv python 版本

    pyenv versions
    3.14.1
    3.7.7
  4. 切換 Python 版本,可以選擇用 globallocalshell 來執行:

    pyenv global 3.7.7
    pyenv local 3.7.7
    pyenv shell 3.7.7

    global & local & shell 三者使用方法差異在於:

    • global 對應於全局
    • local 對應於當前資料夾
    • shell 對應於當前 shell
    • 優先順序是 shell > local > global
  5. Pyenv 如何切換成原本系統的 Python 版本
    可以使用 pyenv {{global}} system,system 代表原本系統的 python 版本,就可以切換回去

    pyenv global system

    Windowspyenv-win 中,其實不支援 system 這個關鍵字(這是 Linux/macOS原生pyenv才有的,在Windows中,如果你想用系統本來的Python,只要不啟用pyenv,或者不設定 local/global 即可,或者是 pyenv 找不到符合 .python-version的本機版本)。

  6. 為了解決這個衝突,並順利切換版本,請依照以下步驟排查與設定:

    • 檢查並刪除 .python-version 檔案
      pyenv 會在目前目錄(以及往上層找)搜尋 .python-version,如果有,請直接刪除它
    • 不要使用 system,請改用具體的版本號
      pyenv global x.x.x
    • 如果你想用回原本系統的Python
      如果你只是想用原本系統安裝的Python,並且「暫時」不想讓 pyenv 干涉:
    • 清除全域的pyenv設定: 進入C:\Users\您的用戶名\.pyenv\pyenv-win,看看有沒有一個叫version 的檔案(沒有副檔名),如果有,把它刪除或清空。
    • 或者直接在 pyenv 內解除 local 鎖定:
      pyenv local --unset

相關主題與延伸閱讀