pyenv 介紹
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