Python 兩大環境管理神器:pyenv 和 virtualenv

NO IMAGE

簡介


pyenv 是一個開源的 Python 版本管理工具,可以輕鬆地給系統安裝任意 Python 版本,想玩哪個版本,瞬間就可以切換。有了 pyenv,我們不需要再為系統多版本 Python 共存問題而發愁,也不用為手動編譯安裝其他 Python 版本而浪費時間,只需要執行一條簡單的命令就可以切換並使用任何其他版本,該工具真正地做到了開箱即用,簡單實用。

virtualenv 是一個用來建立完全隔離的 Python 虛擬環境的工具,可以為每個專案工程建立一套獨立的 Python 環境,從而可以解決不同工程對 Python 包,或者版本的依賴問題。假如有 A 和 B 兩個工程,A 工程程式碼要跑起來需要 requests 1.18.4,而 B 工程跑起來需要 requests 2.18.4,這樣在一個系統中就無法滿足兩個工程同時執行問題了。最好的解決辦法是用 virtualenv 給每個工程建立一個完全隔離的 Python 虛擬環境,給每個虛擬環境安裝相應版本的包,讓程式使用對應的虛擬環境執行即可。這樣既不影響系統 Python 環境,也能保證任何版本的 Python 程式可以在同一系統中執行。

最佳實踐:使用 pyenv 安裝任何版本的 Python,然後用 virtualenv 建立虛擬環境時指定需要的 Python 版本路徑,這樣就可以建立任何版本的虛擬環境,這樣的實踐真是極好的!

pyenv 的安裝及使用


1. 安裝

  • pyenv 安裝到 ~/.pyenv 目錄(當然你可以安裝到任意其他路徑)
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
  • 配置環境變數(我的 Shell 是 zsh,如果是 bash,請新增到 ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
  • 新增 pyenv 初始化(我的 Shell 是 zsh,如果是 bash,請新增到 ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
  • 使當前 Shell 配置生效,完成安裝
exec $SHELL
source ~/.zshrc

2. 使用

  • 檢視有哪些 Python 版本可以安裝
pyenv install --list
  • 安裝某個 Python 版本
pyenv install -v 3.6.4
  • 檢視當前 Python 版本情況(* 表示系統當前的 Python 版本,system表示系統初始版本)
$ pyenv versions
system
2.6.7
* 3.6.4 (set by /Users/haohao/.pyenv/version)
  • 切換 Python 版本(切換之後檢視當前版本)
$ pyenv global 3.6.4
$ pyenv versions
system
* 3.6.4 (set by /Users/haohao/.pyenv/version)
$ python -V
Python 3.6.4
  • 解除安裝某個 Python 版本
pyenv uninstall 3.6.4

virtualenv 的安裝及使用


1. 安裝

sudo pip install virtualenv

2. 使用

下面我們使用 virtualenv 建立一個完全隔離的 Python 虛擬環境:
1.新建一個目錄(一般用來用作工程路徑)

$ mkdir myproject

2.進入目錄建立一個完全獨立乾淨的虛擬環境
如果 virtualenv 後面不加任何引數,那麼預設建立的虛擬環境的 Python 版本是系統當前版本,如果要建立其他版本,可以使用 -p 引數指定其他版本的 python 可執行檔案路徑。可執行檔案可以在上一步安裝的 pyenv~/.pyenv/versions 路徑找到,該路徑是 pyenv 管理的所有 Python 版本路徑。

# 使用系統當前的 Python 版本建立虛擬環境
$ virtualenv venv
New python executable in /Users/haohao/PycharmProjects/myproject/venv/bin/python
# 建立虛擬環境時指定 Python 版本
$ virtualenv -p ~/.pyenv/versions/2.6.7/bin/python venv
Running virtualenv with interpreter /Users/haohao/.pyenv/versions/2.6.7/bin/python
New python executable in /Users/haohao/PycharmProjects/myproject/venv/bin/python
Installing setuptools<37, pip, wheel<0.30...done.

3.啟用建立的虛擬環境並使用
可以看出當前虛擬環境版本已經是 Python 2.6.7 了,而且所在路徑確實是在上一步建立的虛擬環境路徑。接下來使用 pip 安裝的任何包都會安裝在虛擬環境目錄裡面,不會安裝在系統標準目錄,從而保證當前環境是絕對乾淨的,對於系統是完全隔離的。

$ source venv/bin/activate
$ which python
/Users/haohao/PycharmProjects/myproject/venv/bin/python
$ python -V
Python 2.6.7

4.退出虛擬環境,回到系統版本

$ deactivate