安裝 Pyenv (macOS) 需要輸入下面的指令
brew update
brew install pyenv
其中也會有下載相依的套件:
brew install openssl readline sqlite3 xz zlib
並且依照官方文件教學設定
一般安裝後會在家目錄下產出 .pyenv 的資料夾,其中包含 versions, shims 和plugins,分別會放的內容如下:
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 內的指令,請確認該指令位於配置檔案的最下方
完成後,可以重新啟動 shell 讓 PATH 的路徑改變可以重新載入:
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 rehash 及 pyenv shell 使用pyenv 自動補全腳本pyenv rehash 安裝 shimspyenv 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