Mac OS下使用pyenv管理Python版本

問題的由來

在開發(fā)過程中,可能會遇到多個版本同時部署的情況。

  • Mac OS自帶的Python版本是2.x,自己開發(fā)需要Python3.x
  • 系統(tǒng)自帶的是2.6.x,開發(fā)環(huán)境是2.7.x
  • 由于Mac機器系統(tǒng)保護的原因,默認的Python無法對PIP一些包升級,需要組建新的Python環(huán)境
  • 此時需要在系統(tǒng)中安裝多個版本的Python,但又不能影響系統(tǒng)自帶的Python,即需要實現(xiàn)Python的多版本共存。pyenv就是這樣一個Python版本管理器。

Pyenv

pyenv是Python版本管理工具。pyenv可以改變?nèi)值腜ython版本,安裝多個版本的Python,設(shè)置目錄級別的Python版本,還能創(chuàng)建和管理vitual python enviroments。所有的設(shè)置都是用戶級別的操作,不需要sudo命令。

pyenv主要用來管理Python的版本,比如一個項目需要Python2.x,一個項目需要Python3.x。而virtualenv主要用來管理Python包的依賴。不同項目需要依賴的包版本不同,則需要使用虛擬環(huán)境。

pyenv通過系統(tǒng)修改環(huán)境變量來實現(xiàn)Python不同版本的切換。而vitualenv通過Python包安裝到一個目錄來作為Python虛擬包環(huán)境,通過切換目錄來實現(xiàn)不同包環(huán)境間的切換。

pyenv的美好之處在于,它并沒有使用將不同的 PATH植入不同的shell這種高耦合的工作方式,而是簡單地在PATH植入不同的shell這種高耦合的工作方式,而是簡單地在PATH 的最前面插入了一個墊片路徑(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有對 Python 可執(zhí)行文件的查找都會首先被這個 shims 路徑截獲,從而使后方的系統(tǒng)路徑失效。

安裝之前

不同系統(tǒng)請參考 Common build problems,安裝必須的工具。

pyenv安裝

安裝homebrew

如何安裝homebrew?

安裝pyenv

使用homebrew安裝

Mac下安裝了homebrew之后使用homebrew安裝pyenv。

brew update
brew install pyenv
brew upgrade pyenv #之后如果需要更新pyenv

在安裝成功之后需要在.bashrc或者.bash_profile中添加三行來開啟自動補全。

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

自動安裝

pyenv提供了自動安裝的工具,執(zhí)行命令安裝即可。

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

需要保證系統(tǒng)又git,否則需要安裝git

手動安裝

也可以采用手動安裝的方式,將pyenv檢出到你想安裝的目錄。

cd ~
git clone git://github.com/yyuu/pyenv.git .pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc

添加環(huán)境變量。PYENV_ROOT 指向 pyenv 檢出的根目錄,并向 $PATH 添加 $PYENV_ROOT/bin 以提供訪問 pyenv命令的路徑。

這里的 shell 配置文件(~/.bash_profile)依不同 Linux 而需作修改,如果使用 Zsh 則需要相應(yīng)的配置 ~/.zshrc

在使用 pyenv 之后使用 pip 安裝的第三方模塊會自動安裝到當前使用 python 版本下,不會和系統(tǒng)模塊產(chǎn)生沖突。使用 pip 安裝模塊之后,如果沒有生效,記得使用 pyenv rehash 來更新墊片路徑。

pyenv常用命令

使用pyenv commands可以查看所有pyenv命令。

查看已安裝Python版本

  • pyenv versions
ferdinand@ferdinanddeMacBook-Pro  ~  pyenv versions
  system
* 3.6.3 (set by /Users/ferdinand/.python-version)

帶*號的是當前路徑下所使用的Python版本。

查看可安裝的Python版本

  • pyenv install -l
erdinand@ferdinanddeMacBook-Pro  ~  pyenv install -l
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6
  2.6.7
  2.6.8
  2.6.9
  2.7-dev
  2.7
  2.7.1
  2.7.2
  2.7.3
  …………

安裝Python

pyenv install <version> # version為版本號

Python版本管理

pyenv global <version>  # 全局設(shè)置python版本為指定版本,設(shè)置全局的 Python 版本,通過將版本號寫入 ~/.pyenv/version 文件的方式。
pyenv local <version>   # 設(shè)置當前路徑下python版本為指定版本,設(shè)置 Python 本地版本,通過將版本號寫入當前目錄下的 .python-version 文件的方式。通過這種方式設(shè)置的 Python 版本優(yōu)先級較 global 高。
pyenv shell <version>   # 設(shè)置當前shell窗口使用的python版本為指定版本,設(shè)置面向 shell 的 Python 版本,通過設(shè)置當前 shell 的 PYENV_VERSION 環(huán)境變量的方式。這個版本的優(yōu)先級比 local 和 global 都要高。–unset 參數(shù)可以用于取消當前 shell 設(shè)定的版本。

使用pyenv切換Python 版本之后可以通過which python或者是python --version來查看是否生效。

ferdinand@ferdinanddeMacBook-Pro  ~  which python
/Users/ferdinand/.pyenv/shims/python
ferdinand@ferdinanddeMacBook-Pro  ~  python --version
Python 3.6.3

  • Python版本的優(yōu)先級

shell > local > global

pyenv會從當前目錄開始向上逐級查找.python-versiob文件,直到根目錄為止,若找不到,則使用global版本。

pyenv rehash  # 創(chuàng)建墊片路徑(為所有已安裝的可執(zhí)行文件創(chuàng)建 shims,如:~/.pyenv/versions/*/bin/*,因此,每當你增刪了 Python 版本或帶有可執(zhí)行文件的包(如 pip)以后,都應(yīng)該執(zhí)行一次本命令)

Python卸載

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

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

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