用Pyenv 和 Virtualenv 搭建單機多版本 Python 虛擬開發(fā)環(huán)境
作為主流開發(fā)語言, 用Python 開發(fā)的程序越來越多。 方便的是大多Linux系統(tǒng)里面都默認(rèn)集成了Python, 開發(fā)可以隨時隨地開始。 但有時候這也成為了一個短板, 比如說有時候我們需要開發(fā)和調(diào)試一些需要安裝在默認(rèn)Python路徑里的程序, 反復(fù)地修改和安裝會使系統(tǒng)目錄越來越亂,這對于一些有潔癖的程序員來說是不可接受的。 還有時候我們需要在不同的Python版本上開發(fā), 而系統(tǒng)一般只會自帶一到兩種Python版本, 切換起來更是麻煩。
本文將介紹如何利用pyenv 和virtualenv 在單機上搭建多版本Python 虛擬開發(fā)環(huán)境。
首先我們搞清楚pyenv 和virtualenv分別是干什么的。
pyenv可以幫助你在一臺開發(fā)機上建立多個版本的Python環(huán)境, 并提供方便的切換方法。
virtualenv則提供了一種功能, 就是將一個目錄建立為一個虛擬的Python環(huán)境, 這樣的話, 用戶可以建立多個虛擬環(huán)境, 每個環(huán)境里面的Python版本可以是不同的, 也可以是相同的, 而且環(huán)境之間相互獨立。
如果解釋得還不是很清楚的話,我們舉例說明。
首先我們可以用pyenv 安裝多個Python 版本, 比如安裝了2.5, 2.6, 3.3 三個版本。 用戶可以隨意切換當(dāng)前默認(rèn)的Python版本。 但這時候, 每個版本的環(huán)境仍是唯一的, 如果我們想在環(huán)境中安裝一些庫的話, 還是會導(dǎo)致這個版本的環(huán)境被修改。 這個時候, 如果我們用virtual env去建立虛擬環(huán)境, 就可以完全保證系統(tǒng)路徑的干凈。無論你在虛擬環(huán)境中安裝了什么程序, 都不會影響已安裝版本的系統(tǒng)環(huán)境。
說了這么多, 還是動手實踐一下來得實在。本文的例子是在一臺干凈的Ubuntu機器上進行的
1. 首先我們安裝pyenv
因為我的Ubuntu是干凈的, 所以還需要先安裝curl 和 git
sudo apt-get install curl git-core
接下來安裝pyenv
curl -L https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
這個命令會把pyenv安裝到當(dāng)前用戶的 ~/.pyenv目錄下.
同時, 我們還需要把下面代碼存到~/.bashrc文件中:
export PYENV_ROOT="${HOME}/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH="${PYENV_ROOT}/bin:${PATH}" eval "$(pyenv init -)" fi
這段代碼的作用主要是指明pyenv的位置, 以便以后可以直接在命令行里面運行pyenv命令。 保存在~/.bashrc 文件中是為了每次用戶登陸后自動生效。
所以如果你是第一次運行命令并且沒有注銷的話, 這一段是不會生效的, 我們還需要運行下面的命令令其生效
source ~/.bashrc
然后就可以直接在命令行里面敲pyenv了。
2. 安裝一些必須的包
sudo apt-get build-dep Python2.7
后面安裝其他版本Python的時候會需要這些包
3. 安裝某個版本的Python
首先我們可以查看一下有哪些版本的Python 可以安裝
pyenv install --list
結(jié)果如下:
2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.5 ...
接下來, 作為例子我們安裝兩個版本 (2.7.1 和 3.3.5)
pyenv install 2.7.1
pyenv install 3.3.5
安裝完畢后, 我們可以查看安裝的情況
pyenv versions
輸出結(jié)果如下:
* system (set by /home/tony/.pyenv/version) 2.7.1 3.3.5
簡單來說我們已經(jīng)在這臺機器上安裝了三個版本的Python
system 代表當(dāng)前系統(tǒng)的Python 版本
2.7.1 和 3.3.5是我們用pyenv安裝的
*表示當(dāng)前的Python版本, 可以看到, 我們還在使用的是默認(rèn)的system 自帶的Python版本
4. 切換Python版本做一下測試
既然已經(jīng)安裝了兩個其他版本的Python, 我們來做一下測試
pyenv global 2.7.1
這條命令就是將當(dāng)前Python 版本切換到2.7.1
再次運行 pyenv versions, 結(jié)果如下:
system * 2.7.1 (set by /home/tony/.pyenv/version) 3.3.5
可以看到當(dāng)前的Python 版本已經(jīng)切換到2.7.1了, 如果還不放心, 直接運行 ‘Python’ 命令進行驗證:
tony@ubuntu:~$ Python Python 2.7.1 (r271:86832, May 9 2014, 01:07:17) [GCC 4.8.2] on Linux3 Type "help", "copyright", "credits" or "license" for more information. >>>
這里可以清楚看到, 當(dāng)前版本確實是2.7.1
同理, 我們可以繼續(xù)用Python global在各個版本之間進行切換, 如果要切換回系統(tǒng)版本, 請用:
pyenv global system
如果要卸載某個版本的Python, 可以這樣:
pyenv uninstall x.x.x
5. 利用virtualenv 創(chuàng)建虛擬Python環(huán)境
現(xiàn)在我們已經(jīng)安裝了多個Python版本,但是這還不夠, 某些有潔癖的程序員是一定要系統(tǒng)環(huán)境足夠干凈的,這時候我們可以使用virtualenv來創(chuàng)建虛擬Python環(huán)境
virtualenv本是一個獨立的工具,官網(wǎng)在這里:https://pypi.Python.org/pypi/virtualenv
幸運的是,如果你是安裝我們前面的方式安裝pyenv的,那它已經(jīng)幫我們以plugin的形式安裝好了virtualenv, 我們只要使用就好了
首先我們創(chuàng)建一個2.7.1的虛擬環(huán)境
pyenv virtualenv 2.7.1 env271
這條命令在本機上創(chuàng)建了一個名為env271的Python虛擬環(huán)境,這個環(huán)境的真實目錄位于:~/.pyenv/versions/
注意,命令中的 ‘2.7.1’ 必須是一個安裝前面步驟已經(jīng)安裝好的Python版本, 否則會出錯。
然后我們可以繼續(xù)通過 ‘pyenv versions’ 命令來查看當(dāng)前的虛擬環(huán)境, 結(jié)果如下:
* system (set by /home/tony/.pyenv/version) 2.7.1 3.3.5 env271
這里我們可以看到, 除了已經(jīng)安裝的Python版本, 我們多出了一個env271的Python虛擬環(huán)境
6. 切換和使用新的Python虛擬環(huán)境
切換到新的虛擬環(huán)境的命令為
pyenv activate env271
接下來我們的Python環(huán)境就已經(jīng)切換到2.7.1的虛擬環(huán)境了, 運行 ‘Python’ 命令認(rèn)證
(env271)tony@ubuntu:~$ Python Python 2.7.1 (r271:86832, May 9 2014, 01:07:17) [GCC 4.8.2] on Linux3 Type "help", "copyright", "credits" or "license" for more information. >>>
可以看到, Python版本已經(jīng)是2.7.1, 而且是在虛擬環(huán)境之中 (env271)
下面基本上你就可以在這個虛擬環(huán)境里面為所欲為了 :) 再也不用擔(dān)心系統(tǒng)路徑被搞亂的問題了。
如果要切換回系統(tǒng)環(huán)境, 運行這個命令即可
pyenv deactivate
那如果要刪除這個虛擬環(huán)境呢? 答案簡單而且粗暴,只要直接刪除它所在的目錄就好:
rm -rf ~/.pyenv/versions/env271/
至此大功告成!
本文簡單介紹了如何利用pyenv 和virtualenv來單機多版本Python虛擬開發(fā)環(huán)境的方法,
這兩個工具還有很多功能, 無法一一詳述,具體可以參考他們的官方文檔。
————
本文完,如果你想繼續(xù)學(xué)習(xí),可以點擊下面的鏈接,繼續(xù)看: