Mac 安裝和管理多個 Python 版本

背景

在 MacOS 10.15 Catalina 即將公測之際,國外技術論壇發表了一篇名爲macOS 10.15 Catalina棄用UNIX腳本語言的帖子,其中說到:較舊的 Python 語言版本 2.7 在 MacOS 10.15 Catalina 中已被棄用,不會包含在 MacOS 10.16 中。其餘UNIX腳本語言(Ruby & Perl)也是如此。python

而後在 MacOS 10.14 以及以前的版本,都是內置的 Python2 版本。在此筆者也建議 Python 學習者直接學 Python3 。git

對於在 Mac 上,學習 Python 的同窗來講,避免不了安裝雙版本 Python 以及切換 Python 版本的狀況。那麼應該如何有效快速的切換呢?不少同窗必定會想到修改環境變量,指定 Python 的默認路徑,這樣固然能夠解決問題,可是不夠優雅,不夠簡潔,不夠快速。此時,pyenv 應運而生,它一個 Python 版本管理工具,它能夠改變全局的 Python 版本,安裝多個版本的 Python,設置目錄級別的 Python 版本,還能建立和管理 Python虛擬環境(virtual python environments )github

PS:筆者體驗了一下 MacOS 10.15 內測版,確實一堆 BUG ,不建議升級。shell

安裝 & 使用

一、安裝 Homebrew

官網地址:brew.sh/ 獲取安裝指令,進行安裝:macos

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
複製代碼

Homebrew安裝成功後,會自動建立目錄 /usr/local/Cellar 來存放Homebrew安裝的程序vim

PS:Homebrew 是 MacOS 下必裝工具之一,是一個很是高效的命令行軟件包管理器ruby

二、安裝 pyenv

brew update
brew install pyenv
pyenv -v # 安裝以後查看 pyenv 版本,確認是否安裝成功
複製代碼

三、安裝 & 管理多個 Python

pyenv install 2.7.15
pyenv install 3.7.3
pyenv versions # 全部已經安裝的版本
複製代碼

注意:在 MacOS 10.14 中,可能出現如下錯誤:

zipimport.ZipImportError: can't decompress data; zlib not available make: *** [install] Error 1 複製代碼

緣由:

詳情參考:問題追查分析bash

解決方案:

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
# 此時再安裝試試
pyenv install 3.7.3
# 查看全部已經安裝的版本,注:星號指定當前的版本
pyenv versions
複製代碼

PS:默認安裝路徑:~/.pyenv/shims/pythoncurl

四、經常使用的命令

使用方式: pyenv <命令> [<參數>]

命令:
  commands    查看全部命令
  local       設置或顯示本地的 Python 版本(當前目錄及其子目錄)
  global      設置或顯示全局 Python 版本
  shell       設置或顯示 shell 指定的 Python 版本(本次會話)
  install     安裝指定 Python 版本
  uninstall   卸載指定 Python 版本)
  version     顯示當前的 Python 版本及其本地路徑
  versions    查看全部已經安裝的版本
  which       顯示安裝路徑
複製代碼

切換版本

pyenv global 3.7.3 # 不建議全局切換
python -V  # 驗證一下是否切換成功
pyevn global system  # 切換回系統版本
pyenv local 3.7.3  # 當前目錄及其目錄切換
python -V  # 驗證一下是否切換成功
pyenv local --unset  # 解除local設置
pyenv shell 3.7.3  # 當前shell會話切換
python -V  # 驗證一下是否切換成功
pyenv shell --unset  # 解除shell設置
複製代碼

切換不成功

若是遇到切換以後,Python版本仍是系統的默認版本的話,就須要配置一下環境變量,在 ~/.zshrc 或 ~/.bash_profile 文件最後寫入:工具

export PYENV_ROOT=~/.pyenv
export PATH=$PYENV_ROOT/shims:$PATH
if which pyenv > /dev/null;
  then eval "$(pyenv init -)";
fi
複製代碼

使配置生效

source ~/.zshrc
# or
source ~/.bash_profile
複製代碼

PS:使用 pyenv 結合虛擬環境則會更增強大,筆者強烈推薦使用。


拓展:pyenv-virtualenv 的安裝和使用

pyenv-virtualenv 是一款 pyenv 插件,能夠用來搭建基於不一樣 Python 版本、虛擬且獨立的 python 環境,可使每一個項目環境與其餘項目獨立開來,保持環境的乾淨,解決包衝突問題

安裝

brew update
brew install pyenv-virtualenv
複製代碼

配置文件

在 ~/.zshrc 或 ~/.bash_profile 文件最後寫入:

# pyenv-virtualenv
if which pyenv-virtualenv-init > /dev/null;
  then eval "$(pyenv virtualenv-init -)";
fi
複製代碼

使生效

source ~/.zshrc
# or
source ~/.bash_profile
複製代碼

使用

一、建立 virtualenv

使用當前版本建立 virtualenv

# 當前版本爲 2.7.15
pyenv virtualenv xxx-2.5.15
複製代碼

指定版本建立 virtualenv

#pyenv virtualenv 版本號 虛擬環境名
pyenv virtualenv 3.7.3 test-3.7.3
複製代碼

二、查看已建立的virtualenv

pyenv versions
複製代碼

三、激活和停用 virtualenv

手動激活 & 停用:

# 激活
pyenv activate test-3.7.3
# 停用
pyenv deactivate
複製代碼

自動激活:

# 方式一:
# 手動把`虛擬環境名`寫入當前目錄的.python-version文件中
vim .python-version
# 啓動自動激活
pyenv activate test-3.7.3
# 停用自動激活
pyenv deactivate
 # 方式二(推薦):
# 使用 pyenv local 虛擬環境名 (會自動將虛擬環境名寫入到當前目錄的.python-version文件中)
pyenv local test-3.7.3
# 停用並取消自定激活
pyenv local --unset
複製代碼

四、刪除現有virtualenv

pyenv uninstall test-3.7.3 # 使用 pyenv uninstall 虛擬環境名
y # 輸入 y ,而後回車
複製代碼
相關文章
相關標籤/搜索