MacOS 下利用 pyenv 管理Python 版本和虛擬環境
pyenv
是Python
版本管理工具。pyenv
可以改變全域性的Python
版本,安裝多個版本的Python
,設定目錄級別的Python
版本,還能建立和管理virtual python environments
。所有的設定都是使用者級別的操作,不需要sudo
命令。
pyenv
主要用來管理Python
的版本,比如一個專案需要Python 2.x
,一個專案需要Python 3.x
。 而virtualenv
主要用來管理Python
包的依賴,不同專案需要依賴的包版本不同,則需要使用虛擬環境。
pyenv 原理簡介
pyenv
通過系統修改環境變數來實現Python
不同版本的切換。而virtualenv
通過將Python
包安裝到一個目錄來作為Python
包虛擬環境,通過切換目錄來實現不同包環境間的切換。
pyenv
的美好之處在於,它並沒有使用將不同的PATH
植入不同的shell
這種高耦合的工作方式,而是簡單地在PATH
的最前面插入了一個墊片路徑(shims
):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin
。所有對Python
可執行檔案的查詢都會首先被這個shims
路徑截獲,從而使後方的系統路徑失效。
安裝之前
不同系統請參考Common build problems ,安裝必須的工具。
pyenv 安裝
根據官網的安裝說明
或者自動安裝
。 如果使用Mac
直接使用Homebrew
。安裝成功後記得在.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
檢出到你想安裝的目錄。建議路徑為:$HOME/.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
顯示所有可用命令
Python 配置
# 檢視系統當前安裝的python列表 pyenv versions # 列出可安裝版本 pyenv install --list # 安裝指定版本 Python pyenv install -v 3.5.1 # 解除安裝指定版本 Python pyenv uninstall 2.7.3 # 顯示當前python安裝路徑 pyenv which python # 建立墊片路徑 # 為所有已安裝的可執行檔案建立 shims # 如:~/.pyenv/versions/*/bin/* # 每當你增刪了 Python 版本或帶有可執行檔案的包(如 pip)以後,都應該執行一次本命令 pyenv rehash 複製程式碼
Python 切換
#設定全域性的 Python 版本,通過將版本號寫入 ~/.pyenv/version 檔案的方式 pyenv global <版本號> # 設定面向程式的本地版本,通過將版本號寫入當前目錄下的 .python-version 檔案的方式。通過這種方式設定的 Python 版本優先順序較 global 高。 # pyenv 會從當前目錄開始向上逐級查詢 .python-version 檔案,直到根目錄為止。若找不到,就用 global 版本。 pyenv local <版本號> # 設定面向 shell 的 Python 版本,通過設定當前 shell 的 PYENV_VERSION 環境變數的方式。這個版本的優先順序比 local 和 global 都要高。 pyenv shell <版本號> # --unset 引數可以用於取消當前 shell 設定的版本。 pyenv shell --unset 複製程式碼
Python 優先順序
shell > local > global
pyenv-virtualenv
pyenv-virtualenv
是pyenv
下基於virtualenv
的一款外掛,通過pyenv-virtualenv
外掛可以很好的和virtualenv
結合。
安裝
使用自動安裝 pyenv 後,它會自動安裝部分外掛,其中包括了pyenv-virtualenv
。
若使用Homebrew
進行安裝,則可使用命令brew install pyenv-virtualenv
安裝pyenv-virtualenv
外掛。
這樣安裝之後需要執行如下配置:
# 使用 zsh shell vim ~/.zshrc # 使用系統預設 vim ~/.bash_profile # 在 `.zshrc` 或 `.bash_profile` 檔案最後寫入: # pyenv-virtualenv if which pyenv-virtualenv-init > /dev/null; then eval "$(pyenv virtualenv-init -)"; fi # 使配置生效 source ~/.zshrc # or source ~/.bash_profile 複製程式碼
使用
# 建立虛擬環境 # 若不指定 Python 版本,預設使用當前環境 Python 版本 pyenv virtualenv <Python 版本號> <虛擬環境名稱> # 列出當前虛擬環境 pyenv virtualenvs # 啟用虛擬環境 pyenv activate <虛擬環境名稱> # 退出虛擬環境 pyenv deactivate # 刪除虛擬環境 pyenv uninstall <虛擬環境名稱> 複製程式碼
Tips:更換 pip 源
因為國內網路環境,如果在區域網內pip
下載慢,可以嘗試使用阿里雲提供的映象,建立vim ~/.pip/pip.conf
,然後填入:
[global] index-url = http://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com 複製程式碼
更多pip
國內源:
豆瓣:http://pypi.douban.com
阿里雲:http://mirrors.aliyun.com/pypi/simple
清華大學:https://pypi.tuna.tsinghua.edu.cn/simple