iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
Software Development

用舒服的姿勢開發 Python Project系列 第 3

[用舒服的姿勢開發 Python Project] Day 03 - Pyenv 基本使用

Pyenv 基本使用方法

安裝 Pyenv (macOS)

安裝 Pyenv (macOS) 需要輸入下面的指令

brew update
brew install pyenv

其中也會有下載相依的套件:

brew install openssl readline sqlite3 xz zlib

並且依照官方文件教學設定

一般安裝後會在家目錄下產出 .pyenv 的資料夾,其中包含 versions, shimsplugins,分別會放的內容如下:

versions 資料夾會放置下載的所有 Python 版本

shims 是 pyenv 用於截取使用者呼叫 python 的相關指令,並且將其所附帶的參數一併帶入至 pyenv 執行,shims 路徑會被加入至 PATH 環境變數當中

plugins 資料夾下放置的是 pyenv 相關的插件如管理虛擬環境的 pyenv-virtualenv、檢查安裝環境需求是否有誤的 pyenv-doctor 等。

使用 pyenv init 啟動 shims 及自動補全的功能

在官方文件中有提到,若希望可以讓 shell 啟動 shims 及有自動補全的功能,需要將 pyenv init 指令加入到 shell 配置 (configuration file)中

echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bash_profile

若是 zsh 的話會需要輸出至 .zshrc

請注意,由於 pyenv init 會改變 PATH 環境變數的內容,使 shell 應該要優先使用 ~/.pyenv/shims 內的指令,請確認該指令位於配置檔案的最下方

完成後,可以重新啟動 shellPATH 的路徑改變可以重新載入:

exec "$SHELL"

pyenv init - 會輸出一些 shell 指令,例如在 zsh 下呼叫下會輸出:(可參考原始碼

export PATH="/Users/xxxx/.pyenv/shims:${PATH}"
export PYENV_SHELL=zsh
source '/usr/local/Cellar/pyenv/1.2.20/libexec/../completions/pyenv.zsh'
command pyenv rehash 2>/dev/null
pyenv() {
  local command
  command="${1:-}"
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  rehash|shell)
    eval "$(pyenv "sh-$command" "$@")";;
  *)
    command pyenv "$command" "$@";;
  esac
}

其中做了以下的事情:

  • 修改 PATH 環境變數,使其加入 ${PYENV_ROOT}/shims/,讓之後的指令可以優先選擇 shims 中的指令執行
  • 新增 PYENV_SHELL 環境變數,此變數將會於pyenv rehashpyenv shell 使用
  • 導入 pyenv 自動補全腳本
  • 執行 pyenv rehash 安裝 shims

使用 pyenv install 安裝 Python

接著可以輸入 pyenv install <python_version> 來下載想要的 Python 版本,例如想要下載 3.8.0 版的話可以輸入:

pyenv install -v 3.8.0

-v 代表會輸出冗長模式說明其中安裝的執行內容,除此以外也可以透過 pyenv install --list 顯示全部可以下載的 Python 版本,可以再透過 grep 輸出想要的版本有哪些

使用 pyenv global <python_version> 設定全域的 Python 版本

舉例來說,輸入 pyenv global 3.8.0 將會設定全域的 Python 版本為 3.8.0,設定後也可以輸入 pyenv global 來確認當前設定的 Python 版本為何。另外設定過後也可以在 .pyenv 上看到多出一個 version 的檔案,其內容為當前設定的全域 Python 版本

使用 pyenv local <python_version> 設定區域的 Python 版本

舉例來說,輸入 pyenv local 3.8.0 將會設定區域的版本為 3.8.0,設定後也同樣可以輸入 pyenv local 來確認當前設定的區域 pyenv 版本為何,並且在設定的該目錄下,可以看到一個 .python-version 檔案,其內容會是該區域的 Python 版本

使用 pyenv versions 顯示已經安裝的 Python 版本

透過輸入 pyenv versions 可以輸出已經下載的所有 Python:

$ pyenv versions
  system
* 3.8.0 (set by /Users/xxx/.pyenv/version)
  3.8.5

pyenv versions 會顯示當下 local 或 global 的所使用的 Python 版本,括號內容為 Python 來源位置,另外若輸入 pyenv version 則不會顯示全部的 Python 可用版本,並只顯示當前使用的 Python 版本,且本地會優先於全域的版本。

使用 pyenv which <command> 得知目前的 command 來源

舉例來說,pyenv which pip3 會顯示當前使用的 pip3 來的來源會是哪個,可能會是系統的 /usr/local/bin/pip3 或是 /Users/xxxx/.pyenv/versions/3.8.0/bin/pip3 等,端看自己透過 pyenv 選用的 Python 版本決定,與 which pip3 差別在於,which pip3 會回傳的是 ~/.pyenv/shims 下的 pip3 而無從得知 pyenv 選擇的版本為何。

使用 pyenv uninstall <python_version> 解除安裝指定的 Python 版本

假設要刪除 Python 3.8.5 的話,只需要輸入 pyenv uninstall 3.8.5,則 pyenv 會刪除 ~/.pyenv/versions/3.8.5

團隊成員系列文

前端工程師一起來種一棵後端技能樹吧!

想盡辦法當好一個Junior Backend Developer

參考資料


上一篇
[用舒服的姿勢開發 Python Project] Day 02 - Python 版本管理問題
下一篇
[用舒服的姿勢開發 Python Project] Day 04 - Pyenv 的其他使用方法及原理
系列文
用舒服的姿勢開發 Python Project7

尚未有邦友留言

立即登入留言