問題的由來
在開發過程中,可能會遇到多個版本同時部署的情況。
- Mac OS自帶的Python版本是2.x,自己開發需要Python3.x
- 系統自帶的是2.6.x,開發環境是2.7.x
- 由於Mac機器系統保護的原因,默認的Python無法對PIP一些包升級,需要組建新的Python環境
- 此時需要在系統中安裝多個版本的Python,但又不能影響系統自帶的Python,即需要實現Python的多版本共存。
pyenv
就是這樣一個Python版本管理器。
Pyenv
pyenv
是Python版本管理工具。pyenv
可以改變全局的Python版本,安裝多個版本的Python,設置目錄級別的Python版本,還能創建和管理vitual python enviroments。所有的設置都是用戶級別的操作,不需要sudo
命令。
pyenv
主要用來管理Python的版本,比如一個項目需要Python2.x,一個項目需要Python3.x。而virtualenv主要用來管理Python包的依賴。不同項目需要依賴的包版本不同,則需要使用虛擬環境。
pyenv
通過系統修改環境變量來實現Python不同版本的切換。而vitualenv通過Python包安裝到一個目錄來作為Python虛擬包環境,通過切換目錄來實現不同包環境間的切換。
pyenv
的美好之處在於,它並沒有使用將不同的 PATH植入不同的shell這種高耦合的工作方式,而是簡單地在PATH植入不同的shell這種高耦合的工作方式,而是簡單地在PATH 的最前面插入了一個墊片路徑(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。所有對 Python 可執行文件的查找都會首先被這個 shims 路徑截獲,從而使后方的系統路徑失效。
安裝之前
不同系統請參考 Common build problems,安裝必須的工具。
pyenv安裝
安裝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
提供了自動安裝的工具,執行命令安裝即可。
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
需要保證系統又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
添加環境變量。PYENV_ROOT
指向 pyenv
檢出的根目錄,並向 $PATH
添加 $PYENV_ROOT/bin
以提供訪問 pyenv
命令的路徑。
這里的 shell 配置文件(~/.bash_profile)
依不同 Linux 而需作修改,如果使用 Zsh 則需要相應的配置 ~/.zshrc
在使用 pyenv
之后使用 pip
安裝的第三方模塊會自動安裝到當前使用 python 版本下,不會和系統模塊產生沖突。使用 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> # 全局設置python版本為指定版本,設置全局的 Python 版本,通過將版本號寫入 ~/.pyenv/version 文件的方式。 pyenv local <version> # 設置當前路徑下python版本為指定版本,設置 Python 本地版本,通過將版本號寫入當前目錄下的 .python-version 文件的方式。通過這種方式設置的 Python 版本優先級較 global 高。 pyenv shell <version> # 設置當前shell窗口使用的python版本為指定版本,設置面向 shell 的 Python 版本,通過設置當前 shell 的 PYENV_VERSION 環境變量的方式。這個版本的優先級比 local 和 global 都要高。–unset 參數可以用於取消當前 shell 設定的版本。
使用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版本的優先級
shell > local > global
pyenv會從當前目錄開始向上逐級查找
.python-versiob
文件,直到根目錄為止,若找不到,則使用global版本。
pyenv rehash # 創建墊片路徑(為所有已安裝的可執行文件創建 shims,如:~/.pyenv/versions/*/bin/*,因此,每當你增刪了 Python 版本或帶有可執行文件的包(如 pip)以后,都應該執行一次本命令)
Python卸載
pyenv isntall <version> # 安裝版本號為<version>的Python pyenv uninstall <version> #卸載版本號為<version>的Python
作者:ferdinand_hx
鏈接:https://www.jianshu.com/p/2b0b652eaa50
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。