MacOS 下利用 pyenv 管理Python 版本和虛擬環境

pyenv 介紹

pyenvPython 版本管理工具。pyenv 能夠改變全局的 Python 版本,安裝多個版本的 Python,設置目錄級別的 Python 版本,還能建立和管理 virtual python environments。全部的設置都是用戶級別的操做,不須要 sudo 命令。html

pyenv 主要用來管理 Python 的版本,好比一個項目須要 Python 2.x,一個項目須要 Python 3.x。 而 virtualenv 主要用來管理 Python 包的依賴,不一樣項目須要依賴的包版本不一樣,則須要使用虛擬環境。python

pyenv 原理簡介

pyenv 經過系統修改環境變量來實現 Python 不一樣版本的切換。而 virtualenv 經過將 Python 包安裝到一個目錄來做爲 Python 包虛擬環境,經過切換目錄來實現不一樣包環境間的切換。git

pyenv 的美好之處在於,它並無使用將不一樣的 PATH 植入不一樣的 shell 這種高耦合的工做方式,而是簡單地在 PATH 的最前面插入了一個墊片路徑(shims):~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin。全部對 Python 可執行文件的查找都會首先被這個 shims 路徑截獲,從而使後方的系統路徑失效。github

安裝以前

不一樣系統請參考 Common build problems,安裝必須的工具。shell

pyenv 安裝

根據官網的 安裝說明 或者 自動安裝。 若是使用 Mac 直接使用 Homebrew。安裝成功後記得在 .bashrc 或者 .bash_profile 中添加三行來開啓自動補全。vim

# 根據本身的環境配置
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
複製代碼

自動安裝

pyenv 提供了自動安裝的工具,執行命令安裝便可:segmentfault

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

保證系統有 git,不然須要新安裝 gitbash

手動安裝

若是想要更加詳細的瞭解安裝過程,可使用手動安裝。將 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 命令的路徑。curl

這裏的 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-virtualenvpyenv 下基於 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

參考

相關文章
相關標籤/搜索