背景
在 MacOS 10.15 Catalina 即將公測之際,國外技術(shù)論壇發(fā)表了一篇名為《macOS 10.15 Catalina棄用UNIX腳本語言》的帖子,其中說到:較舊的 Python 語言版本 2.7 在 MacOS 10.15 Catalina 中已被棄用,不會包含在 MacOS 10.16 中。其他UNIX腳本語言(Ruby & Perl)也是如此。
然后在 MacOS 10.14 以及之前的版本,都是內(nèi)置的 Python2 版本。在此筆者也建議 Python 學(xué)習(xí)者直接學(xué) Python3 。
對于在 Mac 上,學(xué)習(xí) Python 的同學(xué)來說,避免不了安裝雙版本 Python 以及切換 Python 版本的情況。那么應(yīng)該如何有效快速的切換呢?很多同學(xué)一定會想到修改環(huán)境變量,指定 Python 的默認(rèn)路徑,這樣當(dāng)然可以解決問題,但是不夠優(yōu)雅,不夠簡潔,不夠快速。此時(shí),pyenv 應(yīng)運(yùn)而生,它一個(gè) Python 版本管理工具,它可以改變?nèi)值?Python 版本,安裝多個(gè)版本的 Python,設(shè)置目錄級別的 Python 版本,還能創(chuàng)建和管理 Python虛擬環(huán)境(virtual python environments )。
PS:筆者體驗(yàn)了一下 MacOS 10.15 內(nèi)測版,確實(shí)一堆 BUG ,不建議升級。
安裝 & 使用
1、安裝 Homebrew
官網(wǎng)地址:http://brew.sh/ 獲取安裝指令,進(jìn)行安裝:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew安裝成功后,會自動創(chuàng)建目錄 /usr/local/Cellar 來存放Homebrew安裝的程序
PS:Homebrew 是 MacOS 下必裝工具之一,是一個(gè)非常高效的命令行軟件包管理器
2、安裝 pyenv
brew update
brew install pyenv
pyenv -v # 安裝之后查看 pyenv 版本,確認(rèn)是否安裝成功
3、安裝 & 管理多個(gè) Python
pyenv install 2.7.15
pyenv install 3.7.3
pyenv versions # 所有已經(jīng)安裝的版本
注意:在 MacOS 10.14 中,可能出現(xiàn)以下錯誤:
zipimport.ZipImportError: can't decompress data; zlib not available
make: *** [install] Error 1
原因:
詳情參考:問題追查分析
解決方案:
sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /
# 此時(shí)再安裝試試
pyenv install 3.7.3
# 查看所有已經(jīng)安裝的版本,注:星號指定當(dāng)前的版本
pyenv versions
PS:默認(rèn)安裝路徑:~/.pyenv/shims/python
4、常用的命令
使用方式: pyenv <命令> [<參數(shù)>]
命令:
commands 查看所有命令
local 設(shè)置或顯示本地的 Python 版本(當(dāng)前目錄及其子目錄)
global 設(shè)置或顯示全局 Python 版本
shell 設(shè)置或顯示 shell 指定的 Python 版本(本次會話)
install 安裝指定 Python 版本
uninstall 卸載指定 Python 版本)
version 顯示當(dāng)前的 Python 版本及其本地路徑
versions 查看所有已經(jīng)安裝的版本
which 顯示安裝路徑
切換版本
pyenv global 3.7.3 # 不建議全局切換
python -V # 驗(yàn)證一下是否切換成功
pyevn global system # 切換回系統(tǒng)版本
pyenv local 3.7.3 # 當(dāng)前目錄及其目錄切換
python -V # 驗(yàn)證一下是否切換成功
pyenv local --unset # 解除local設(shè)置
pyenv shell 3.7.3 # 當(dāng)前shell會話切換
python -V # 驗(yàn)證一下是否切換成功
pyenv shell --unset # 解除shell設(shè)置
切換不成功
如果遇到切換之后,Python版本還是系統(tǒng)的默認(rèn)版本的話,就需要配置一下環(huán)境變量,在 ~/.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 結(jié)合虛擬環(huán)境則會更加強(qiáng)大,筆者強(qiáng)烈推薦使用。
拓展:pyenv-virtualenv 的安裝和使用
pyenv-virtualenv 是一款 pyenv 插件,可以用來搭建基于不同 Python 版本、虛擬且獨(dú)立的 python 環(huán)境,可以使每個(gè)項(xiàng)目環(huán)境與其他項(xiàng)目獨(dú)立開來,保持環(huán)境的干凈,解決包沖突問題。
安裝
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
使用
1、創(chuàng)建 virtualenv
使用當(dāng)前版本創(chuàng)建 virtualenv
# 當(dāng)前版本為 2.7.15
pyenv virtualenv xxx-2.5.15
指定版本創(chuàng)建 virtualenv
#pyenv virtualenv 版本號 虛擬環(huán)境名
pyenv virtualenv 3.7.3 test-3.7.3
2、查看已創(chuàng)建的virtualenv
pyenv versions
3、激活和停用 virtualenv
手動激活 & 停用:
# 激活
pyenv activate test-3.7.3
# 停用
pyenv deactivate
自動激活:
# 方式一:
# 手動把`虛擬環(huán)境名`寫入當(dāng)前目錄的.python-version文件中
vim .python-version
# 啟動自動激活
pyenv activate test-3.7.3
# 停用自動激活
pyenv deactivate
# 方式二(推薦):
# 使用 pyenv local 虛擬環(huán)境名 (會自動將虛擬環(huán)境名寫入到當(dāng)前目錄的.python-version文件中)
pyenv local test-3.7.3
# 停用并取消自定激活
pyenv local --unset
4、刪除現(xiàn)有virtualenv
pyenv uninstall test-3.7.3 # 使用 pyenv uninstall 虛擬環(huán)境名
y # 輸入 y ,然后回車