Mac 安裝和管理多個(gè)Python版本

背景

在 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 ,然后回車
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容